Стійкий блокдевт-сетра читає налаштування вперед


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 BTW? Я не бачу сенсу, враховуючи, що SSD мають невеликі часи пошуку.
Стефан Шазелас

Відповіді:


16

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

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

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

і перевірка всіх пар ATTR для вашого блокового пристрою.

Ще однією перевагою є можливість встановлення параметрів підключаються дисків (наприклад, у корпусах або відсіках гарячої заміни), і ці параметри застосовуватимуться до всіх нових пристроїв за умови відповідності параметрів пристрою.

Ось приклад застосувати конкретний планувальник для SSD-дисків Intel, бажане значення для перечитання (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[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's, але я не думаю, що запропоновані вами правила стосуються Intel, за винятком поля моделі, правда?
Банджер

Так, для SSD-дисків Intel немає нічого конкретного, я використовував це як приклад для фільтрації лише за атрибутами. Вам потрібно буде використовувати udevadm infoдля пошуку параметрів, специфічних для вашого обладнання.
zorlem

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, так, схоже, це розширення 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.