Главная | Контакты



Главная > Операционные системы > UNIX > Linux

Обзор программ для мониторинга работы железа в Linux

Как здоровье, пингвин?

Юрий Раззоренов

Хакер, номер #103, стр. 103-102-1


Обзор программ для мониторинга работы железа в Linux

Лето. На улице уже который день стоит жара. Три вентилятора в системном блоке с большим трудом справляются с охлаждением, хотя шумят прилично. Иногда создается впечатление, что системный блок можно использовать вместо печки. Как узнать, что происходит внутри, не дотрагиваясь пальцами до деталей включенного компьютера? Может, уже пора дать отдохнуть своему железному другу? Или поставить еще один кулер? В составе любого дистрибутива Linux найдется несколько утилит, которые помогут получить ответ на эти и другие вопросы и расскажут все о текущем состоянии железа.

lm-sensors: стандарт де-факто

В Debian, Ubuntu и других дистрибутивах, использующих apt, команда 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

После запуска утилиты тебе будет устроен настоящий допрос с пристрастием. Следует отвечать честно, ничего не скрывая :). В случае сомнения можно разрешать все тесты. Утилита пройдется по всем шинам и устройствам, переберет все скомпилированные модули и выберет те, от которых есть хоть какой-то прок. Если будет выведена хотя бы пара , считай, что тебе повезло. А значит, мониторингу быть. По окончании утилита запросит создать настройки в соответствии с найденным оборудованием: - и выдаст строку, которую необходимо вставить в файл /etc/modules. Выбрав на следующем шаге Yes, можно разрешить ей сделать это самостоятельно.

Советую проверить в /lib/modules/2.6.x/modules наличие всех модулей, которые порекомендовал загрузить sensors-detect. Скрипт иногда бежит впереди паровоза или, наоборот, отстает, поэтому вполне может быть, что таких модулей в системе попросту нет. Так, однажды мне было предложено использовать i2c-nforce2, но такой модуль в системе отсутствовал. Как вариант - можно попробовать загрузить модули вручную с помощью .

Для получения информации с сенсоров вызываем утилиту 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 fan1_min 4000

Хотелось бы обратить внимание на утилиту KSensors (ksensors.sourceforge.net), которая является графическим интерфейсом к sensors для среды KDE. В Ubuntu она устанавливается обычным образом:

$ sudo apt-get install ksensors

Теперь запускаем ее через меню или из командной строки. Щелкаем по появившемуся значку и выбираем 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 (Round Robin Database)

# RRD_FILE=/var/log/sensord.rrd

# Интервал, по умолчанию 5 минут

# RRD_INTERVAL=5m

# RRD_LOADAVG=yes

В комплекте lm-sensors идет утилита pwmconfig, которая проверяет возможность изменения скорости вращения кулеров. Если такая функциональность имеется, для настройки скорости вращения следует использовать утилиту fancontrol. Конфигурационный файл для нее создается с помощью pwmconfig.

Утилита (x)mbmon

Естественно, кроме lm-sensors есть и другие решения. Например, утилита mbmon (MotherBoard Monitor) и графический интерфейс к ней: xmbmon. С их помощью можно контролировать температуру компонентов системы, скорость вращения кулера и вольтаж. Исходные тексты можно найти на сайте автора: 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, всю эту информацию можно увидеть в окне программы.

Мониторинг жесткого диска с hddtemp

Вообще говоря, процессор не самая главная часть компьютера. Вот если полетит жесткий диск, считай, пропали фильмы, курсовые, дипломы и т.д. Поэтому винт требует особого внимания. В Linux есть ряд утилит как раз для этого случая. Начнем с маленькой по размеру, но очень полезной утилиты hddtemp (www.guzu.net/linux/hddtemp.php). С ее помощью можно получать информацию о температуре с IDE/SATA/SCSI-дисков, а также считывать S.M.A.R.T. информацию. Устанавливаем:

$ sudo apt-get install hddtemp

Кроме этого, рекомендуется обновить и базу дисков, скачав файл www.guzu.net/linux/hddtemp.db и поместив его в /etc. Вызов очень прост:

$ sudo hddtemp /dev/sda

/dev/sda: ST3160811AS: нет датчика

Да, с барракудой не повезло, посмотрим, что скажет утилита о втором диске:

$ sudo hddtemp /dev/hdb

/dev/hdb: QUANTUM FIREBALLlct20: 31C or F

Результат: температура файрбола. Как вариант - hddtemp можно запустить в фоне. Получить информацию в этом случае возможно в журнале syslog или подключившись по сети:

$ sudo hddtemp -d -q /dev/hdb

Телнетимся:

$ telnet localhost 7634

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

|/dev/hdb|QUANTUM FIREBALLlct20 30|32|C|Connection closed by foreign host.

Результат: 32 градуса. Таким образом температура диска выясняется даже без регистрирации в системе.

Комплект smartmontools

С помощью набора утилит smartmontools (smartmontools.sf.net) можно контролировать и управлять некоторыми параметрами жесткого диска, используя технологию S.M.A.R.T. Поддерживаются диски с интерфейсами ATA, SCSI и SATA. Для начала стоит проверить статус подключенных устройств:

$ sudo smartd -q onecheck

Opened configuration file /etc/smartd.conf

Drive: DEVICESCAN, implied '-a' Directive on line 22 of file /etc/smartd.conf

Configuration file /etc/smartd.conf was parsed, found DEVICESCAN, scanning devices

Device: /dev/hda, opened

Device: /dev/hda, packet devices [this device CD/DVD] not SMART capable

Unable to register ATA device /dev/hda at line 22 of file /etc/smartd.conf

Device: /dev/hdb, opened

Device: /dev/hdb, found in smartd database.

Device: /dev/hdb, is SMART capable. Adding to "monitor" list.

Device: /dev/sda, opened

Device: /dev/sda, IE (SMART) not enabled, skip device

Try 'smartctl -s on /dev/sda' to turn on SMART features

Unable to register SCSI device /dev/sda at line 22 of file /etc/smartd.conf

Monitoring 1 ATA and 0 SCSI devices

Последняя строка показывает, что будет производиться мониторинг только ATA-диска. На устройстве /dev/sda SMART не активирован, при необходимости его можно включить с помощью вызова . Пробуем получить информацию о диске:

$ sudo smartctl -i /dev/hdb

Model Family: QUANTUM FIREBALLlct20 series

Device Model: QUANTUM FIREBALLlct20 30

Serial Number: 353106162000

Firmware Version: APL.3900

User Capacity: 30.020.272.128 bytes

Device is: In smartctl database [for details use: -P show]

ATA Version is: 5

ATA Standard is: ATA/ATAPI-5 T13 1321D revision 1

Local Time is: Sun May 20 17:32:12 2007 EEST

SMART support is: Available - device has SMART capability.

SMART support is: Enabled

Более полную информацию можно получить, запустив утилиту с флагом '-a'. Вывод займет пару экранов, в самом конце будет выведена таблица со списком контролируемых параметров. Особое внимание следует обратить на поле WHEN_FAILED, в котором отобразится приблизительная дата, когда этот параметр достигнет своего допустимого предела. Эти тесты можно вызвать и отдельно. Причем есть два варианта: сокращенный и полный. Они инициируются командами:

$ sudo smartctl -t short /dev/hdb

Или:

$ sudo smartctl -t long /dev/hdb

Сокращенная проверка длится 1-2 минуты, полная может занять около часа. На работу диска эти тесты никак не влияют, поэтому их можно спокойно запускать на работающей системе. Ошибка будет выведена в поле LBA_of_first_error. Колонка LifeTime покажет время, прошедшее с момента включения диска до проведения проверки. Оффлайновые тесты запускаются командой smartctl -t offline; их назначение - обновление показателей состояния диска, которые не могут быть обновлены во время обычной работы. Используя smartctl -o on, можно разрешить дискам производить такую проверку самостоятельно.

Мониторинг следует производить постоянно. Для этих целей используется демон smartd, который также входит в состав smartmontools. По умолчанию он проверяет все диски каждые 30 минут, информацию выводит с помощью syslog. Демона можно научить при обнаружении проблем отсылать почтовое сообщение администратору или выполнять скрипт. Шаблон содержит большое количество примеров. Каждая строка файла описывает параметры одного из присутствующих в системе дисков. Например:

$ sudo mcedit /etc/smartd.conf

/dev/sda -S on -o on -a -I 194 -m admin@host.com

/dev/hdb -S on -o on -a -I 194 -m admin@host.com

Здесь мы указываем диск, директивой -S on включаем автоматическое сохранение значений показателей. -o on отвечает за проведение регулярного оффлайнового тестирования. С помощью -I 194 игнорируем значение показателя с ID #194, отвечающего за контроль температуры, и в конце указываем email для отправки уведомлений. Проверить отсылку сообщений можно командой smartd -M test. Теперь запускаем демон:

$ sudo /etc/init.d/smartd start

Вот, в общем-то, и все, о чем мне хотелось сегодня рассказать. Кстати, пользователи FreeBSD тоже не обделены возможностями наблюдения за здоровьем своей системы. Все необходимое можно найти в дереве /usr/ports/sysutils коллекции портов. Из графических утилит, не попавших в обзор, стоит отметить gkrellm (www.gkrellm.net) и conky (conky.sf.net), с которыми, я надеюсь, ты разберешься уже сам.

Файловая система /proc

Некоторую информацию можно получить, обратившись напрямую к файловой системе /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: 23 C

В Linux температура выводится в градусах Цельсия, в других системах - в кельвинах. Кстати, есть целая утилита от разработчиков KDE, называется KTemperature, найти ее можно по адресу www.kde-apps.org/content/show.php?content=24660 или в репозитарии. Она как раз считывает информацию из этого файла и выводит результат на панель задач в виде индикатора.

В 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 (активный режим работы кулера). Причем 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.

Подготовка дистрибутива

Для того чтобы большинство описанных утилит заработало, необходимо иметь поддержку I2C и Hardware Monitoring в ядре. То есть как минимум всего, что выдают команды <cat /usr/src/linux/.config | grep LM> и <cat /usr/src/linux/.config | grep I2C2>. Поэтому если вывод молчит как рыба об лед, можешь смело приступать к пересборке ядра. В Hardware Monitoring не забываем включить поддержку своей материнской платы. Если сомневаешься, то просто собери все в виде модулей.

$ sudo make mеnuconfig

Включаем поддержку ACPI:

Power management options (ACPI, APM) - ACPI (Advanced Configuration and Power Interface) Support

Не забываем стандарт управления сенсорами IPMI:

Device Drivers - Character devices - IPMI

Обязательно включаем поддержку сенсоров в ядре:

Device Drivers - I2C support

Выбираем алгоритмы, используемые в чипах:

Device Drivers - I2C support ---> I2C Algorithms

В следующих пунктах выбираем установленный чипсет:

Device Drivers - I2C support - I2C Hardware Bus support

Device Drivers - I2C support - Miscellaneous I2C Chip support

И, наконец, выбираем драйверы к сенсорам:

Device Drivers - Hardware Monitoring support

Начиная с версии ядра 2.6.19, появился новый драйвер мониторинга k8temp, который поддерживает все последние модели AMD K8. В соответствующих системах этот драйвер загружается автоматически. Отмечена его несовместимость со старыми версиями lm-sensors. Поэтому обязательно обнови утилиту или занеси k8temp в черный список, иначе General parse error тебе обеспечена.

Материал взят с сайта: http://www.xakep.ru/magazine/xa/103/102/1.asp

Главная > Операционные системы > UNIX > Linux