Введение
В этом практическом занятии (лабораторной работе) мы рассмотрим, как определить настроенный дисковый планировщик в среде Linux. Понимание активного планировщика ввода-вывода (I/O scheduler) является важным аспектом настройки производительности и оптимизации операций с хранилищем.
Мы будем добиваться этого, исследуя файловую систему /sys для прямого запроса конфигурации планировщика для блочных устройств, проверяя информацию о планировщике в кольцевом буфере ядра с помощью команды dmesg и анализируя правила udev, которые могут повлиять на конфигурацию устройств, включая планировщик.
Проверьте планировщик с помощью команды cat /sys/block/*/queue/scheduler
На этом этапе мы узнаем, как проверить, какой планировщик ввода-вывода (I/O scheduler) используется для блочных устройств в Linux. Планировщик ввода-вывода представляет собой компонент ядра, который определяет порядок подачи блочных операций ввода-вывода на хранилище. Различные планировщики оптимизированы для разных типов рабочих нагрузок.
Эту информацию можно получить, изучив файлы в файловой системе /sys. Файловая система /sys представляет собой виртуальную файловую систему, которая предоставляет интерфейс к структурам данных ядра.
Для проверки планировщика для всех блочных устройств можно использовать команду cat вместе с символом подстановки. Символ подстановки * соответствует любым символам, поэтому /sys/block/*/queue/scheduler будет соответствовать файлу планировщика для каждого блочного устройства, перечисленного в /sys/block/.
Если терминал не открыт, откройте его. Для этого нажмите на значок Xfce Terminal слева на рабочем столе.
Теперь введите следующую команду и нажмите Enter:
cat /sys/block/*/queue/scheduler
Вы увидите вывод, похожий на следующий:
noop [deadline] cfq
noop [deadline] cfq
В выводе показаны доступные планировщики, а текущий активный планировщик заключен в квадратные скобки []. В этом примере для блочных устройств в настоящее время активен планировщик deadline.
Понимание того, какой планировщик активен, может быть важным для настройки производительности, особенно в серверных средах или системах с определенными требованиями к хранилищу.
Проверьте планировщик в dmesg
На предыдущем этапе мы проверили текущий активный планировщик ввода-вывода (I/O scheduler) с использованием файловой системы /sys. Другим источником информации о инициализации ядра и устройств является кольцевой буфер ядра, который можно просмотреть с помощью команды dmesg.
Команда dmesg выводит буфер сообщений ядра. Этот буфер содержит сообщения, созданные ядром во время загрузки и работы системы, включая информацию о обнаруженном оборудовании и драйверах устройств.
Мы можем использовать команду dmesg для просмотра сообщений, связанных с блочными устройствами и их настроенными планировщиками во время процесса загрузки системы. Поскольку вывод команды dmesg может быть довольно длинным, мы будем использовать команду grep для фильтрации вывода и поиска строк, содержащих слово "scheduler".
Введите следующую команду в терминале и нажмите Enter:
dmesg | grep scheduler
Символ | называется пайпом (pipe). Он берет вывод команды слева (dmesg) и передает его в качестве входных данных команде справа (grep). Затем команда grep scheduler ищет строки, содержащие слово "scheduler", в полученных входных данных.
Вы должны увидеть вывод, похожий на следующий:
[ X.XXXXXX] io scheduler noop registered
[ X.XXXXXX] io scheduler deadline registered
[ X.XXXXXX] io scheduler cfq registered
[ X.XXXXXX] sdX: [sd-mod] Asking for cache data failed
[ X.XXXXXX] sdX: [sd-mod] Assuming drive cache: write through
[ X.XXXXXX] sdX: [sd-mod] Enabled discard support
[ X.XXXXXX] sdX: [sd-mod] **Using deadline scheduler**
Найдите строки, в которых упоминается "Using [название_планировщика] scheduler". Это подтверждает, какой планировщик был выбран для ваших блочных устройств во время загрузки. Вывод может немного отличаться в зависимости от конкретной конфигурации системы, но вы должны увидеть упоминания о зарегистрированных планировщиках и о том, какой из них используется.
Этот метод предоставляет историческую информацию о процессе загрузки, в то время как проверка файловой системы /sys дает вам текущее состояние. Оба способа полезны для понимания конфигурации ввода-вывода вашей системы.
Проверьте правила udev в /etc/udev/rules.d
На предыдущих этапах мы узнали, как проверить активный планировщик ввода-вывода (I/O scheduler) с использованием /sys и dmesg. Теперь давайте рассмотрим, как система может быть настроена для автоматической настройки планировщика при обнаружении устройств. Чаще всего это делается с помощью udev.
udev представляет собой менеджер устройств для ядра Linux. Он управляет узлами устройств в /dev и обрабатывает все события в пользовательском пространстве при подключении или отключении аппаратных устройств от системы. udev использует правила для сопоставления устройств и выполнения действий, таких как установка прав доступа или настройка параметров устройств, например, планировщика ввода-вывода.
Правила udev обычно хранятся в директории /etc/udev/rules.d/. Эти файлы имеют расширение .rules. Мы можем проверить эти файлы, чтобы узнать, есть ли какие-либо правила, которые конкретно устанавливают планировщик ввода-вывода для определенных устройств.
Сначала выведем список файлов в директории /etc/udev/rules.d/ с помощью команды ls:
ls /etc/udev/rules.d/
Вы увидите список файлов, возможно, включая некоторые, связанные с блочными устройствами или хранилищем. Вывод может выглядеть примерно так:
10-snapd.rules 50-cloudimg-settings.rules 70-snap.core.rules 70-snap.lxd.rules 70-snap.microk8s.rules 70-snap.snapd.rules 70-snap.snapd-desktop-integration.rules 99-vmware-scsi-udev.rules
Теперь давайте посмотрим внутри одного из этих файлов, чтобы узнать, можно ли найти какие-либо правила, связанные с планировщиками. Мы будем использовать команду cat для отображения содержимого файла. Например, давайте посмотрим на файл 99-vmware-scsi-udev.rules (точное имя файла может немного отличаться в зависимости от окружения, но ищите файл, который, по-видимому, связан с хранилищем или устройствами):
cat /etc/udev/rules.d/99-vmware-scsi-udev.rules
Вы, возможно, увидите правила, которые сопоставляют определенные атрибуты устройств и затем устанавливают свойства. Ищите строки, которые используют ключевое слово ATTR для сопоставления атрибутов устройств и свойство ATTR{queue/scheduler} для установки планировщика.
Например, правило для установки планировщика deadline может выглядеть примерно так:
## Set scheduler for VMware SCSI devices
ACTION=="add|change", SUBSYSTEM=="block", ATTRS{idVendor}=="VMware", ATTRS{idModel}=="VMware Virtual S", ATTR{queue/scheduler}="deadline"
Это правило сопоставляет блочные устройства (SUBSYSTEM=="block") с определенными атрибутами производителя и модели и устанавливает для них планировщик deadline при их подключении или изменении.
Проверяя эти правила, вы можете понять, как может быть настроен стандартный планировщик ввода-вывода на вашей системе.
Резюме
В этом практическом занятии (lab) мы узнали, как проверить настроенный дисковый планировщик (disk scheduler) в Linux с использованием двух основных методов. Во - первых, мы использовали файловую систему /sys, изучив содержимое /sys/block/*/queue/scheduler с помощью команды cat. Это позволило нам увидеть доступные планировщики и определить тот, который в настоящее время используется, обозначенный квадратными скобками.
Во - вторых, мы исследовали кольцевой буфер ядра с помощью команды dmesg для проверки информации о планировщике во время инициализации устройства. Это представляет собой альтернативный способ подтвердить активный планировщик и получить информацию о сообщениях ядра, связанных с устройствами хранения. Наконец, мы кратко рассмотрели проверку правил udev в /etc/udev/rules.d как потенциального места для настройки планировщика, хотя в предоставленном содержимом не были полностью описаны подробные шаги для этого.



