Кто-нибудь может объяснить точно, что такое IOWait?
Столько, сколько я прочитал о Айовите, это все еще загадка для меня.
Я знаю, что это время, потраченное процессором на ожидание завершения операций ввода-вывода, но какой именно тип операций ввода-вывода? В чем я тоже не уверен, почему это так важно? Разве процессор не может просто сделать что-то еще, когда операция ввода-вывода завершится, и затем вернуться к обработке данных?
Кроме того, каковы правильные инструменты для диагностики того, какие процессы действительно ожидают ввода-вывода.
И как можно сократить время ожидания ввода-вывода?
7 ответов
Я знаю, что это время, потраченное процессором на ожидание завершения операций ввода-вывода, но какой именно тип операций ввода-вывода? В чем я тоже не уверен, почему это так важно? Разве процессор не может просто сделать что-то еще, когда операция ввода-вывода завершится, и затем вернуться к обработке данных?
Да, операционная система будет планировать запуск других процессов, пока один из них заблокирован на IO. Однако внутри этого процесса, если он не использует асинхронный ввод-вывод, он не будет выполняться до завершения какой-либо операции ввода-вывода.
Кроме того, каковы правильные инструменты для диагностики того, какие процессы действительно ожидают ввода-вывода.
Некоторые инструменты, которые вы можете найти полезными
iostat
, чтобы контролировать время обслуживания ваших дисковiotop
(если ваше ядро поддерживает это), чтобы отслеживать разбивку запросов ввода-вывода на процессstrace
, чтобы посмотреть на фактические операции, выпущенные процессом
И как можно сократить время ожидания ввода-вывода?
- убедитесь, что у вас есть свободная физическая память, чтобы ОС могла кешировать дисковые блоки в памяти
- держите дисковое пространство файловой системы ниже 80%, чтобы избежать чрезмерной фрагментации
- настроить вашу файловую систему
- использовать контроллер массива с батарейным питанием
- выбирайте хороший размер буфера при выполнении операций ввода-вывода
Старый вопрос, недавно столкнулся, но чувствовал, что существующих ответов было недостаточно.
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. Твердотельные накопители потрясающие!!!
Я нашел объяснение и примеры по этой ссылке очень полезными: что именно означает "Айоваит"?, Кстати, для полноты, ввод-вывод здесь относится к дисковому вводу-выводу, но может также включать в себя ввод-вывод на подключенном к сети диске (например, nfs), как объяснено в этом другом посте.
Я процитирую несколько важных разделов (в случае, если ссылка не работает), некоторые из них будут повторением того, что уже сказали другие, но мне, по крайней мере, это было более понятно:
Подводя итог, можно сказать, что в одном предложении "iowait" - это процент времени, в течение которого центральный процессор не используется, и выполняется хотя бы один ввод / вывод.
Каждый процессор может находиться в одном из четырех состояний: пользователь, sys, idle, iowait.
Мне было интересно, что происходит, когда в системе есть другие процессы, готовые к запуску, пока один процесс ожидает ввода-вывода. Ниже это объясняется:
Если процессор простаивает, ядро затем определяет, выполняется ли в настоящее время хотя бы один ввод-вывод на локальном диске или на удаленно смонтированном диске (NFS), который был инициирован с этого процессора. Если есть, то счетчик 'iowait' увеличивается на единицу. Если нет ввода-вывода, который был запущен из этого ЦП, счетчик "ожидания" увеличивается на единицу.
И вот пример:
Допустим, на процессоре работают две программы. Одним из них является чтение программы "dd" с диска. Другая - это программа, которая не выполняет ввод-вывод, но тратит 100% своего времени на вычислительную работу. Теперь предположим, что есть проблема с подсистемой ввода-вывода и что физические операции ввода-вывода занимают секунду, чтобы завершиться. Всякий раз, когда программа dd спит в ожидании завершения ввода-вывода, другая программа может работать на этом процессоре. Когда происходит прерывание часов, всегда будет программа, работающая либо в пользовательском, либо в системном режиме. Следовательно, значения%idle и%iowait будут равны 0. Даже если iowait равен 0, это не означает, что нет проблемы ввода-вывода, потому что, очевидно, существует одна, если физические операции ввода-вывода занимают секунду для завершения.
Полный текст стоит прочитать. Вот зеркало этой страницы, на случай, если оно исчезнет.
iowait
iowait
время, в течение которого процессор / процессоры ожидают (то есть находится в состоянии простоя и ничего не делает), в течение которого фактически были невыполненные запросы дискового ввода-вывода.
Обычно это означает, что блочные устройства (то есть физические диски, а не память) слишком медленные или просто насыщены.
Следовательно, вы должны заметить, что если вы видите среднюю нагрузку в вашей системе и при осмотре заметите, что большая часть этого на самом деле происходит из-за ожидания ввода-вывода, это не обязательно означает, что ваша система испытывает проблемы - и это происходит, когда ваша машине просто нечего делать, кроме процессов, связанных с вводом / выводом (то есть процессов, которые делают больше операций ввода / вывода, чем что-либо еще (системные вызовы, не связанные с вводом / выводом)). Это также должно быть видно из того факта, что все, что вы делаете в системе, все еще очень отзывчиво.
инструменты
sar
(отsysstat
пакет, доступный на большинстве *nix машин)iostat
sarface
(интерфейс кsar
)
Для Solaris я использую DTrace, чтобы посмотреть, что делают процессы, если мне нужно увидеть, какие операции ввода / вывода выполняются. Для Linux существует аналогичная программа, называемая systemtap, которая обеспечивает аналогичный уровень доступа к ядру и вызовам процессов.
Одним из примеров, который я использовал при изучении DTrace, было сравнение cp
командовать dd
команда. Ты это видишь dd
делает намного больше чтения для записи, в то время как cp
нет, в основном из-за размера буфера dd
использует по умолчанию (если я правильно помню).
Используя ps aux можно распечатать процесс STAT
если stat - D или Ds, процесс находится в непрерывном сне (обычно IO)
когда процесс входит в непрерывный режим сна, добавляется nr_iowait runqueue, а если nr_iowait > 0, время простоя процессора считается в iowait
vmstat также показывает, сколько блоков процесса
r: количество процессов, ожидающих выполнения.
б: количество процессов в непрерывном сне.
http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/
Какие операции ввода-вывода будут зависеть от ваших приложений и настроек.
Это важно, так как в некоторых случаях ЦП не может получить данные или инструкции, необходимые для продолжения. В некоторых случаях это может продолжаться, но это будет зависеть от того, какие приложения работают, и от того, что он может делать. Если у вас есть однопоточное приложение, которое имеет большой доступ к диску, вам придется подождать.
Чтобы минимизировать время ввода-вывода, покупайте больше и быстрее памяти, получайте более быстрые диски, дефрагментируйте имеющиеся у вас диски.
Если это внутреннее приложение, которое является узким местом, посмотрите, можно ли его оптимизировать для чтения большими блоками или для асинхронного ввода-вывода.