Лето в прошлом году было очень жаркое. Вентиляторы находящиеся в системном с большим трудом справлялись с охлаждением, хотя шум издают приличный. Как узнать, что происходит там внутри внутри, не прибегая к контактному методу то есть проверки пальцами. Может пора уже ставить еще один кулер? В составе любого дистрибутива Linux найдется несколько утилит, которые помогут получить ответ на эти и другие вопросы.
Вообще большое количество информации можно получить обратившись напрямую к файловой системе /proc, тем более большая часть утилит делает то же самое только выводит результат более наглядно. Для примера проверим включен ли кулер на процессоре:
$ sudo cat /proc/acpi/fan/FAN/state
status: on
Можно ли его выключить командой “echo 0 > /proc/acpi/fan/FAN/state”, зависит от материнской платы. Температуру процессора можно просмотреть так:
$ sudo cat /proc/acpi/thermal_zone/THRM/temperature
temperature: 29 C
Причем в Linux температура выводится в градусах Цельсия, в других системах в кельвинах. Кстати есть целая утилита от разоработчиков KDE, называется KTemperature, найти ее можно по адресу www.kde-apps.org/content/show.php?content=24660 или в репозитарии дистрибутива (sudo apt-get install ktemperature). Она как раз и считывает информацию из этого файла и выводит результат в виде индиатора на панель задач.
В trip_points можно считать или задать политику управления охлаждением системы:
$ sudo cat /proc/acpi/thermal_zone/THRM/trip_points
critical (S5): 65 C
passive: 63 C: tc1=4 tc2=3 tsp=60 devices=0xdf852338
active[0]: 63 C: devices=0xdf85ff90
Возможны три варианта политики: critical (критическая температура после которой возможен автоматический переход в спящий режим), passive (уменьшение частоты процессора) и active (активный режим работы кулера). При чем последних может быть несколько ступеней от 0 до 9, количество опять же зависит от оборудования. Команда на изменение этих параметров выглядит так “echo -n «critical:hot:passive:active0:…:activeX» > trip_points”. Например:
$ echo «105:100:100:78:70:60:50″ > /proc/acpi/thermal_zone/TZ0/trip_points
Текущий режим охлаждения можно просмотреть такой командой:
$ sudo cat /proc/acpi/thermal_zone/THRM/cooling_mode
cooling mode: active
Устанавливать пассивный режим разрешено не во всех устройствах. Хотя современные ноутбуки его обычно поддерживают. Частота опроса сенсоров указывается в polling_frequency. Но обычно он отключен:
$ sudo cat /proc/acpi/thermal_zone/THRM/polling_frequency
<polling disabled>
Это означает, что само устройство способно генерировать асинхронные прерывания, в случае изменений, поэтому наблюдать за ним нет смысла. Более подробную информацию о thermal_zone можно найти на сайте acpi.sourceforge.net/documentation/thermal.html. Теперь перейдем к специализированным утилитам.
Советую прежде чем бросаться в Интернет сначала посмотрите, что есть в репозитарии пакетов, например в Debian, Ubuntu и других дистрибутивах использующих apt, команда:
$ sudo apt-cache search monitoring
Выдаст большой список пакетов на все случаи жизни, все их рассмотреть не получится, да наверное и не нужно. Мониторинг оборудования, а именно температуру, вращение вентиляторов, напряжение питания будем производить с помощью утилиты lm-sensors (www.lm-sensors.org). Утилита собирает и анализирует все, что идет по шине SMB (System Management Bus), к которой могут быть подключены не только процессор, материнская плата, но и модули памяти, видеокарта и прочее оборудование. В ядрах 2.4 установка lm-sensors могла вызвать легкий стресс, но с интеграцией компонентов осуществляющих мониторинг в ядро 2.6, заставить ее работать уже не проблема. Информацию о поддержке своего оборудования lm-sensors и ядром, можно найти на странице Devices and drivers (www.lm-sensors.org/wiki/Devices). Здесь же уточняем, какую версию lm-sensors рекомендуется использовать с установленным в системе ядром. Хотя можно особо и не выбирать, а ставить то, что предлагается в репозитарии. Так как утилиты диагностики частью ядра не являются, их следует установить отдельно:
$ sudo apt-get install lm-sensors sensord
Заодно установим и демон sensord, его задача собирать информацию в syslog. Он же может в случае неприятностей выдать предупреждение. Для первоначальной настройки системы мониторинга следует использовать утилиту sensors-detect:
$ sudo sensors-detect
После запуска утилиты тебе будет устроен настоящий допрос с пристрастием, следует отвечать честно, ничего не скрывая.
Хотя в случае сомнения можно разрешать все тесты. Утилита пройдется по всем шинам и устройствам, переберет все скомпилированные модули и выберет те, от которых есть хоть какой то прок. Если будет выведена хоть пара «Success!» считай, что повезло. А значит мониторингу быть. По окончании утилита запросит создать настройки в соответствии с найденным оборудованием «I will now generate the commands needed to load the required modules» и выдаст строку, которую необходимо вставить в файл /etc/modules. Выбрав на следующем шаге Yes можно разрешить ей сделать это самостоятельно. Советую проверить наличие в /lib/modules/2.6.x/modules всех модулей, которые порекомендовал загрузить sensors-detect, скрипт иногда бежит впереди поезда или наоборот отстает. Поэтому вполне может быть, что таких модулей в системе попросту нет. Как вариант можно попробовать загрузить модули вручную с помощью «modprobe название_модуля». Теперь, чтобы получить информацию от сенсоров, вызываем утилиту sensors без параметров, можно уже под обычным пользователем:
$ sensors
lm85b-i2c-0-2e
Adapter: SMBus I801 adapter at c800
VoltA1_5: +1.49 V (min = +1.42 V, max = +1.58 V)
Volt1_5: +1.52 V (min = +1.45 V, max = +1.60 V)
Volt3_3: +3.23 V (min = +3.13 V, max = +3.47 V)
Volt5: +5.20 V (min = +4.74 V, max = +5.26 V)
Volt12: +12.01 V (min = +11.38 V, max = +12.62 V)
FanCPU: 3540 RPM (min = 4000 RPM)
TempCPU: +28C (low = +10C, high = +55C)
TempMB1: +31C (low = +10C, high = +55C)
TempMB2: +34C (low = +10C, high = +55C)
CPUF_PWM: 255
SysF1_PWM: 255
SysF2_PWM: 77
vid: +1.525 V (VRM Version 9.1)
Результат в разных системах будет отличаться и зависит от поддержки оборудования. Если совсем уж глухо, тогда за ответом придется обратиться к документации проекта. Параметры вывода на экран настраиваются в файле /etc/sensors.conf. Приводить его полностью нет смысла. Все там все понятно, да и все настройки сугубо индивидуальны. Ищем строку соответствующую своему чипу, в нашем примере это lm85 и правим при необходимости:
$ sudo mcedit /etc/sensors.conf
…
chip «lm85c-*» «adm1027-*» «adt7463-*» «lm85-*» «lm85b-*»
# метки вольтажа
label in0 «V1.5″
label in1 «VCore»
…
# температура
label temp1 «CPU Temp»
label temp2 «Board Temp»
…
# кулер
label fan1 «CPU_Fan»
# установка лимита вольтажа
set in0_min 1.5 * 0.95
# set in0_max 1.5 * 1.05
# лимит кулера
set fan1_min 4000
И так дальше. Хотелось бы обратить внимание на утилиту KSensors (ksensors.sourceforge.net), которая является графическим интерфейсом к sensors для среды KDE. В Ubuntu устанавливается он обычным образом:
$ sudo apt-get install ksensors
Теперь запускаем через меню K или с командной строки. Щелкаем по появившемуся значку и выбираем Configure.
Затем просто переходим по вкладкам и включаем флажок Visible в тех параметрах которые хотим видеть. Результат будет выведен в панели задач (если активирован Dock) и в отдельном окне, которое открывается двойным щелчком по значку KSensors. Кроме параметров контролируемых с помощью утилиты lm-sensors, можно выводить состояние памяти, swap и некоторую другую информацию. Для каждого параметра можно выставить интервал обновления, и реакцию системы при превышении некоторого значения (выполнить команду или проиграть звук). Чтобы KSensor автоматически запускался при загрузке системы, не забудь установить «Autostart KSensors on KDE startup» во вкладке «Global settings».
Настройки демона sensord производятся в файле /etc/default/sensord.
$ sudo mcedit /etc/default/sensord
# интервал для сканирования на предупреждения(30s, 1m, 1h)
ALARM_INTERVAL=1m
# интервал между замерами для записи в журнал
LOG_INTERVAL=30m
SYSLOG_FACILITY=daemon
CONFIG_FILE=/etc/sensors.conf
# чип берем из sensors.conf
SCAN_CHIPS= lm85b-*
# снимаем комментарий, если нужен вывод для RRD
# RRD_FILE=/var/log/sensord.rrd
# интервал, по умолчанию 5 минут
# RRD_INTERVAL=5m
# RRD_LOADAVG=yes
В комплекте lm-sensors имеется утилита pwmconfig, которая проверят возможность изменения скорости кулеров. Если такая функциональность имеется, для настройки скорости вражения следует использовать утилиту fancontrol. Конфигурационный файл для нее создается с помощью pwmconfig.
Естественно lm-sensors дело не обошлось, есть и другие решения. Например, две утилиты mbmon (MotherBoard Monitor) и графический интерфейс к ней xmbmon, разработки Йошифуми Шимизу (Yoshifumi R. Shimizu). С их помощью можно проконтролировать тепературу компонентов системы, частоту вращения кулера и вольтаж. Исходные тексты можно найти на сайте автора www.nt.phys.kyushu-u.ac.jp/shimizu/download/download.html. Установка в Ubuntu не сложна:
$ sudo apt-get install mbmon xmbmon
Теперь можно запускать без каких либо настроек:
$ sudo mbmon
Temp.= 30.0, 24.0, 127.0; Rot.= 3308, 0, 6026
Vcore = 1.14, 1.52; Volt. = 3.28, 5.00, 11.49, -6.62, -1.83
Запустив xmbmon всю эту информацию можно увидеть в окне программы.
Популярная программа мониторинга GKrellM (www.gkrellm.net) умеет выводить информацию о загрузке процессора, памяти, работу сетевых интерфейсов, наличие почты, управлять проигрывателями и прочее.
Все возможности реализуются посредством подключения плагинов, поэтому можно отобрать то что действительно нужно. Для самостоятельной сборки потребуется gtk 2.0, gdk 2.0, glib 2.0, но в репозитарии Ubuntu он уже есть, введя комманду «sudo apt-cache search gkrellm», вы найдете не только саму программу, но и большое количество плагинов и тем к ней, способных удовлетворить самые изысканные запросы пользователей. Нас же интересует мониторинг температуры процессора и работа кулеров, поэтому щелкаем один раз правой кнопкой мышки по дате и в появившемся окне настройки выбираем Встроенные-Датчики. Разворачиваем все пункты и устанавливаем флажок напротив тех датчиков которые нас интересуют. После активации датчика в окне справа можно установить другое значение множителя и указать расположение датчика в окне GKrellM. Для температурных датчиков убедитесь, что во вкладке Параметры снят флажок Температура-По Фарангейту. Здесь же можно указать и команду для запуска mbmon, и контролировать с его помощью параметры в том числе и на удаленной системе. Нажав кнопку Сигналы, указываем допустимые параметры для конкретного датчика, при превышении которого будет выдаваться сигнал предупреждения или тревоги. Здесь вообщем то все просто вы быстро разберетесь, что к чему тем более интерфейс локализован.
Вот в принципе и все о чем хотелось сегодня рассказать, хотя это далеко не все, что есть в Linux. Но теперь вы будете всегда знать что происходит с вашим процессором. Linux forever!
5 Комментариев к Мониторинг железа в Linux
Февраль 1st, 2008 | 20:26
Воистину forever.
Хорошая статья. По оформлению вопросик. Почему код и терминальный вывод не выделяете? Удобочитаемость возрастет.
Интересные обзоры. Вижу накопили материала
Февраль 1st, 2008 | 20:49
Спасибо. Чуть подправил. Так пойдет ?
Февраль 1st, 2008 | 21:14
> Так пойдет?
Вам решать. Уже лучше
Февраль 1st, 2008 | 21:24
Видел пару плагинов, для удобства написания текста, по экспериментирую.
Март 26th, 2008 | 20:19
Для юзверей кед советую KSensors.