LINUX.ORG.RU

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

 , ,


1

5

Железо и конфигурация ОС. ЦПУ 4-х ядерный i7, 16GB ОЗУ, обычный HDD на 7200rpm. SWAP отключен полностью. Ядро новое, 4.11.9.

Ситуация. Запущена виртуалка с распаковкой архива. Распаковка идет с единственного HDD на него же самого (то есть не 12309).

Картина в момент лагов. ОЗУ занято ~40%, ЦПУ на каждом из четырех ядер не более 15-20%, дисковая активность ближе к 100%.

Сами лаги. Тормозит абсолютно все: воспроизведение видео в Chromium, контекстное меню, ввод с клавиатуры, даже открытие quake-style terminal (yakuake) может занимать с десяток секунд.

Вопрос. Какого, собственно, черта? Понимаю, что может тормозить софт, который стоит в очереди на i/o. Но то, что к HDD даже не планирует обращаться (тот же ввод с клавиатуры) - почему?

#cast i-rinat как компетентного человека :)

[РЕШЕНО] заметно улучшил отзывчивость системы под нагрузкой на i/o заданием значений vm.dirty_background_bytes и vm.dirty_bytes в 2-4 мегабайта и установкой ядра от Postfactum.



Последнее исправление: duhe (всего исправлений: 3)

#cast i-rinat

Моих знаний mm в линуксе не хватает даже чтобы просто предположения о причинах данного поведения строить.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Спасибо за отклик. Может, знаете, кого скастовать в тред? Или сами сталкивались с этой проблемой?

duhe
() автор топика
Ответ на: комментарий от post-factum

Сейчас попробую. Спасибо.

Кстати, вы не в курсе, в плане энергосбережения WiFi-модулей ничего сильно не менялось в ядре, новее 4.4? Начинал эту тему, но так и ничего

duhe
() автор топика
Ответ на: комментарий от post-factum

Сначала подкрути vm.dirty_background_bytes и vm.dirty_bytes до разумных значений.

Попробовал значение в 2 мегабайта. Система действительно стала более отзывчивой.

duhe
() автор топика
Ответ на: комментарий от ShizuShidou

Что пара пользовательских процессов на 100% забивают ввод-вывод

duhe
() автор топика
Ответ на: комментарий от timdorohin

Собрал это ядро (4.9 lts). Выставил значения vm.dirty_background_bytes и vm.dirty_bytes. Стало заметно лучше. Виртуалка если и подлагивает в некоторых моментах, то только она одна. Очень признателен за рекомендацию!

duhe
() автор топика
Ответ на: комментарий от duhe

Если ты на арче, то имело бы смысл сравнить с ядром linux-zen из [extra]. Набор патчей поменьше, зато собирать ничего не нужно.

greenman ★★★★★
()
Ответ на: комментарий от greenman

Да, Arch. Спасибо, попробую. Описание выглядит интересно. Но, в принципе, и собрать не проблема - пакет из AUR, установочный скрипт сам спрашивает всё, что нужно.

duhe
() автор топика

Ядро новое, 4.11.9

Не новое, именно в твое ситуации.

Ставь себе Linux inode 4.12.3-1-ARCH #1 SMP PREEMPT Sat Jul 22 15:32:02 UTC 2017 x86_64 GNU/Linux

И смотри вывод комманды cat /sys/block/sda/queue/scheduler

IO scheduler, что отвечает за отзывчивость системы - должен быть bfq.

Ссылка для информации - https://github.com/sirlucjan/lucjan-kernels/blob/master/lucjan-kernels-experi...

blitz
()
Ответ на: комментарий от blitz

Ставь себе Linux inode 4.12.3-1-ARCH

А в арче в ядре по дефолту есть патчи на bfq на singlequeue-устройств? Просто в ванильном ядре 4.12 bfq поддерживается только на multiqueue.

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

Вопрос интересный.

В Arch, пока отказались от поддержки bfq-sq и bfq-mq в core.

Ничто не мешает собрать самому. Не более 5 изменённых строк в config-x86_64.

blitz
()
Ответ на: комментарий от blitz

bfq-sq в ядре вообще нет и не будет. Патчей отдельных тоже пока нет. -mq в Арче по умолчанию отключен, но можно включить без пересобирания (scsi_mod.use_blk_mq=1 ядру в загрузчике передать).

post-factum ★★★★★
()

Приоритет им более низкий поставь или прерывания на одно ядро процессора.

batya
()

Но то, что к HDD даже не планирует обращаться (тот же ввод с клавиатуры) - почему?

ты за был про keyloggerd?

anonymous
()
Ответ на: комментарий от post-factum

но можно включить без пересобирания (scsi_mod.use_blk_mq=1 ядру в загрузчике передать)

Домашняя тигрёнка - говорит, что кернел - таки придётся пересобрать.

Посмотри config.x86_64 с BFQ и узнай, сколько в нём сделано исправлений.

https://github.com/sirlucjan/lucjan-kernels

blitz
()
Ответ на: комментарий от anonymous

Почитай внимательно условие, где значение половинится (строка 436).

post-factum ★★★★★
()
Ответ на: комментарий от post-factum

Твоя стандартная манера ухода в дискуссии.

«Мне нечего сказать по делу, значит - перейду к оскорблениям собеседников»

blitz
()
Ответ на: комментарий от post-factum

Согласен с парсером.

Иной раз, трудно переключаться с иврита/английского на русский.

blitz
()
Ответ на: комментарий от post-factum

Да, пожалуй, так лучше. Спасибо.

PS: отдельная благодарность за ядро! Понравилось, остался на нем :)

duhe
() автор топика
Ответ на: комментарий от blitz

Благодарю.

Поставил 4.12-pf, все отлично. Но, как отписал в первом посте, проблема была решена скорее изменением значений параметров vm.dirty_background_bytes и vm.dirty_bytes. BFQ, конечно, тоже плюс.

Ссылка для информации - ...

Ссылка интересная!

duhe
() автор топика
Ответ на: комментарий от post-factum

0 для обоих достаточно разумны? Я правильно понимаю, что так можно выдёргивать флешки сразу после записи даже без вызова sync, но на любой чих, даже запись файлика в /tmp каждую секунду, сразу дёргается ЖД? А как это сочетается с настройкой энергосбережения ЖД, ограничивающей частоту обращений? И как влияет на производительность ОЗУ?

bodqhrohro_promo
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.