Столько, сколько я прочитал о Айовите, это все еще загадка для меня.
Я знаю, что это время, потраченное процессором на ожидание завершения операций ввода-вывода, но какой именно тип операций ввода-вывода? В чем я тоже не уверен, почему это так важно? Разве процессор не может просто сделать что-то еще, когда операция ввода-вывода завершится, и затем вернуться к обработке данных?
Кроме того, каковы правильные инструменты для диагностики того, какие процессы действительно ожидают ввода-вывода.
И как можно минимизировать время ожидания ввода-вывода?
Ответы:
Да, операционная система будет планировать запуск других процессов, пока один из них заблокирован на IO. Однако внутри этого процесса, если он не использует асинхронный ввод-вывод, он не будет выполняться до завершения какой-либо операции ввода-вывода.
Некоторые инструменты, которые вы можете найти полезными
iostat
, чтобы следить за временем обслуживания ваших дисковiotop
(если ваше ядро поддерживает это), чтобы отслеживать разбивку запросов ввода-вывода на процессstrace
, чтобы посмотреть на фактические операции, выпущенные процессомисточник
Старый вопрос, недавно столкнулся, но чувствовал, что существующих ответов было недостаточно.
IOWait определение и свойства
IOWait (обычно помеченный
%wa
сверху) является подкатегорией бездействия (%idle
обычно выражается как все бездействия, кроме определенных подкатегорий), то есть процессор ничего не делает. Поэтому, пока есть другой процесс, который процессор может обрабатывать, он будет это делать. Кроме того, время простоя, пользователь, система, iowait и т. Д. Являются измерением по отношению к процессору. Другими словами, вы можете думать о iowait как о бездействии, вызванном ожиданием io.Точно, iowait - это время, потраченное на получение и обработку аппаратных прерываний в процентах от тактов процессора. Программные прерывания обычно помечаются отдельно как
%si
.Важность и потенциальное заблуждение
IOWait важен, потому что он часто является ключевым показателем, чтобы узнать, нет ли у вас узких мест в IO. Но отсутствие iowait не обязательно означает, что ваше приложение не является узким местом при IO. Рассмотрим два приложения, работающие в системе. Если программа 1 сильно затруднена, а программа 2 является интенсивным пользователем
%user + %system
ЦП, загрузка ЦП все равно может составлять ~ 100% и, соответственно, iowait будет показывать 0. Но это только потому, что программа 2 интенсивна и, по-видимому, ничего не говорит о программа 1, потому что все это с точки зрения процессора.Инструменты для обнаружения IOWait
Смотрите посты Дейва Чейни и Ксеркс
Но и простое
top
покажет в%wa
.Сокращение IOWait
Кроме того, поскольку мы сейчас почти вступаем в 2013 год, в дополнение к тому, что говорили другие, доступны недорогие устройства хранения ввода-вывода, а именно SSD. Твердотельные накопители потрясающие !!!
источник
iowait
iowait
время, в течение которого процессор / процессоры ожидают (то есть находится в состоянии простоя и ничего не делает ), в течение которого фактически были невыполненные запросы дискового ввода-вывода.Обычно это означает, что блочные устройства (то есть физические диски, а не память) слишком медленные или просто насыщены.
Следовательно, вы должны заметить, что если вы видите среднюю нагрузку в вашей системе и при проверке заметили, что большая часть этого на самом деле происходит из-за ожидания ввода-вывода, это не обязательно означает, что ваша система находится в неисправности - и это происходит, когда ваша машине просто нечего делать, кроме процессов, связанных с вводом / выводом (то есть процессов, которые делают больше операций ввода / вывода, чем что-либо еще (системные вызовы, не связанные с вводом / выводом)). Это также должно быть видно из того факта, что все, что вы делаете в системе, все еще очень отзывчиво.
инструменты
sar
(изsysstat
пакета, доступного на большинстве машин * nix)iostat
sarface
(интерфейс кsar
)источник
iowait
влияетLoad Average
? Скажем, 100 потоков, ожидающих сети, LA будет 100?Я нашел объяснение и примеры по этой ссылке очень полезными: что именно означает «Айоваит»? , Кстати, для полноты, ввод-вывод здесь относится к дисковому вводу-выводу, но может также включать в себя ввод-вывод на подключенном к сети диске (например, nfs), как объяснено в этом другом посте .
Я процитирую несколько важных разделов (в случае, если ссылка не работает), некоторые из них будут повторением того, что уже сказали другие, но мне, по крайней мере, это было более понятно:
Мне было интересно, что происходит, когда в системе есть другие процессы, готовые к запуску, пока один процесс ожидает ввода-вывода. Ниже это объясняется:
И вот пример:
Полный текст стоит прочитать. Вот зеркало этой страницы , на случай, если оно исчезнет.
источник
Для Solaris я использую DTrace, чтобы посмотреть, что делают процессы, если мне нужно увидеть, какие операции ввода / вывода выполняются. Для Linux существует аналогичная программа, называемая systemtap, которая обеспечивает аналогичный уровень доступа к ядру и вызовам процессов.
Одним из примеров, который я использовал при изучении DTrace, было сравнение
cp
команды сdd
командой. Вы можете видеть, что этоdd
делает намного большеcp
операций чтения для записи, но не делает этого, главным образом из-за размера буфера,dd
используемого по умолчанию (если я правильно помню).источник
Какие операции ввода-вывода будут зависеть от ваших приложений и настроек.
Это важно, так как в некоторых случаях ЦП не может получить данные или инструкции, необходимые для продолжения. В некоторых случаях это может продолжаться, но это будет зависеть от того, какие приложения работают, и от того, что он может делать. Если у вас есть однопоточное приложение, которое имеет большой доступ к диску, вам придется подождать.
Чтобы минимизировать время ввода-вывода, покупайте больше и быстрее памяти, получайте более быстрые диски, дефрагментируйте имеющиеся у вас диски.
Если это внутреннее приложение, которое является узким местом, посмотрите, можно ли его оптимизировать для чтения большими блоками или для асинхронного ввода-вывода.
источник
используя пс AUX можно напечатать процесс STAT ,
если стат D или Ds, процесс находится в источник бесперебойного сна (обычно IO) ,
когда процесс входа Источник бесперебойного сна, nr_iowait из runqueue добавляется, а если nr_iowait> 0, то время простоя процессора считается Айоваит
vmstat также показывает, сколько блоков процессов
r: количество процессов, ожидающих выполнения.
б: количество процессов в непрерывном сне.
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
источник