Почему системы замедляются при выполнении массивной записи на диск?


8

Я хочу знать, почему системы замедляются при записи массовых данных на диск.

Я думаю, что для того, чтобы система стала медленной, должна быть некоторая проблема с процессором. Но запись ограничена только I / O.

Имеются ли аппаратные прерывания при записи данных? Если это так, это может быть из-за прерываний, что процессор всегда переключает контекст.


1
Я думаю, что почти все приложения будут читать / записывать данные с диска, не так ли?
Джилен

1
Может быть, он переключается на память и, следовательно, замедляется, когда диск интенсивно используется в противном случае. Плагин systemload может сообщить вам, используете ли вы своп графическим способом. Для командной строки используйте free.
пользователь неизвестен

1
Если у вас настроен / запущен sysstat, вы можете просмотреть отчеты SAR за медленное время, и оно покажет вам, что происходит за это время (переключение контекста, дисковый ввод-вывод, загрузка процессора, сетевой трафик и т. Д.).
Братчли

Также посмотрите на ваши $PATHнастройки, если вы используете завершение команды или делаете много орфографических ошибок. Просмотр многих каталогов, особенно тех, в которых много записей, может занять некоторое время, что заметно, когда ресурсов мало.
MattBianco

Ответы:


3

Основная причина заключается в том, что обычно: ввод / вывод намного медленнее, чем ЦП / ОЗУ. Даже если процессы, выполняющие операции ввода-вывода, используют DMA (который разгружает ЦП), в какой-то момент им, вероятно, придется ждать завершения своих запросов.

В наиболее обычном случае с жестким диском просто добавьте несколько приложений, пытающихся получить доступ к файлам, разбросанным по всему диску, и вы сможете приготовить себе кофе (чай, что угодно). С твердотельными накопителями ситуация улучшается, но даже с твердотельным накопителем, чья пропускная способность измеряется в сотнях МБ / с на SATA (по сравнению с десятками МБ / с на жестком диске с вращающейся пластиной) и действительно незначительное время поиска (по сравнению с миллисекундами для спин-тарелка) - может стать узким местом.

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

И если в какой-то момент ваша система начинает обмениваться (что обычно имеет более высокий приоритет, чем обычный ввод / вывод), авария завершается.

РЕДАКТИРОВАТЬ : После разговора с некоторыми разработчиками ядра Linux ситуация стала немного яснее. Основной проблемой является планировщик ввода / вывода, который не имеет большого представления о том, какой ввод / вывод следует расставить по приоритетам. Следовательно, любой пользовательский ввод и последующий графический вывод делят очередь с дисковой / сетевой активностью. Вследствие этого может также случиться так, что он может выбросить кэшированные данные процесса из кэша страниц (например, загруженные библиотеки), когда он решит, что может использовать кэш страниц более эффективно при других операциях ввода-вывода. Это, конечно, означает, что, как только этот код необходимо будет запустить снова, его придется извлекать снова - с диска, который уже может быть под большой нагрузкой.

Тем не менее, что касается ядра Linux, многие из этих проблем были исправлены в последнее время (проблема была известна), так что, скажем, 4.4.x или 4.5.x должны вести себя лучше, чем раньше, и о проблемах следует сообщать (обычно люди ядра счастливы, когда кто-то хочет помочь сообщением об ошибках и тестированием).


Не могли бы вы пояснить, почему общая система отстает, когда IO сильно загружен? Например, я не вижу никакой связи между Windows Manager и IO - очевидно, что WM не выполняет IO, так почему он начинает отставать (по крайней мере, если он не поменялся местами) ?
Привет, Ангел,

WM может фактически делать много операций ввода / вывода с помощью X - сервера / Wayland наборщиком (не так много , как копирование четырех потоков данных между 2 жесткими дисками, но он не должен быть полностью незначителен - что, вероятно , одна из причин , по- awesomeвидимому, работать немного лучше чем kwinв этом смысле).
Петер

Но что за IO это делает? Это просто из-за входа в xsession-errors/ Xorg.ₙ.log? Разве логирование не буферизируется, не прерывая работу WM? Что-нибудь еще? UPD: Я только что посмотрел на ... /proc/AwesomePID/fdединственный файл, который открыл мой WM, это xsession-errors. Все остальное , на самом деле не файл - розетки, /dev/null, /proc/stat...
Привет-Angel

1
Но вы сказали, что WM действительно может выполнять много операций ввода-вывода через X-сервер / Wayland compositor . Но как бы то ни было, почему вы думаете, что он не получает достаточно процессора. Когда это происходит, ЦП обычно довольно свободен - я вижу нагрузку в виджете ЦП на моей панели, и распаковка архива не занимает много времени.
Привет, Ангел,

1
@ Привет-Ангел проверить обновление ответ, если это немного проясняет.
Петер

2

Мой опыт показывает, что одна только операция ввода-вывода не замедляет работу системы. Этот эффект возникает, когда другие задачи также требуют ввода-вывода. Ситуация станет действительно злой, если система подкачки (вынуждена), и вы вызываете большую нагрузку ввода-вывода.

Вы можете влиять на влияние тяжелых задач ввода-вывода с помощью ionice. Если вы поместите их в idleприоритет, задержка для других задач может все еще увеличиться, но не выше минимума. Задача ввода / вывода немедленно прерывается, если другая (не простаивающая) задача должна выполнить ввод / вывод. Если вы используете планировщик, который поддерживает эти настройки.

См. Выбор планировщика ввода-вывода Linux


1
Мой опыт противоположен: то есть я могу начать распаковывать большой архив - вызывая загрузку ввода-вывода - и пытаясь в этот момент переключиться на другой «рабочий стол», я чувствую запаздывание переключения. Как оконный менеджер вообще имеет отношение к IO ?? И да, у меня есть свободная RAM, так что она не поменялась местами (и даже если бы у меня ее не было - разве WM не поменялась местами в последний ход?) . FWIW, я использую легкий Awesome WM, а раньше с Kwin все было еще хуже.
Привет, Ангел,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.