Назад | Перейти на главную страницу

Почему повторная синхронизация md не вызывает iowait?

Я знал определение %iowait так как

Время, в течение которого ЦП простаивал / блокировался, потому что ему приходилось ждать завершения операции ввода-вывода.

Теперь возьмем простую систему Linux с mdraid1 и двумя дисками. /proc/mdstat показывает, что повторная синхронизация выполняется со скоростью около 120 МБ / с, что близко к тому, что вы ожидаете от обычного вращающегося диска SATA.

Таким образом, скорость диска является ограничивающим фактором в этом случае, и, следовательно, исходя из приведенного выше определения, я ожидал бы, что iowait будет почти на 100%, потому что это то, что не позволяет процессу завершиться за меньшее время.

Однако это не так:

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0,51    0,00    5,64    0,00    0,00   93,85

Нет никакого iowait, и время простоя фактически подсказывает мне, что повторная синхронизация может быть намного быстрее, но просто решил, что не хочет (что неверно).

Что я не понимаю?

Моя гипотеза заключается в том, что, поскольку это неправильный процесс (скорее, что-то, что должно выполняться модулем ядра), он не отображается.

Я бы предположил, что rsync - это функция, которая происходит внутри md модуль ядра и поэтому фактически не имеет процесса / потока (task_struct). Из-за этого нет фактического процесса Linux, ожидающего на диске в очереди выполнения (поскольку «задание» повторной синхронизации не является фактическим процессом). Поскольку планировщик будет сообщать о iowait на основе очереди выполнения, эта задача не увеличивает iowait.

Если вы запускаете реальный процесс, который хочет много использовать диск, он, вероятно, будет ждать на диске больше из-за этого задания повторной синхронизации, и вы, iowait, пойдете вверх. (Однако повторная синхронизация может иметь низкий приоритет, поэтому этого может не произойти).