Как проверить, настроен ли дисковый планировщик в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) мы рассмотрим, как определить настроенный дисковый планировщик в среде Linux. Понимание активного планировщика ввода-вывода (I/O scheduler) является важным аспектом настройки производительности и оптимизации операций с хранилищем.

Мы будем добиваться этого, исследуя файловую систему /sys для прямого запроса конфигурации планировщика для блочных устройств, проверяя информацию о планировщике в кольцевом буфере ядра с помощью команды dmesg и анализируя правила udev, которые могут повлиять на конфигурацию устройств, включая планировщик.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") subgraph Lab Skills linux/ls -.-> lab-558708{{"Как проверить, настроен ли дисковый планировщик в Linux"}} linux/cat -.-> lab-558708{{"Как проверить, настроен ли дисковый планировщик в Linux"}} linux/grep -.-> lab-558708{{"Как проверить, настроен ли дисковый планировщик в Linux"}} end

Проверка планировщика с помощью команды 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 как потенциального места для настройки планировщика, хотя в предоставленном содержимом не были полностью описаны подробные шаги для этого.