Я так и не понял, почему высокий дисковый ввод-вывод так сильно замедляет работу системы. Это странно для меня, потому что я ожидал, что замедление повлияет только на те процессы, которые зависят от данных на жестком / оптическом диске, но замедление затронет даже то, что загружено в ОЗУ. Я здесь имею в виду Айова .
Почему процессор ждет, а не выполняет другую работу? Может кто-нибудь объяснить это ограничение, и почему оно не было решено в ядре Linux? Есть ли ядро, у которого нет этой проблемы?
[ примечание ] Был достигнут некоторый прогресс в этой области производительности. С одной стороны, более поздние ядра (2.6.37 в моем случае) гораздо более отзывчивы.
linux
kernel
performance
io
tshepang
источник
источник
Ответы:
Операционные системы используют виртуальную память, поэтому можно использовать больше памяти, чем доступно физической памяти. Когда ядро решает, что оно лучше использует страницу физической памяти, его содержимое может быть «выгружено» для хранения на диске. Когда к такой странице виртуальной памяти обращаются, когда выгружают, это генерирует ошибку страницы и перемещается назад от диска до RAM.
Сбои страниц являются катастрофой для производительности, поскольку задержка диска измеряется в миллисекундах, а задержка ОЗУ измеряется в наносекундах. (1 миллисекунда = миллион наносекунд!)
Память используется не только пользовательскими процессами, но и ядром для таких вещей, как кэширование файловой системы. Во время работы файловой системы ядро будет кэшировать недавно использованные данные. Предполагается, что существует высокая вероятность того, что те же данные будут снова использованы в ближайшее время, поэтому кэширование должно улучшить производительность ввода-вывода.
Физическая память, используемая для кэша файловой системы, не может использоваться для процессов, поэтому во время работы файловой системы будет выделено больше памяти для процессов и увеличится количество сбоев страниц. Кроме того, меньшая пропускная способность дискового ввода-вывода доступна для перемещения страниц памяти с диска и на диск. В результате процессы могут затормозиться.
источник
Насколько я понимаю, IOwait означает, что процесс, а не процессор, ждет, когда IO станет доступным. Процессоры получили гораздо большую скорость, чем жесткие диски, а это означает, что больше кода будет завершаться быстрее, и тогда потребуется чтение диска. Когда нужно прочитать несколько больше, чем диск может сделать достаточно быстро, вы в конечном итоге ждете процессора. Способ определения, кто будет читать / записывать на диск, определяется планировщиком блоков, в большинстве случаев теперь CFQ. Если вы используете CFQ и вам нужен процесс, чтобы использовать меньше общего времени ввода-вывода для повышения отзывчивости системы, вы можете использовать
ionice -c3 <processid>
. Это говорит о том, что система должна давать этому процессу IO только тогда, когда это больше никому не нужно.Это все еще интересно и лучше объясняет проблему Айова.
источник