33.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 请求的最大大小。默认值为
512KB。此参数的最小值由存储设备的逻辑块大小决定。此参数的最大值由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值。每个要映射的设备为128KB 是一个很好的起点,但将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 是您要配置的设备的名称。