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


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.