如何使用 UDEV 规则设置 nr_requests永久生效

nr_requests 是块设备的一个参数,它控制可以在块层中为读或者写请求分配的最大请求,默认值为 128 。

偶尔可能会建议调整该值,一般来说:

  • 增加该值将提高 I/O 吞吐量,但也会增加内存使用量。
  • 降低该值将有利于对延迟敏感的实时应用程序,但也会降低 I/O 吞吐量。

这篇文章详细说明了如何在系统重新启动后永久设置该参数。

1. 创建一个新的 udev 规则。

例如,创建文件 /etc/udev/rules.d/71-nr-requests.rules ,内容如下:

SUBSYSTEM!="block", GOTO="end_rule"
ENV{DEVTYPE}=="partition", GOTO="end_rule"
ACTION!="add|change", GOTO="end_rule"
KERNEL=="sd*", ATTR{queue/nr_requests}="256" 
LABEL="end_rule"

上述规则会将所有 sd* 设备的 nr_requests 设置为 256,如果我们需要将某些设备(例如 sda 和 sdb)列入黑名单,请使用以下规则:

SUBSYSTEM!="block", GOTO="end_rule"
ENV{DEVTYPE}=="partition", GOTO="end_rule"
ACTION!="add|change", GOTO="end_rule"
KERNEL=="sda|sdb", GOTO="end_rule"
KERNEL=="sd*", ATTR{queue/nr_requests}="256"
LABEL="end_rule"
欢迎 on it road

2. 应用规则

在应用规则之前验证“nr_requests”参数的值:

$ grep "" /sys/block/sd*/queue/nr_requests
/sys/block/sda/queue/nr_requests:128
/sys/block/sdb/queue/nr_requests:128

在 CentOS/RHEL 6 或者更高版本上应用规则:

# udevadm trigger

在 CentOS/RHEL 5 中使用它

# udevtrigger

应用规则后验证“nr_requests”参数值:

$ grep "" /sys/block/sd*/queue/nr_requests
/sys/block/sda/queue/nr_requests:256
/sys/block/sdb/queue/nr_requests:256
日期:2020-09-17 00:13:53 来源:oir作者:oir