NVMe设备应配置none调度器、禁用ASPM和自动功耗状态、优化多队列与中断亲和性,并采用XFS/ext4配合noatime等挂载选项以发挥极致性能。

合理配置IO调度器
NVMe设备本身具备极低延迟和高并行能力,传统机械盘调度器(如cfq、deadline)不仅无益,反而增加开销。Linux 5.0+内核默认对NVMe使用none调度器(即绕过IO调度层),这是最推荐的配置。
确认当前设置:
cat /sys/block/nvme0n1/queue/scheduler
若输出含 [none],说明已启用;若为其他值,可临时切换:
echo none > /sys/block/nvme0n1/queue/scheduler
持久化配置建议在/etc/default/grub中添加内核启动参数:
elevator=none nvme_core.default_ps_max_latency_us=0
然后运行 update-grub && reboot
关闭不必要的电源管理
NVMe支持多种PCIe ASPM和设备级电源状态(PS),默认启用可能导致延迟突增或吞吐下降,尤其在高负载持续写入场景。
禁用ASPM(需root权限):
echo performance > /sys/bus/pci/devices/0000:xx:xx.x/power/control
其中地址可通过 lspci | grep NVMe 获取。
同时关闭NVMe自动功耗状态切换:
echo 0 > /sys/module/nvme_core/parameters/default_ps_max_latency_us
该参数设为0表示禁用所有非活动状态(PS3/PS4),强制保持高性能状态。
优化队列深度与中断亲和性
NVMe原生支持多队列(MQ),每个CPU核心可绑定独立IO队列和中断。默认配置可能未充分利用多核并行能力。
- 检查当前队列数:cat /sys/block/nvme0n1/device/nr_queues —— 应接近CPU逻辑核数
- 绑定中断到特定CPU(以提升缓存局部性):
echo 0-3 > /proc/irq/$(cat /proc/interrupts | grep nvme | head -1 | awk '{print $1}' | sed 's/://')/smp_affinity_list - 对高吞吐业务(如数据库),可增大队列深度:
加载模块时指定:modprobe nvme_core default_ps_max_latency_us=0 max_queue_size=1024
文件系统与挂载选项调优
即使底层NVMe性能强劲,不匹配的文件系统配置也会成为瓶颈。
推荐使用XFS或ext4(开启meta_bg, inline_data),避免btrfs在高随机写下的元数据开销。
关键挂载选项示例(/etc/fstab):
UUID=xxx /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
说明:
– noatime/nodiratime:跳过访问时间更新,减少小写放大
– logbufs/logbsize(XFS):增大日志缓冲提高顺序写吞吐
– 避免barrier=1或journal=ordered等同步开销项,NVMe自身已保障写顺序与持久性











