В статье будет рассмотрена утилита iotop. Она позволяет определить нагрузку на дисковую подсистему различными процессами.
Об утилите
Мы уже разбирали некоторые утилиты для мониторинга за процессами. Например, рассмотрели утилиты: top и htop. Утилита htop, кстати, тоже умеет определять нагрузку на диск определённым процессом. Но рассматриваемая здесь утилита iotop, была написана специально для этой задачи.
Она не предустановлена в системах Debian и Ubuntu. Поэтому вначале её нужно установить:
$ sudo apt install iotop
Работа с iotop
Утилита iotop запускается только с админскими правами, поэтому для её запуска я использую sudo:
$ sudo iotop
Рассмотрим отображающие информацию поля:
- Total DISK READ / DISK WRITE — общая статистика по вводу выводу.
- Curent DISK READ / DISK WRITE — текущая статистика обращения к дискам, не учитывается cache и buffur, не учитываются операции ввода вывода внутри ядра.
- TID — номер потока.
- PRIO — приоритет.
- USER — имя пользователя.
- DISK READ / DISK WRITE — блоков считывается / записывается в секунду.
- SWAPIN — процент времени потраченный на помещение данных в подкачку.
- IO — процент времени ожидания ввода вывода.
- COMMAND — имя команды запустившей процесс.
Приоритет ввода вывода
Приоритет делится на класс и уровень. Классы бывают:
- Real-time (класс 1) — процесс всегда будет первым совершать операции ввода вывода, если ему это понадобится. Имеет уровни от 0 до 7.
- Best-effort (класс 2)— все процессы которые запускаются в системе по умолчанию получают этот класс. В зависимости от уровня получают определенное время на работу с диском. Имеет уровни от 0 до 7.
- Idle (класс 3) — процесс получит доступ к диску только когда другие процессы его не используют. Не имеет уровней.
Уровень класса — это число от 0 до 7, при этом уровень 0 — это наивысший приоритет в данном класе.
Интерактивное управление утилитой
С помощью клавиш можно интерактивно управлять утилитой:
- стрелки влево и вправо — позволяют изменить сортировку;
- r — изменить порядок сортировки;
- o — показывать только те процессы которые работают с диском;
- p — вместо потоков (TID) показывать процессы (PID);
- a — показать накопленный ввод вывод, вместо пропускной способности. В этом режиме iotop показывает количество байт, записанных или считанных, с момента запуска утилиты.
- i — изменить приоритет потока или процесса.
- q — выйти.
Опции утилиты
Кроме интерактивного управления, эту утилиту можно запускать с различными опциями:
- -b — не интерактивный режим (горячие клавиши не работают, а чтобы выйти нужно нажать Ctrl+c);
- -n <число> — число итераций перед выходом (полезно в не интерактивном режиме);
- -d <sec> — интервал обновления;
- -p <pid> — следить за определенным процессом;
- -u <user> — следить за процессами выбранного пользователя.
Утилита ionice
Я уже писал про другой тип приоритетов который существует для процессов, это приоритет для доступа к процессору. Почитать об этом и об утилитах nice и renice можете здесь.
Но помимо этого приоритета существует и другой. Он относится к приоритету на доступ к подсистеме ввода вывода. И раз уж мы начали изучать нагрузку на диск, и узнали что есть приоритет ввода вывода, то следует познакомиться с утилитой ionice. Эта утилита позволяет запускать процессы с изменённым приоритетом ввода вывода.
С помощью опции -c, мы можем указать класс приоритета (1 — Real-time, 2 — Best-effort, 3 — Idle ).
Например скопируем что-нибудь. Но при этом снизим влияние на диск, чтобы другие процессы ничего не заметили:
$ ionice -c 3 cp ./video.mp4 ./new.mp4
А с помощью опции -n мы можем изменить уровень. Например, можем запустить процесс копирования на Best-effort, но на уровне 7:
$ ionice -c 2 -n 7 cp ./video.mp4 ./new.mp4
Также, с помощью этой утилиты можно посмотреть уровень и класс приоритета определённого процесса. Для этого нужно использовать опцию -p и указать pid процесса. Например:
$ ionice -p 1212 best-effort: prio 4
Итог
В этой статье мы рассмотрели две утилиты.
- Утилита iotop — позволяет определить нагрузку на диск в разрезе процессов и поменять приоритет ввода вывода у определённого процесса.
- Утилита ionice — позволяет запустить процесс с определённым приоритетом ввода вывода или посмотреть уровень приоритета у уже запущенного процесса.