Что такое iowait в контексте производительности Linux?

«Что такое iowait в контексте производительности Linux?» — вопрос из категории Linux, который задают на 24% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

IOWait (или %iowait) — это метрика, отображаемая в утилитах мониторинга (например, top, vmstat, iostat), которая показывает процент времени, в течение которого центральный процессор (CPU) был простаивал в ожидании завершения операций ввода-вывода (I/O) на диск.

Ключевое понимание: Высокий показатель iowait не означает, что CPU «занят» I/O. Наоборот, он означает, что CPU готов к работе, но не может выполнять задачи, потому что ожидает данных от более медленной подсистемы (чаще всего — диска).

Как посмотреть iowait:

# В top (строка 'Cpu(s):')
top

# С помощью vmstat (колонка 'wa')
vmstat 1 5

# С помощью iostat (колонка '%iowait')
iostat -c 1 3

# Краткий вывод нагрузки (1-я строка - среднее с boot, далее - за 1 сек)
uptime

Интерпретация значений:

  • < 5%: Обычно норма.
  • 5-20%: Умеренная нагрузка на I/O, требует наблюдения.
  • > 20-30%: Высокая нагрузка, вероятно, есть узкое место в подсистеме хранения.
  • > 50%: Серьёзная проблема с производительностью дисков.

Нюансы и анализ в DevOps:

  1. Контекст нагрузки CPU: Высокий iowait при низкой общей утилизации CPU (%idle высокий) менее критичен, чем тот же iowait при высокой утилизации CPU — в первом случае система просто «ждёт», во втором — процессы в очереди.
  2. Не является прямой метрикой диска: Iowait показывает нагрузку на CPU со стороны I/O. Для анализа самой дисковой подсистемы используйте iostat -x и смотрите метрики:
    • %util: Процент загрузки устройства.
    • await: Среднее время ожидания I/O-операции (мс).
    • svctm: Среднее время обслуживания запроса устройством (устарело в новых ядрах).
  3. Причины высокого iowait:
    • Медленные диски (HDD vs SSD).
    • Высокая нагрузка на базу данных.
    • Активная работа с логами (journaling, sync).
    • Нехватка оперативной памяти, ведущая к активному своппингу.
    • В облачных средах (AWS EBS, GCP Persistent Disk) — может указывать на исчерпание IOPS или пропускной способности.

Действия при высокой нагрузке: Использовать iotop или pidstat -d для идентификации процессов, создающих нагрузку, и далее оптимизировать их работу или апгрейдить инфраструктуру хранения.