Прочитал интересную статью про Linux IOWait в блоге компании Percona. У автора оказались подозрительно русские имя и фамилия — Peter Zaitsev. Навёл справки. Оказалось, что это Пётр Зайцев — сооснователь компании Percona. Я и не знал, что эта компания основана русскими, хотя пользуюсь её бесплатными продуктами много лет.
⇨ Understanding Linux IOWait ()
Сделал короткую выжимку из статьи, чтобы передать суть. Информация показалась полезной и новой для меня. Вначале пример от автора, как можно жёстко нагрузить дисковую подсистему:
# sysbench —threads=8 —time=0 —max-requests=0 fileio —file-num=1 —file-total-size=10G —file-io-mode=sync —file-extra-flags=direct —file-test-mode=rndrd run
Используется утилита sysbench. Я, кстати, писал про неё (https://t.me/srv_admin/1118). У неё есть встроенные тесты для СУБД. Приведённая выше команда жёстко нагрузит метрику cpu iowait. Проверить можно через vmstat (https://t.me/srv_admin/3317), колонка wa.
Пробуем дальше нагружать систему нагрузкой на процессор, не прерывая прошлый тест:
# sysbench —threads=8 —time=0 cpu run
Снова смотрим на vmstat и видим, что нагрузка IOWait куда-то пропала. Как так? Первый тест продолжает нагружать диски, но мы уже этого не видим в привычной метрике.
Смысл тут вот в чём. Когда мы долго ждём ответа от дисков, процессор простаивает. Растёт метрика cpu idle. Простой процессора из-за ожидания I/O засчитывается в метрику IOWait. Но как только мы нагружаем процессор другой работой, метрика idle падает, а за ней и IOWait. Это особенность подсчёта этих метрик.
Теперь вместо первого теста в 8 потоков, запустим только один на виртуалке с 4-мя ядрами:
# sysbench —threads=1 —time=0 —max-requests=0 fileio —file-num=1 —file-total-size=10G —file-io-mode=sync —file-extra-flags=direct —file-test-mode=rndrd run
Несмотря на то, что этот тест тоже полностью нагрузит дисковую подсистему, мы увидим IOWait в районе 20-25%. А на виртуальных машинах с большим числом ядер (32-64) цифра будет настолько незначительна, что мы можем вообще не заметить её. Но при этом дисковая подсистема будет полностью загружена.
Таким образом, высокая метрика IOWait показывает, что процессор ожидает операции I/O. Но при этом низкий показатель не гарантирует, что у вас не загружены диски. Надо уточнять.
Как же узнать, что у нас есть проблемы с нагрузкой по I/O? Можно посмотреть на столбец b в vmstat. Он показывает количество процессов, которые заблокированы в ожидании I/O для завершения. Соседний столбец r покажет суммарное число запущенных процессов.
В продукте Percona Monitoring and Management (https://t.me/srv_admin/2440) есть плагин (https://www.percona.com/blog/capturing-per-process-metrics-with-percona-monitoring-and-management-pmm/), который в том числе показывает статистику по процессам. Там будут видны процессы, ожидающие I/O. Указанный мониторинг бесплатен, это open source.
❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.
#linux #perfomance
https://t.me/srv_admin | Авторская информация о системном администрировании
https://www.percona.com/blog/understanding-linux-iowait/