if [ -s nvme_symbol_set ];then for dev in $(cat nvme_symbol_set) do
时间: 2024-04-23 14:22:46 浏览: 119
这是一个Shell脚本中的if语句。该语句首先检查"nvme_symbol_set"文件是否存在且其大小大于0(-s选项用于检查文件大小),如果是,则执行后续的循环语句。
循环语句使用"cat"命令读取"nvme_symbol_set"文件中的内容,并将其作为"for"循环的输入。在每次循环中,"dev"变量都将设置为所读取的行。因此,循环将对"nvme_symbol_set"文件中的每一行执行一次。
相关问题
#!/bin/bash CPWD=$(cd $(dirname $0);pwd) cd $CPWD rm -f ssd_symbol_set hdd_symbol_set nvme_symbol_set filter_ssd_hdd_nvme_set() { rm -f ssd_symbol_set hdd_symbol_set nvme_symbol_set os_disk_symbol=$(echo $(lsblk |grep -B1 -E "part|boot" |grep -E "^sd[a-z]+|^nvme" |awk '{print $1}') |sed 's/ /|/') non_os_disk_set=$(lsscsi -g |-E "ATA|TOSHIBA" |awk '{print $(NF-1)}' |grep -Ev $os_disk_symbol) if [[ -n $non_os_disk_set ]];then for i in $(echo "$non_os_disk_set") do rotationRate=$(smartctl -i $i |awk -F":" '/Rotation Rate/{print $2}') if [[ $rotationRate =~ "Solid State Device" ]];then echo $i |awk -F"/" '{print $3}' >> ssd_symbol_set elif [[ $rotationRate =~ "rpm" ]];then echo $i |awk -F"/" '{print $3}' >> hdd_symbol_set fi done fi nvme_info_set=$(nvme list |grep -E "nvme[0-9]+n1") if [[ -n $nvme_info_set ]];then echo "$nvme_info_set" |awk '{print $1}' |awk -F"/" '{print $3}' > nvme_symbol_set fi } hdd_parallel_fio_test() { # multi hdd fio test if [ -s hdd_symbol_set ];then for dev in $(cat hdd_symbol_set) do nohup &>/dev/null bash hdd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/hdd_fio_log mv hdd_sd*_*.log $CPWD/hdd_fio_log fi } ssd_parallel_fio_test() { # multi sata ssd fio test if [ -s ssd_symbol_set ];then for dev in $(cat ssd_symbol_set) do nohup &>/dev/null bash ssd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/ssd_fio_log mv ssd_sd*_*.log $CPWD/ssd_fio_log fi } nvme_parallel_fio_test() { # multi nvme ssd fio test if [ -s nvme_symbol_set ];then for dev in $(cat nvme_symbol_set) do nohup &>/dev/null bash ssd_raw_fio_test.sh $dev & done wait mkdir -p $CPWD/nvme_fio_log mv ssd_nvme*_*.log $CPWD/nvme_fio_log fi } filter_ssd_hdd_nvme_set #hdd_parallel_fio_test #ssd_parallel_fio_test nvme_parallel_fio_test
这是一个 Shell 脚本,主要作用是对系统中的 SSD、HDD 和 NVMe 进行 FIO 性能测试,并将测试结果保存在对应的日志文件中。具体实现步骤如下:
1. 定义了一个函数 filter_ssd_hdd_nvme_set,该函数的作用是获取系统中所有 SSD、HDD 和 NVMe 的设备符号,并保存在对应的文件中。
2. 定义了三个函数 hdd_parallel_fio_test、ssd_parallel_fio_test 和 nvme_parallel_fio_test,分别用于对系统中的 HDD、SSD 和 NVMe 执行 FIO 性能测试,并将测试结果保存在对应的日志文件中。
3. 在执行主函数时,首先调用 filter_ssd_hdd_nvme_set 函数获取 SSD、HDD 和 NVMe 的设备符号,然后分别调用 hdd_parallel_fio_test、ssd_parallel_fio_test 和 nvme_parallel_fio_test 函数对它们进行 FIO 性能测试。
4. 在执行 FIO 测试时,使用 nohup 命令将测试脚本在后台执行,并将输出重定向到 /dev/null,以避免输出影响测试结果。
5. FIO 测试完成后,将测试日志文件移动到对应的目录中,以便后续分析。
最终,执行该脚本后,可以对系统中的所有 SSD、HDD 和 NVMe 进行 FIO 性能测试,并将测试结果保存在对应的日志文件中,方便后续分析和比较。
static void nvme_calc_irq_sets(struct irq_affinity *affd, unsigned int nrirqs) { struct nvme_dev *dev = affd->priv; unsigned int nr_read_queues, nr_write_queues = dev->nr_write_queues; if (!nrirqs) { nrirqs = 1; nr_read_queues = 0; } else if (nrirqs == 1 || !nr_write_queues) { nr_read_queues = 0; } else if (nr_write_queues >= nrirqs) { nr_read_queues = 1; } else { nr_read_queues = nrirqs - nr_write_queues; } dev->io_queues[HCTX_TYPE_DEFAULT] = nrirqs - nr_read_queues; affd->set_size[HCTX_TYPE_DEFAULT] = nrirqs - nr_read_queues; dev->io_queues[HCTX_TYPE_READ] = nr_read_queues; affd->set_size[HCTX_TYPE_READ] = nr_read_queues; affd->nr_sets = nr_read_queues ? 2 : 1; }static int nvme_setup_irqs(struct nvme_dev *dev, unsigned int nr_io_queues) { struct pci_dev *pdev = to_pci_dev(dev->dev); struct irq_affinity affd = { //ָ���ж����Եļ��㷽���Ͳ��� .pre_vectors = 1, .calc_sets = nvme_set_irq_affinity, //nvme_calc_irq_sets, .priv = dev, }; unsigned int irq_queues, poll_queues; poll_queues = min(dev->nr_poll_queues, nr_io_queues - 1); dev->io_queues[HCTX_TYPE_POLL] = poll_queues; dev->io_queues[HCTX_TYPE_DEFAULT] = 1; dev->io_queues[HCTX_TYPE_READ] = 0; irq_queues = 1; if (!(dev->ctrl.quirks & NVME_QUIRK_SINGLE_VECTOR)) irq_queues += (nr_io_queues - poll_queues); return pci_alloc_irq_vectors_affinity(pdev, 1, irq_queues, PCI_IRQ_ALL_TYPES | PCI_IRQ_AFFINITY, &affd); } 在 Linux 5.17.12 内核版本中,可以通过修改 pci_alloc_irq_vectors_affinity() 函数的 affinity_hint 参数来绑定 NVMe 驱动的所有 I/O 队列到同一 CPU 核心上。
是的,通过设置 affinity_hint 参数为一个指定的 CPU 核心,可以将 NVMe 驱动的所有 I/O 队列绑定到同一 CPU 核心上,从而提高系统的性能和响应速度。这个参数可以在 nvme_setup_irqs() 函数中调用 pci_alloc_irq_vectors_affinity() 函数时设置。同时,在 nvme_calc_irq_sets() 函数中也可以根据系统的硬件资源和配置情况,动态计算 IRQ 的分配方式和数量,以实现更加高效的 IRQ 管理和利用。
阅读全文