Red Hat Training

A Red Hat training course is available for RHEL 8

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 信息的来源,如 sariostats。因此,如果您为设备禁用 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 是您要配置的设备的名称。