Практическая работа по теме:
"Подсистемы управления вводом/выводом Linux"
Для выполнения требуется доступ к Linux (рекомендуется использовать виртуальную машину или тестовый сервер).
Блок теории (краткое резюме предыдущего занятия)
Основные принципы организации ввода-вывода в Linux
Физические принципы:
- Жесткие диски (HDD) состоят из пластин, головок, цилиндров и секторов.
- Доступ к данным требует перемещения головки (seek time) и ожидания поворота диска (rotational latency).
- SSD не имеют механических частей, поэтому seek time и rotational latency отсутствуют.
Логические принципы:
- Ядро Linux использует блочную подсистему для работы с устройствами.
- Запросы к дискам обрабатываются через очереди запросов (request queue), где они сортируются и объединяются.
- VFS (Virtual File System) абстрагирует файловые системы, предоставляя единый интерфейс для приложений.
Алгоритмы планирования запросов:
- CFQ (Completely Fair Queuing): Распределяет квоты времени между процессами для "справедливого" доступа к диску. Подходит для HDD.
- Deadline: Гарантирует обработку запросов в течение заданного времени (deadline), минимизируя голодание процессов. Оптимален для серверов.
- NOOP: Простая FIFO-очередь без сортировки. Используется для SSD или виртуальных дисков (меньше накладных расходов).
- kyber/mq-deadline: Современные планировщики для многопоточных систем (актуально для новых ядер Linux).
Пути в sysfs:
Параметры подсистемы ввода-вывода настраиваются через виртуальную файловую систему/sys/block/
.
Практическая часть
Преподаватель демонстрирует действия, студенты повторяют в своих терминалах.
Задание 1. Просмотр текущего планировщика ввода-вывода
Цель: Узнать, какой планировщик используется для диска.
Шаги:
Определите имя диска (обычно
sda
,nvme0n1
):bashlsblk
Пример вывода:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 512M 0 part /boot └─sda2 8:2 0 99.5G 0 part /
Проверьте текущий планировщик для диска
sda
:bashcat /sys/block/sda/queue/scheduler
Пример вывода:
[mq-deadline] kyber bfq none
- Квадратные скобки
[ ]
указывают активный планировщик.
- Квадратные скобки
Вопрос для студентов:
Почему для SSD рекомендуется использовать
NOOP
илиmq-deadline
, а неCFQ
?
Задание 2. Смена планировщика ввода-вывода
Цель: Изменить планировщик на deadline
и проверить результат.
Шаги:
Установите планировщик
deadline
для дискаsda
:bashecho deadline | sudo tee /sys/block/sda/queue/scheduler
Примечание: Требуются права
root
.Убедитесь, что планировщик изменился:
bashcat /sys/block/sda/queue/scheduler
Ожидаемый вывод:
[deadline] mq-deadline kyber bfq none
Важно!
- Для SSD смена на
noop
может улучшить производительность:bashecho noop | sudo tee /sys/block/sda/queue/scheduler
Задание 3. Мониторинг активности диска с помощью iostat
Цель: Анализировать статистику ввода-вывода в реальном времени.
Шаги:
Установите утилиту
sysstat
(если не установлена):bashsudo apt install sysstat # Для Debian/Ubuntu
Запустите мониторинг каждые 2 секунды:
bashiostat -x 2
Ключевые параметры:
%util
— загрузка диска (100% = дисковый ствол).await
— среднее время ожидания запроса (мс).svctm
— среднее время обслуживания запроса (мс).
Выполните операцию с диском (например, копирование файла) и наблюдайте за изменениями:
bashdd if=/dev/zero of=testfile bs=1G count=1
Вопрос для студентов:
Как изменятся значения
await
и%util
при использованииdeadline
по сравнению сcfq
?
Задание 4. Анализ параметров очереди запросов
Цель: Изучить настройки очереди ввода-вывода.
Шаги:
Просмотрите максимальный размер очереди (в секторах):
bashcat /sys/block/sda/queue/max_sectors_kb
Узнайте текущую глубину очереди:
bashcat /sys/block/sda/queue/nr_requests
Проверьте время "ожидания" для планировщика
deadline
:bashcat /sys/block/sda/queue/iosched/read_expire cat /sys/block/sda/queue/iosched/write_expire
По умолчанию:
read_expire = 100
мс (макс. задержка для чтения),write_expire = 5000
мс (макс. задержка для записи).
Эксперимент:
- Увеличьте
read_expire
до 500 мс и сравните задержки при чтении:bashecho 500 | sudo tee /sys/block/sda/queue/iosched/read_expire
Задание 5. Тест производительности с разными планировщиками (опционально)
Цель: Сравнить скорость работы диска с deadline
и noop
.
Шаги:
Установите утилиту
fio
(Flexible I/O Tester):bashsudo apt install fio
Запустите тест с планировщиком
deadline
:bashfio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=4 --size=256M --runtime=30 --time_based --group_reporting
Повторите тест для
noop
(предварительно сменив планировщик, см. Задание 2).Сравните результаты (IOPS, latency).
Контрольные вопросы
Какой планировщик лучше использовать для HDD в системе с высокой нагрузкой на запись?
Ответ:deadline
(минимизирует задержки для записи).Почему для SSD не рекомендуется использовать
cfq
?
Ответ:cfq
оптимизирован для HDD, из-за ненужной сортировки запросов снижает производительность SSD.Как проверить, поддерживает ли ваше устройство многопоточную очередь (multiqueue)?
Ответ:bashls /sys/block/sda/mq
Если каталог существует — поддерживается.
Рекомендации
- Все изменения в
/sys/block/
временные (сбрасываются после перезагрузки). Для постоянной настройки используйтеudev
-правила или параметры ядра в/etc/default/grub
. - При работе с реальными серверами тестируйте планировщики в нерабочее время.
Готово! После выполнения работы студенты должны понимать, как управлять подсистемой ввода-вывода Linux и выбирать оптимальные настройки для разных типов дисков.