Практическая работа по теме:
"Подсистемы управления вводом/выводом 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 и выбирать оптимальные настройки для разных типов дисков.
