Утилита iotop и ionice

В статье будет рассмотрена утилита iotop. Она позволяет определить нагрузку на дисковую подсистему различными процессами.

Об утилите

Мы уже разбирали некоторые утилиты для мониторинга за процессами. Например, рассмотрели утилиты: top и htop. Утилита htop, кстати, тоже умеет определять нагрузку на диск определённым процессом. Но рассматриваемая здесь утилита iotop, была написана специально для этой задачи.

Она не предустановлена в системах Debian и Ubuntu. Поэтому вначале её нужно установить:

$ sudo apt install iotop

Работа с iotop

Утилита iotop запускается только с админскими правами, поэтому для её запуска я использую sudo:

$ sudo iotop

 

Утилита iotop
Утилита 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 — позволяет запустить процесс с определённым приоритетом ввода вывода или посмотреть уровень приоритета у уже запущенного процесса.