Ядро 2.6.15.4 и klogd

Аватар пользователя Archont

Господа, в последние несколько дней приходится довольно много компилировать, и меня замучили сообщения от klogd, которые сыплются в консоль, о том, что процессор перегрелся, и его частота будет снижена.
У меня вентилятор не соответствует процессору, поэтому он и не охлаждается эффективно, но я об этом знаю, за температурой во время компиляции слежу, он не перегревается (именно потому, что работает на пониженной частоте).

Вопрос:
Что именно отвечает в ядре 2.6 за вывод klogd в консоль?
С ядром 2.4 я мог настроить связку syslogd - klogd так, что они могли выводить в консоль (что мне нужно и когда нужно), а могли только в syslog.log, kernel.log, куда прикажу, короче. Причем сейчас так именно и происходит.
А с ядром 2.6 при тех же самых настройках именно сообщения о перегреве посылаются всюду, куда только можно, в т.ч. и во все открытые консоли.
Пробовал кое-что выключать в ядре ( с перекомпиляцией), но пока ничего не нашел. Единственная возможность - останавливать klogd, но тогда вообще никакие сообщения ядра не протоколируются!

Аватар пользователя Archont

Re: Ядро 2.6.15.4 и klogd

Цитата:
Archont пишет:
Вопрос:
Что именно отвечает в ядре 2.6 за вывод klogd в консоль?

Ответ:
Сообщения о разогреве процессора до предкритической температуры (73-75 град. С) и изменении рабочей частоты почему-то (в 2.6) приравнены к уровню EMERGENCY, т.е. 0-вой уровень сообщений ядра, поэтому klogd вываливает эти сообщения во все имеющиеся консоли.
В ядре 2.4 только сообщение о разогреве до критической температуры выводится с 0-ым уровнем, а этих сообщений нет вообще:
CPU0: Temperature above threshold
CPU0: Running in modulated clock mode

Решение:
1) Не лучший вариант.
Выключаем CONFIG_X86_MCE_P4THERMAL в конфигурации ядра. Тогда сообщения о температуре процессора вообще ядром не генерируются, что нельзя считать мудрым решением.
2) Более приемлемый вариант.
В файле kernel_src_tree/arch/i386/kernel/cpu/mcheck/p4.c правим строки:
printk(KERN_EMERG "CPU%d: Temperature above threshold\n", cpu);
printk(KERN_EMERG "CPU%d: Running in modulated clock mode\n",
таким образом:
printk(KERN_INFO "CPU%d: Temperature above threshold\n", cpu);
printk(KERN_INFO "CPU%d: Running in modulated clock mode\n",
т.е. изменяем у ровень сообщения с 0-го на 6-й.
После этого необходимо перекомпилировать само ядро (без модулей) и переустановить его.
Не забыть после переустановки ядра переустановить загрузчик.
После этого сообщения о нагреве процессора будут прекрасно обрабатываться klogd, записываться в логи, но не будут раздражать появлением во всех консолях.

Особое спасибо за помощь Archont-у.
Не знаю, как бы я без него решил эту проблему!

RSS-материал