Почему высокая скорость дискового ввода-вывода снижает быстродействие и производительность системы?

19

Я так и не понял, почему высокий дисковый ввод-вывод так сильно замедляет работу системы. Это странно для меня, потому что я ожидал, что замедление повлияет только на те процессы, которые зависят от данных на жестком / оптическом диске, но замедление затронет даже то, что загружено в ОЗУ. Я здесь имею в виду Айова .

Почему процессор ждет, а не выполняет другую работу? Может кто-нибудь объяснить это ограничение, и почему оно не было решено в ядре Linux? Есть ли ядро, у которого нет этой проблемы?

[ примечание ] Был достигнут некоторый прогресс в этой области производительности. С одной стороны, более поздние ядра (2.6.37 в моем случае) гораздо более отзывчивы.

tshepang
источник
Разве xeno не объяснил, как именно это было решено в ядре Linux в последний раз, когда вы спрашивали?
Михаил Мрозек
2
Учитывая изменения, я думаю, что цель состоит в том, чтобы предыдущий вопрос касался прогресса, достигнутого в решении проблемы, в то время как этот вопрос о том, почему проблема существует.
Стивен Д
@mic Стивен прав. Мы долго обсуждали, что я имел в виду под предыдущим вопросом. Ответ ксено был настолько хорош, что я отредактировал вопрос, чтобы соответствовать ему, и я снова задал оригинальный вопрос здесь.
tshepang
Я понимаю, но ваш вопрос, кажется, противоречит другому; здесь вы говорите: «Кто-нибудь может объяснить это ограничение и почему оно не было решено в ядре Linux? Существует ли ядро, у которого нет этой проблемы?», но ответ xeno начинается с «Я думаю, по большей части это был решен ".
Михаил Мрозек
@mic Не совсем. Ядро все еще делает iowait , то есть все еще ждет. Я считаю, что ответ Xeno улучшил реакцию системы . И это я согласен, как я уже отметил по этому вопросу.
tshepang

Ответы:

9

Операционные системы используют виртуальную память, поэтому можно использовать больше памяти, чем доступно физической памяти. Когда ядро ​​решает, что оно лучше использует страницу физической памяти, его содержимое может быть «выгружено» для хранения на диске. Когда к такой странице виртуальной памяти обращаются, когда выгружают, это генерирует ошибку страницы и перемещается назад от диска до RAM.

Сбои страниц являются катастрофой для производительности, поскольку задержка диска измеряется в миллисекундах, а задержка ОЗУ измеряется в наносекундах. (1 миллисекунда = миллион наносекунд!)

Память используется не только пользовательскими процессами, но и ядром для таких вещей, как кэширование файловой системы. Во время работы файловой системы ядро ​​будет кэшировать недавно использованные данные. Предполагается, что существует высокая вероятность того, что те же данные будут снова использованы в ближайшее время, поэтому кэширование должно улучшить производительность ввода-вывода.

Физическая память, используемая для кэша файловой системы, не может использоваться для процессов, поэтому во время работы файловой системы будет выделено больше памяти для процессов и увеличится количество сбоев страниц. Кроме того, меньшая пропускная способность дискового ввода-вывода доступна для перемещения страниц памяти с диска и на диск. В результате процессы могут затормозиться.

Вим Коенен
источник
Я знаю, что он такой же старый, как грязь, но, в зависимости от того, как он поступает, большое количество операций ввода-вывода может привести к генерации большого количества прерываний, а результирующие переключатели контекста тратят впустую процессорное время.
Братчли
5

Насколько я понимаю, IOwait означает, что процесс, а не процессор, ждет, когда IO станет доступным. Процессоры получили гораздо большую скорость, чем жесткие диски, а это означает, что больше кода будет завершаться быстрее, и тогда потребуется чтение диска. Когда нужно прочитать несколько больше, чем диск может сделать достаточно быстро, вы в конечном итоге ждете процессора. Способ определения, кто будет читать / записывать на диск, определяется планировщиком блоков, в большинстве случаев теперь CFQ. Если вы используете CFQ и вам нужен процесс, чтобы использовать меньше общего времени ввода-вывода для повышения отзывчивости системы, вы можете использовать ionice -c3 <processid>. Это говорит о том, что система должна давать этому процессу IO только тогда, когда это больше никому не нужно.

Это все еще интересно и лучше объясняет проблему Айова.

xenoterracide
источник