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

Если Ваша оболочка поддерживает его:

"${srcText/XPLACEHOLDERX/$connect}"
8
08.06.2013, 18:23
2 ответа

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

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

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

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

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

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

3
27.01.2020, 20:12
  • 1
    Вы могли уточнить немного, почему полное системное отставание, когда IO в большой степени занят? Например, я не вижу, что какое-либо соединение между диспетчером Windows и IO — очевидно, WM не делает никакого IO, итак, почему это начало бы отставать (по крайней мере, когда это не подкачивается)? –  Hi-Angel 04.03.2016, 05:56
  • 2
    WM может на самом деле делать много ввода-вывода через X-сервер / наборщик Уэйленда (не так как копирование четырех потоков данных между 2 жесткими дисками, но это не должно быть абсолютно незначительно - который является, вероятно, одной из причин awesome кажется, работает немного лучше, чем kwin в этом смысле). –  peterph 04.03.2016, 23:08
  • 3
    Но какой IO это делает? Это просто из-за вхождения xsession-errors/Xorg.ₙ.log? Вход только буферизуется, не прерывая к работе WM?Что-нибудь еще? UPD: Я просто изучил /proc/AwesomePID/fd — единственный файл, который открыли мои WM, xsession-errors. Все остальное не действительно файл — сокеты, /dev/null, /proc/stat –  Hi-Angel 05.03.2016, 08:18
  • 4
    Но это - Вы, сказал, что WM может на самом деле делать много ввода-вывода через X-сервер / наборщик Уэйленда. Но безотносительно, почему Вы думаете, что это не получает достаточно ЦП. Когда это происходит, ЦП обычно довольно свободен — я вижу загрузку в виджете ЦП на моей панели, и распаковка архива не берет большую часть его. –  Hi-Angel 06.03.2016, 05:44
  • 5
    @Hi-Angel проверяет ответ обновления, разъясняет ли он вещи немного. –  peterph 17.03.2016, 14:20

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

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

Посмотрите Выбор Планировщика ввода-вывода Linux

2
27.01.2020, 20:12
  • 1
    Мой опыт является противоположным: т.е. Я могу начать распаковывать крупный архив — порождение загрузки IO — и попытку в данный момент переключиться на другой «рабочий стол», я чувствую задержки переключения. Как менеджер окон даже относится к IO?? И да, у меня есть свободная RAM, таким образом, она не подкачала (и даже если я не имею — не был бы, WM загрузил последний поворот?). FWIW, я использую легкий Потрясающий WM, и ранее с kwin вещами были еще хуже. –  Hi-Angel 04.03.2016, 05:44

Теги

Похожие вопросы