32.6. 通用块设备性能优化参数
此处列出的通用调优参数位于 /sys/block/sdX/queue/
目录中。
以下列表的调优参数与 I/O 调度程序调整不同,适用于所有 I/O 调度程序:
add_random
-
有些 I/O 事件贡献到
/dev/random
的熵池。如果这些贡献的开销成为可衡量,则此参数可设为0。
iostats
默认情况下,
iostats
被启用,默认值为1
。将iostats
值设置为0
可禁用为设备收集 I/O 统计信息,从而消除 I/O 路径的少量开销。将iostats
设置为0
可能会稍提高高性能设备的性能,比如某些 NVMe 固态存储设备。建议启用iostats
,除非供应商为给定的存储模型指定。如果您禁用
iostats
,则/proc/diskstats
文件中不再存在该设备的 I/O 统计信息。/sys/diskstats
文件的内容是监控 I/O 工具的 I/O 信息的来源,如sar
或iostats
。因此,如果您为设备禁用iostats
参数,则 I/O 监控工具输出中不再存在该设备。max_sectors_kb
以 KB 为单位指定 I/O 请求的最大大小。默认值为
512
KB。此参数的最小值由存储设备的逻辑块大小决定。此参数的最大值由max_hw_sectors_kb
的值决定。红帽建议
max_sectors_kb
始终是最佳 I/O 大小和内部清除块大小的倍数。如果一个参数为零或者未由存储设备指定,则使用logical_block_size
值。nomerges
-
大多数工作负载都受益于请求合并。但是,禁用合并对调试很有用。默认情况下,
nomerges
参数设置为0
,它启用合并。要禁用简单的单校合并,nomerges
被设置为1
。要禁用所有类型的合并,将nomerges
设置为2
。 nr_requests
-
它是队列的 I/O 的最大允许数。如果当前 I/O 调度程序是
none
,则此数值只能减少;否则,该数值可以被增加或减少。 optimal_io_size
- 有些存储设备通过这个参数报告最佳 I/O 大小。如果报告这个值,红帽建议应用程序问题 I/O,并尽可能使用最佳 I/O 大小的多个问题。
read_ahead_kb
定义在后续读操作期间操作系统可提前读取的最大 KB 数。因此,在内核页面缓存中已存在所需信息,用于改进 I/O 性能。
设备映射程序通常受益于高
read_ahead_kb
值。每个要映射的设备为128
KB 是一个很好的起点,但将read_ahead_kb
的值增加到磁盘的请求队列的max_sectors_kb
值可在大量文件按顺序读取的应用程序环境中提高性能。rotational
-
有些固态磁盘无法正确公告其固态状态,并被挂载为传统的旋转磁盘。手动将
rotational
值设置为0
以禁用调度程序中的不必要的搜索逻辑。 rq_affinity
-
rq_affinity
的默认值为1
。它会在一个 CPU 内核中完成 I/O 操作,它位于发布的 CPU 内核的同一 CPU 组中。要只对发出 I/O 请求的处理器执行完成,请将rq_affinity
设置为2
。要禁用上述两个功能,请将它设置为0
。 scheduler
-
要为特定存储设备设置调度程序或调度程序首选项顺序,请编辑
/sys/block/devname/queue/scheduler
文件,其中 devname 是您要配置的设备的名称。