Вы не скажете, сколько сейчас градусов выше нуля по цельсию или Open Source Overclocking

25 января 2003, суббота 00:25

Эта статья была прислана на наш второй конкурс.


Часть 1. Ищем сенсоры.
Ну вот, корпус открыт, на процессор посажен огромный блестящий радиатор, вентилятор, в лучших традициях, покрашен в красный цвет. Самое время понять, на сколько градусов мы поднимем температуру в комнате. Ключевым словом, которого, в общем, даже и достаточно для начала, является "lm_sensors". Начинаем поиски знания. (Эксперимент ставился на дистрибутиве ALT Linux Master 2.0)
[maga@localhost bin]$ apt-cache search lm_sensors khealthcare - KDE app to monitor system health sensors lm_sensors - Hardware Health Monitoring Tools wmalms - A dockable/swallowed applet to manage sensor data: temperature, fan speed, voltage. wmgtemp - dock app for WindowMaker that displays the CPU and SYS temperatures lm_sensors-graph - Hardware Health Monitoring Tools - graph addon
Судя по описаниям, lm_sensors -- это как раз то что нам нужно. Что-же, порадуем нашу систему.
apt-get install lm_sensors
Пакет маленький, так что на перекур можно не уходить. Смотрим, что мы поставили:
[maga@localhost bin]$ rpm -ql lm_sensors /etc/sensors.conf /usr/bin/sensors /usr/sbin/sensors-detect ...
Вот оно! Первое, что приходит в голову:
[maga@localhost bin]$ sensors No sensors found!
Ну, результат, конечно, не ошеломляющий, но наличие sensors-detect вселяет уверенность, что потеряно не все. Тут, правда, придется побыть root'ом.
[root@localhost root]# sensors-detect This program will help you to determine which I2C/SMBus modules you need to load to use lm_sensors most effectively.
Вопросы, вопросы... Зато нет нужды обходить Internet-поисковики в поисках модели нашего термометра. Тут надо немного уйти в сторону теории.
Данные с термодатчика можно снять двумя способами, посредством System Management Bus (SMBus), она же в нашем случае I2C Bus, и через шину ISA. Кстати, отсутствие ISA-слотов не говорит об отсутствии шины. sensors-detect поищет термодатчики на обеих шинах, предложит загрузить некоторые общие для всех датчиков модули - отказываться не надо. Внимательно посмотрите на выводы сканирования SMBus и ISA Bus - передача по ISA происходит быстрее, чем по SMBus, но не все материнские платы используют обе возможности. В моем случае (Asus CUSL2) датчик был найден только на SMBus, так что размышлять над вопросом "If you have the choice, do you want to use the ISA bus or the I2C/SMBus (ISA/smbus)?" мне не пришлось.
Разработчики sensors-detect позаботились о человеке, мало знакомом с работой с модулями в Linux. Обнаружение сенсоров заканчивается весьма логичным:
To load everything that is needed, add this to some /etc/rc* file:

#----cut here---- # I2C adapter drivers modprobe i2c-i801 # I2C chip drivers modprobe w83781d #----cut here----

To make the sensors modules behave correctly, add these lines to either /etc/modules.conf or /etc/conf.modules:

#----cut here---- # I2C module options alias char-major-89 i2c-dev #----cut here----

Окей. Мы не против. Судя по составу пакета lm_sensors, пора переходить непосредственно к sensors.
Ого! Сколько полезной информации! Шина SMBus, оказывается, вовсе не I2C. Но ничего, работе не мешает. Перед тем как перейти к мониторингу, пробуем устаканить нашу систему. Выполняем все, что посоветовал sensors-detect. Добавляем строчку в /etc/modules.conf и пару строк в /etc/rc.local. Если машина выключается, можно проверить все ли у нас получилось, перезагрузившись. Если все в порядке, то сразу после загрузки команда sensors не будет ругаться на отсутствие датчиков, а по-доброму покажет нам их значения.
Часть 2. Под неусыпным контролем.
Позапускав sensors полчасика, приходишь к мысли, что для всех наших сверхмощных тестов надо как-то процесс автоматизировать. Начинаем, как и положено, с apt-cache.
[maga@localhost rc.d]$ apt-cache search lm_sensors khealthcare - KDE app to monitor system health sensors lm_sensors - Hardware Health Monitoring Tools wmalms - A dockable/swallowed applet to manage sensor data: temperature, fan speed, voltage. wmgtemp - dock app for WindowMaker that displays the CPU and SYS temperatures lm_sensors-graph - Hardware Health Monitoring Tools - graph addon
Это мы, конечно, уже видели, но в этот раз интерес вызывает софт, использующий возможности lm_sensors. Софт, скажем так, весьма несложный. Более всего подходящим мне показался khealtcare, но любителям WindowMaker'а, уверен, придутся по душе док-приложения, которых, помимо wmgtemp из дистрибутива, во множестве можно найти на http://www.freshmeat.net, произведя поиск по слову "lm_sensors". Я дополнительно поставил плагин для gkrellm, но его придется сперва скомпилировать. В принципе его вполне хватает, но он сразу сказал, что на процессоре у меня +8 градусов Цельсия, я ему не поверил и решил разобраться. Тут надо сделать небольшое отступление:
Начав поиск средств мониторинга для Windows я наткнулся на такую проблему: Температура в BIOS после 15 минут простоя компьютера составляла около 42 градусов. Температура в Windows примерно одинаковая в MBProbe и Asus Probe - около 30, и совсем уж нереальные 8(!) градусов в Hardware Monitor. Итак, мы имеем три уровня температур: BIOS: 42 Asus Probe, MBProbe, sensors: 31 Hardware Monitor, Gkrellm: 8 Ответ обнаружился в /etc/sensors.conf в разделе, посвященном моему датчику: compute temp2 (@*30/43)+25, (@-25)*43/30 Это формулы пересчета температуры. Подставив вместо @ 8 получаем: (8*30/43)+25 = 30,5 Вот тут все становится на свои места, не все программы делают этот пересчет. Вечно мне попадаются какие-то нестандарты. Но все же. Почему такая разница с BIOS? Ответ опять в sensors.conf: # Asus won't release a datasheet so this is guesswork. # New in5 and temp2 calculations courtesy Guntram Blohm. Вот так. Формула получена опытным путем. Без походов по интернету все же не обошлось. В итоге было найдено мнение, что формула пересчета может быть проще и точнее. Меняем: # compute temp2 (@*30/43)+25, (@-25)*43/30 compute temp2 @ + 30, @ - 30 Теперь что-то похожее, 35-37 градусов без загрузки. Наверняка в Asus Probe, где-то внутри есть совсем правильная формула, но Open Source в Windows -- скорее исключение. Так что будем подбирать, хотя это касалось только моих датчиков, надеюсь, вам не придется иметь такую головную боль.
На Gkrellm наши телодвижения эффекта не возымели (кстати, плагин там небольшой, наверняка можно просто поправить в исходниках), но теперь мы знаем, что к его показаниям надо прибавить 30 градусов. Для каждодневного мониторинга его вполне хватит. Любители графических интерфейсов могут тут остановиться, но я, поигравшись, решил откатиться на sensors. Для начала освободим один палец, занятый постоянным запуском sensors.
[maga@localhost maga]$ cat ~/bin/tempmon.pl #!/usr/bin/perl while (true) { open (L, "sensors "); @l = ; system "clear"; print @l; close (L); sleep 1; # &log_sensors; }
Скрипт помещаем в ~/bin/, запускам и получаем консольку с realtime-показателями. Процедуру &log_sensors напишем позднее.
Часть 3. Начинаем упражнения.
Поиск в интернете какого-то софта, выполняющего функции BurnCPU for Windows, к результатам не привел, но у нас же тут есть tuxracer! Открываем ~/.tuxracer/options, отказываемся от режима "Полный экран": set fullscreen false. Запускаем. Можно, кстати, включить отображение fps в игре, раз уж все равно файл открыт: set display_fps true. Вот теперь можно в одном окошке погоняться по трассам, а в другом посмотреть, как это действует на наш процессор. Режима DEMO я не нашел, что, конечно удручает в плане автоматизации. Не будучи силен в написании программ, загружающих процессор, я набросал коротенький скриптик:
[maga@localhost maga]$ cat ~/bin/load.pl #!/usr/bin/perl $++; print "\nYour CPU now burning\nProcess ID $$\n"; open (CPU, "/proc/cpuinfo") die ?Can\'t fork: ?.$!; while () { if (/^model name/) {chomp; @a = split ':\s', $_; print $a[1];} if (/^cpu MHz/) {chomp; @a = split ':\s', $_; print " at ".$a[1]." Mhz\n";} } close (CPU);

while (true) { for (1..200000) { if ($switch > 0) {$i++;} else {$i--;} if ($i > 100000000000) {$switch = 0;} if ($i < -100000000000) {$switch = 1;} } print "*"; }

Цифры были взяты исключительно с потолка, кроме 200000, полученной опытным путем, для какого-то отображения процесса. Чем больше число, тем медленнее бегут звездочки по экрану. Вообще попытки как-то украсить скрипт, дать какой-нибудь еще вывод, приводят к тому, что он перестает загружать процессор. Хотя, согласитесь, было бы весьма привлекательно одной программой загружать процессор, получать информацию о ходе загрузки и снимать показания с термодатчиков. Итак, мы имеем три консоли, в первой - tempmon.pl, во второй, как положено, top, в третьей - load.pl. Эка, топ говорит, что наш складывающе-отнимающий скрипт занимает процессор по полной программе. Температура процессора поползла вверх, процесс пошел. Можно на фоне всего этого запустить тот же tuxracer. У меня это не вызвало никакого прироста температуры. Наверняка это не все, чем можно занять современный процессор, однако я другого способа не знаю, если знаете вы -- напишите мне, чем еще можно разогревать процессор.

Да, оказалось разогревать можно двумя более правильными способами: первый - программой из пакета BurnCPU, запустив ее под wine. Второй, самый правильный, программой из пакета cpuburn, но его Linux-версии.

Ну вот, вкратце и все, что нам нужно для наблюдения за любимыми игрушками. Напоследок, для совсем серъезных оверклокеров, осуществим мечту о логах. Над форматом особенно голову ломать не будем, возьмем CSV (Comma Separated Values). Наш скриптик будет выглядеть так:





tempmon.pl

Ужасные строки в log_sensors -- разбор вывода sensors. Знаю, некрасиво. Сделайте себе как нравится. На выходе получаем файл, к примеру, 29-06-2002-23-10.log, что означает "лог начат 29 июня 2002 г в 23:10". Внутри он выглядит так:

VCore1; VCore2; Fan1; Fan2; Fan3; Temp1; Temp2; Temp3 1,85; 1,90; 3000; 0; 4963; 31; 35,5; 112,2; 1,90; 1,90; 3000; 0; 4963; 31; 35,5; 112,2; 1,90; 1,90; 3000; 0; 4963; 31; 35,2; 112,2; 1,90; 1,90; 3000; 0; 4963; 31; 35,5; 112,2;
Этого вполне достаточно для того, чтобы открыть его в OpenOffice.org, в электронных таблицах. При открытии надо указать тип файла CSV, разделитель -- точка с запятой.
Вот что получилось в итоге:
Вот и нужный каждому оверклокеру результат. Ну и, конечно, не бойтесь искать своих путей, документации по lm_sensors в /usr/share/doc, судя по всему море. Найдете что-то интересное - пишите. Удачи. Ссылки по теме: lm_sensors: http://www.netroedge.com/~lm78/download.htm khealthcare: http://homepages.fh-giessen.de/~hg7229/khealthcare ALT Linux: http://www.altlinux.ru Все файлы в архиве: lm_sensors.tar.gz -- Sergey Degtyaryov maga, maga@sovesti.net


Эта статья была прислана на наш второй конкурс.

Страницы материала
Страница 1 из 0
Оценитe материал

Возможно вас заинтересует

Популярные новости

Сейчас обсуждают