Почему MD Resync не вызывает 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 вообще, и простой фактически предлагает мне, что повторная синхронизация могла бы быть намного быстрее, но просто решила, что не хочет (который не верен).

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам