Постоянный блокдев сетра чтения впереди настройки


14

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

3
Почему вы хотите увеличить скорость чтения SSD? Я не вижу смысла, учитывая, что SSD имеют малое время поиска.
Стефан Шазелас

Ответы:


16

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

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

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

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

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

Ниже приведен пример применения определенного планировщика для твердотельных накопителей Intel, желаемого значения времени чтения (4096 блоков = 2048 КБ), а также применения другого планировщика для всех других твердотельных накопителей:

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, кроме поля модели, верно?
Banjer

Да, ничего особенного для твердотельных накопителей Intel нет, я использовал его в качестве примера для фильтрации только по атрибутам. Вам нужно будет использовать, udevadm infoчтобы найти параметры, специфичные для вашего оборудования.
Зорлем

10

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

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

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

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

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


Я вижу hdparmна SLES 11, но не могу найти hdparm.conf. Google, кажется, говорит мне, что hdparmдля сохранения любых настроек необходим скрипт rc , по крайней мере, на SuSE.
Banjer

@Banjer, да, похоже, это расширение Debian (немного измененное в Ubuntu): скрипт оболочки, запускаемый при ранней загрузке, и горячее подключение устройства, которое анализирует этот файл и вызывает hdparmсоответственно. Я обновил ответ.
Стефан Шазелас

+1 за указание /sysпути, хотя udevправило @zorlem прекрасно подходит для настройки загрузки.
Тотор

-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.