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