Стойкая функция blockdev setra для чтения вперед

У меня есть некоторые SSD-файлы, установленные на /dev/sda1 и /dev/sdb1 на сервере SLES 11 SP2, и я смог настроить настройку чтения вперед с помощью 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-скрипта, чтобы это произошло?

Я бы предложил вам использовать udev для установки параметров для дисков SSD. Таким образом, вы можете настроить конкретный планировщик очередей, который более подходит для SSD и т. Д. Вы также можете применять параметры только к некоторым устройствам, основанным на множестве параметров.

Вы можете получить определенные атрибуты, необходимые для соответствия вашим устройствам (например, модели диска и производителя), выполнив:

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

и проверка всех пар ATTR для вашего блочного устройства.

Другим преимуществом является возможность установки параметров для подключаемых дисков (например, в шкафах или отсеках горячих точек), и настройка будет применена ко всем новым устройствам при условии соответствия параметров устройства.

Ниже приведен пример применения определенного планировщика для твердотельных накопителей Intel, требуемого значения readahead (4096 блоков = 2048 кб), а также применения другого планировщика для всех остальных 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[az]", 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[az]", ATTR{bdi/read_ahead_kb}="1024", ATTR{queue/scheduler}="noop" 

После сохранения файла вы можете проверить, будет ли ваше правило соответствовать устройству и что будет делать udev с помощью udevadm:

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

Это печатает все правила, которые загружают udev, какие совпадения, что нет, и какие решения будет делать udev при подключении устройства.

Надеюсь это поможет.

Обратите внимание, что чтение вперед может быть установлено как минимум через /sys ( /sys/class/block/sda/queue/read_ahead_kb ), blockdev и hdparm ( hdparm -a ).

hdparm на Debian и его производных поставляется с hdparm.conf который определяет атрибуты для каждого устройства, которые должны быть установлены при загрузке, и при использовании hot-plug (через правила udev ).

Таким образом, вы можете:

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

(лучше использовать идентификаторы, чем sda которые могут меняться от одной загрузки к следующей).

В sysctl нет ничего соответствующего, поэтому, yep, /etc/rc.local – это способ или аналогичный. И будьте осторожны, – я лично заметил, что на Ubuntu – эти изменения дрейфуют еще больше, даже будучи установленными после загрузки, поэтому, возможно, даже имеет смысл использовать crontab для его сохранения.