Лечим "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 таковы:
У каждого дистрибутива свои инструменты для сборки, поэтому привожу только порядок действий:
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) Собираем, устанавливаем, перезагружаемся
У меня было так:
А стало так:
Откуда взялись #CONFIG_HZ выше тысячи я не знаю. Сырцы ядра брал из репозитория убунты.
Итог всего действа: субъективно, стало «интерактивнее» =)
Причины его, вроде бы, до сих пор доподлинно неизвестны, проявляется по-разному в сочетании с различными версиями ядра и железа(чипсет, процессор, жесткий диск). Баг кочует с переменным успехом от версии к версии начиная примерно с 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 выше тысячи я не знаю. Сырцы ядра брал из репозитория убунты.
Итог всего действа: субъективно, стало «интерактивнее» =)
- —
- 27 января 2012, 15:15
Комментарии (3)
RSS свернуть / развернутьSergei_T
Фраза порадовала: оказывается, существуют не только историки которые админят компьютерные сети, но и анестезиологи, которые пишут патчи для ядра Linux
yababay
durman
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.