Лечим "Linux bug 12309"

Тот, кто использует Linux на десктопе вероятно наблюдал печальную картину, когда при копировании большого файла(например 10 Gb и более) система становится совершенно неработоспособной. Переключение между окнами, прокрутка в браузере, просмотр видео, проигрывание музыки сопровождается «тормозами», отзывчивость как GUI, так и консольных приложений сильно деградирует, вплоть до полной остановки пользовательских программ в угоду одного процесса, который осуществляет процесс копирования. По завершению копирования все становится на свои места. Если кто не в курсе, то данный эффект называется Linux bug 12309

Причины его, вроде бы, до сих пор доподлинно неизвестны, проявляется по-разному в сочетании с различными версиями ядра и железа(чипсет, процессор, жесткий диск). Баг кочует с переменным успехом от версии к версии начиная примерно с 2.6.18.

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

На моей Ubuntu-11.10 (linux-3.0.0) «12309» проявляется слабо, но все же есть чутка. До этого на Debian Squeeze(linux-2.6.32) ситуация была несколько хуже.

Если баг имеет место быть, то возможно поможет пересборка ядра с некоторыми изменениями и патчем от Con Kolivas. Если коротко, то этот патч от анастезиолога Кона Коливаса, реализующий альтернативный планировщик задач в ядре Linux. Называется он BFS(Brain Fuck Scheduler). Патч можно взять тут.

Также перед сборкой ядра рекомендуют изменить параметр CONFIG_HZ — частота таймера прерываний. Типичные значения: 100, 250, 1000. Этот параметр влияет на работу планировщика задач. Чем выше это значение, тем выше частота перепланирования задач. Для сервера рекомендуется значение 100, для десктопа — 1000. В ванильном ядре и ядрах, входящих в известные дистрибутивы оно установлено в 250. Такая золотая середина якобы.
Также я отключил параметр CONFIG_NO_HZ (Tickless System (Dynamic Ticks)). Тут об этом подробно.

Текущие параметры CONFIG_HZ и CONFIG_NO_HZ таковы:

[email protected]:~# cat /boot/config-3.0.0-15-generic|grep -i _HZ

CONFIG_RCU_FAST_NO_HZ=y
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250


У каждого дистрибутива свои инструменты для сборки, поэтому привожу только порядок действий:

1) Скачиваем исходники ядра. Лучше взять из репозитория своего дистрибутива
2) Скачиваем соответствующий патч от Con Kolivas под свою ветку ядра.
3) Патчим ядро (в Debian и Ubuntu патчится без проблем)
4) В диалоге make menuconfig убираем:

Processor type and features ---> Tickless System (Dynamic Ticks)
Изменяем
Processor type and features ---> Preemption Model ---> Preemptable Kernel (Low-Latency Desktop)

5) Собираем, устанавливаем, перезагружаемся

У меня было так:

[email protected]:~# uname -a
Linux desktop 3.0.0-15-generic #26-Ubuntu SMP Fri Jan 20 15:59:53 UTC 2012 i686 i686 i386 GNU/Linux


[email protected]:~# cat /boot/config-`uname -r` | grep -i _HZ

CONFIG_RCU_FAST_NO_HZ=y
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y
# CONFIG_HZ_300 is not set
# CONFIG_HZ_1000 is not set
CONFIG_HZ=250


А стало так:

[email protected]:/# uname -a

Linux desktop 3.0.13-ck1ticks-hz1000-bfs #2 SMP PREEMPT Sat Jan 21 12:04:02 MSK 2012 i686 i686 i386 GNU/Linux


[email protected]:~# cat /boot/config-`uname -r` |grep -i _HZ

# CONFIG_NO_HZ is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250_NODEFAULT is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
# CONFIG_HZ_1500 is not set
# CONFIG_HZ_2000 is not set
# CONFIG_HZ_3000 is not set
# CONFIG_HZ_4000 is not set
# CONFIG_HZ_5000 is not set
# CONFIG_HZ_7500 is not set
# CONFIG_HZ_10000 is not set
CONFIG_HZ=1000


Откуда взялись #CONFIG_HZ выше тысячи я не знаю. Сырцы ядра брал из репозитория убунты.

Итог всего действа: субъективно, стало «интерактивнее» =)

Комментарии (3)

RSS свернуть / развернуть
+
0
Субъективно не замечал такого, видимо у меня система все время тормозит. Сапожник без сапог же.
avatar

Sergei_T

  • 27 января 2012, 18:39
+
0
Отлично написано, почаще бы такие топики…

Фраза
… патч от анестезиолога Кона Коливаса, реализующий альтернативный планировщик задач в ядре Linux.
порадовала: оказывается, существуют не только историки которые админят компьютерные сети, но и анестезиологи, которые пишут патчи для ядра Linux
avatar

yababay

  • 28 января 2012, 00:04
+
+1
Кон Коливас известен тем, что разрабатывает свой планировщик задач BFS. Как-то он сказал примерно следующее: «Все, кто занимается разработкой Linux, работают на каким-то корпоративном говном, которое никому из обычных пользователей не нужно» Кон Коливас был возмущен текущей отзывчивостью рабочего окружения. Это и послужило написанию своего планировщика задач
avatar

durman

  • 28 января 2012, 01:49

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.