За последние несколько месяцев у меня возникла чрезвычайно раздражающая проблема с моей системой Linux: она заикается при воспроизведении аудио в Firefox, перемещении мыши и т.д., С небольшим скачком в секунду (но все же заметным) каждые несколько секунд. Проблема ухудшается кэш - памяти заполняется, или когда у меня сильно диска / памяти интенсивных программ , работающих (например , программное обеспечение резервного копирования restic
Однако, когда кеш не заполнен (например, при очень небольшой нагрузке), все работает очень гладко.
Просматривая вывод perf top
, я вижу, что list_lru_count_one
имеет высокие накладные расходы (~ 20%) в эти периоды лага. htop
также показывает kswapd0
используя процессор на 50-90% (хотя кажется, что влияние намного выше). В периоды крайней задержки в измерителе ЦП htop
часто преобладает использование ЦП ядра.
Единственный найденный мной обходной путь - либо заставить ядро оставить свободную память (sysctl -w vm.min_free_kbytes=1024000
), либо постоянно отбрасывать кеши памяти через echo 3 > /proc/sys/vm/drop_caches
. Конечно, ни один из них не идеален, и ни один не полностью решает заикание; это только делает это менее частым.
У кого-нибудь есть идеи о том, почему это может происходить?
Системная информация
- i7-4820k с 20 ГБ (несовпадающей) оперативной памяти DDR3
- Воспроизводится в Linux 4.14-4.18 в нестабильной среде NixOS
- Запускает Docker-контейнеры и Kubernetes в фоновом режиме (что, как я чувствую, не должно создавать микрострукание?)
Что я уже пробовал
- Изменение планировщиков ввода / вывода (bfq) с использованием многозадачных планировщиков ввода / вывода
- Использование
-ck
от Con Kolivas (не помогло) - Отключение подкачки, изменение подкачки, использование zram
РЕДАКТИРОВАТЬ: Для ясности, вот изображение htop
и perf
во время такого скачка задержки. Обратите внимание на высокую загрузку процессора list_lru_count_one
и высокую загрузку процессора ядром kswapd0
+.