永久blockdev setra预读设置


14

我在SLES 11 SP2服务器上/dev/sda1/dev/sdb1上面安装了一些SSD ,并且可以通过以下方式调整预读设置blockdev --setra

sudo blockdev --setra 4096 /dev/sda
sudo blockdev --setra 4096 /dev/sdb
sudo blockdev --getra /dev/sda
4096
sudo blockdev --getra /dev/sdb
4096

如何在启动时保持此设置?具体来说,中是否有相应的设置sysctl.conf,还是我必须准备一个rc脚本才能实现此目的?


2
我不知道是否有“适当的”解决方案,但是udev规则肯定比RC脚本更合适。
Patrick

3
为什么要增加 SSD BTW的预读功能?鉴于SSD的寻道时间短,我看不到这一点。
斯特凡Chazelas

Answers:


16

我建议您使用udev来设置SSD磁盘的参数。这样,您可以配置更适合SSD等的特定队列调度程序。您还可以基于许多参数,仅将参数应用于某些设备。

您可以通过执行以下操作来获取匹配设备所需的特定属性(例如,磁盘型号和制造商):

udevadm info -a -p /sys/block/sda

并检查您的块设备的所有ATTR对。

另一个好处是能够设置可插拔磁盘的参数(例如,在机箱或热插拔托架中),并且只要设备参数匹配,该设置将应用于所有新设备。

这是一个示例,将特定的调度程序应用于Intel SSD,所需的预读值(4096块= 2048 kb),还将一个调度程序应用于所有其他SSD:

cat /etc/udev/rules.d/99-ssd.rules
# http://unix.stackexchange.com/a/71409/36574
# Setting specific kernel parameters for a subset of block devices (Intel SSDs)
SUBSYSTEM=="block", ATTRS{model}=="Intel SSDSC*", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="2048", ATTR{queue/scheduler}="deadline"
# for all other non-rotational block devices set a scheduler to 'noop' and readahead to 1024KB
SUBSYSTEM=="block", ATTR{queue/rotational}=="0", ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop"

保存文件后,您可以测试您的规则是否与设备匹配以及udev使用udevadm会做什么:

udevadm test --action=add /sys/block/sda

这会打印出udev加载的所有规则,匹配项,不匹配项以及插入设备后udev会做出哪些决定。

希望这可以帮助。


好信息。如果有机会,我会尝试一些类似的udev规则,然后再回覆您。我们使用OCZ vertex 3的是,但是我认为您建议的规则不特定于Intel,除了model字段,对吗?
Banjer 2013年

是的,没有专门针对Intel SSD的东西,我仅将其用作仅按属性过滤的示例。您将需要使用udevadm info查找特定于您的硬件的参数。
zorlem

10

请注意,至少可以通过/sys/sys/class/block/sda/queue/read_ahead_kbblockdevhdparmhdparm -a)设置预读。

hdparm在Debian及其衍生版本上带有一个hdparm.conf,它指定在启动时以及在热插拔时(通过udev规则)。

因此,您可以:

/dev/disk/by-id/my-disk... {
  read_ahead_sect = 4096
}

(最好使用ID,sda因为ID 可以从一个引导更改为另一个引导)。


hdparm在SLES 11上看到了,但似乎找不到hdparm.conf。Google似乎告诉我hdparm,至少在SuSE上,要保持任何设置,都需要一个rc脚本。
Banjer 2013年

@Banjer,是的,它看起来像是Debian扩展名(在Ubuntu中稍作修改):在早期启动和设备热插拔时运行的shell脚本会解析该文件并进行相应调用hdparm。我已经更新了答案。
斯特凡Chazelas

+1用于指定/sys路径,尽管@zorlem udev规则对于启动配置非常有用。
Totor 2014年

-1

在中没有对应的内容sysctl,所以,是的,/etc/rc.local是一种方法或类似方法。并且要当心,我个人注意到在Ubuntu上,即使在启动后进行一次设置,这些更改也会进一步漂移,因此,使用crontab它来保留它甚至很有道理。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.