Почему iowait чтения файла равен нулю?
Найдя psutil, я провел простой эксперимент. Существует полностью базовая функция ввода-вывода, которая многократно считывает некоторый массив numpy из файлов (каждый из них имеет размер 763M). Затем время использования функции измеряется с помощью "cpu_times" через 100 секунд. Я ожидаю, что большую часть времени пройдет на iowait, но результат будет следующим:
pcputimes(user=22.92, system=77.1, children_user=0.0, children_system=0.0, iowait=0.0)
Почему iowait равен нулю? Почему большая часть времени уходит на систему?
Код выглядит следующим образом:
def io_read_bound():
i=0
while True:
a = np.load("/tmp/a%d.npy"%i)
print(a.sum()) # for forcing use of data
i = (i+1)%10
p = multiprocessing.Process(target=io_read_bound)
p.start()
ps = psutil.Process(p.pid)
time.sleep(100)
print(ps.cpu_times())
Результат этого эксперимента для записи массивов numpy является разумным, и 74% времени приходится на iowait.
1 ответ
Автор psutil здесь. Возможно, файл уже в кеше? Вы можете попробовать использовать утилиту vmtouch cmdline, чтобы удалить файловый кеш. Если вы читаете файл несколько раз и удаляете кеш в каждом цикле, я уверен, что счетчик увеличится. Некоторое время назад я представил iowait для экспериментов с копиями файлов, и тогда это был мой опыт.