Дисклеймер

Внимание: в этом блоге могут описываться события, явления и факты при помощи ненормативной лексики.

Убедитесь, что Вы готовы к этому.


Показаны сообщения с ярлыком archlinux. Показать все сообщения
Показаны сообщения с ярлыком archlinux. Показать все сообщения

суббота, 15 января 2011 г.

Установка и настройка cpufreq

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

Итак, потребуются: права root, пакет cpufrequtils, модули ядра acpi_cpufreq, freq_table (сам подгрузится по зависимости. просто нужно, чтобы он был в ядре), модули режимов: cpufreq_*, где * - нужный вариант из: performance, powersave, ondemand или conservative.

Чтобы не изобретать велосипеды, сразу пришла в голову мысль про cpufreq - модули в ядре есть, поэтому этот вариант самый простой, действенный и удобный. Для управления пользователем режимами cpufreq необходимо установить пакет cpufrequtils

В моём арче это выглядит так:
pacman -S cpufrequtils

Затем нам нужно определиться, что за режим управления частотой процессора нам нужно выбрать. Объясню кратко и очень грубо:
performance - максимальная производительность. устанавливается максимально доступная (номинальная) частота процессора.
powersave - максимальная экономия энергии. устанавливается минимальная доступная частота процессора.
ondemand - устанавливается частота по требованию, в зависимости от загрузки процессора.
conservative - очень похожий на ondemand метод, только несколько более плавно повышает частоту процессора, отдавая приоритет более низким частотам, если нагрузка позволяет.

необходимо осознавать, что, в любом случае, смена частоты не происходит мгновенно - на это всё равно требуется некоторое время, поэтому, если компьютер используется активно и очень часто меняется нагрузка на процессор, то, теоретически, производительность системы может несколько уменьшиться при использовании методов ondemand или conservative.

в моём случае всё очень просто - ondemand наиболее подходящий кандидат.

посмотреть информацию о доступных для процессора режимах можно так:
1. загружаем необходимый модуль: modprobe acpi_cpufreq
2. выполняем команду: cpufreq-info

в случае с моим старичком, вылезло:
cpufrequtils 008: cpufreq-info (C) Dominik Brodowski 2004-2009
Report errors and bugs to cpufreq@vger.kernel.org, please.
analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 10.0 us.
  hardware limits: 2.80 GHz - 3.20 GHz
  available frequency steps: 3.20 GHz, 2.80 GHz
  available cpufreq governors: ondemand, performance
  current policy: frequency should be within 2.80 GHz and 3.20 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 3.20 GHz.
analyzing CPU 1:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 1
  CPUs which need to have their frequency coordinated by software: 1
  maximum transition latency: 10.0 us.
  hardware limits: 2.80 GHz - 3.20 GHz
  available frequency steps: 3.20 GHz, 2.80 GHz
  available cpufreq governors: ondemand, performance
  current policy: frequency should be within 2.80 GHz and 3.20 GHz.
                  The governor "ondemand" may decide which speed to use
                  within this range.
  current CPU frequency is 3.20 GHz.
Таким образом, мы получаем важную информацию, касательно доступных режимов, доступных частот, а так же текущих показателей.
Хочу обратить внимание, что перечень доступных режимов зависит от того, какие модули подгружены.
Режим performance обычно при компиляции ядра ставится по-умолчанию, но нам никто не мешает это изменить.

Итак, я хочу использовать режим ondemand. Что мне нужно для этого сделать?
Как можно понять из вывода cpufreq-info, мой процессор P4 Prescott поддерживает лишь две позиции частоты - 2.8 GHz и 3.2 GHz.
Поэтому настройки сводятся к минимуму.
Открываем /etc/conf.d/cpufreq и оставляем лишь одну раскомментированную строку:
governor="ondemand"
Поскольку доступных режимов всего 2, то этого вполне будет достаточно.
Если же нужно будет задать частоту минимальную и максимальную (например, процессор имеет порог в 1.6 GHz и пиковую частоту в 3.1 GHz, а Вам не нравятся эти значения), то можно, например, выставить частотный диапазон в 2.0 Ghz - 3.0 Ghz, чтобы и процессор сильно не филонил, но и максимально не разгонялся, тогда раскомментируем и модифицируем строки:
min_freq="2.0GHz"
max_freq="3.0GHz"
Важно: cpufreq не сможет выставить частоту, которая не поддерживается процессором. Например, если у меня доступны лишь 2.8 и 3.2, то 2.6, 3.0 и другие варианты невозможны.

Теперь сохраняем файл. Затем нужно подгрузить тот модуль, который мы выбрали: modprobe cpufreq_ondemand
Затем запускаем демона: /etc/rc.d/cpufreq start

Всё. Уже работает. До перезагрузки.

Так вот, для того, чтобы каждый раз не подгружать модули и запускать демона вручную, пропишем их в автозагрузку.
Итак, открываем /etc/rc.conf и вписываем в секцию модулей те, которые нам нужны. в моём случае, это будет выглядеть так:
MODULES=(acpi_cpufreq cpufreq_ondemand)
acpi_cpufreq также необходим, как и модуль выбранного режима - обращаю на это Ваше внимание. вписывать freq_table нет необходимости, при загрузке этих двух модулей - и он подтянется автоматически.

Осталось в "демоническую секцию" прописать автозапуск cpufreq. У меня в моей системе получилось так:
DAEMONS=(syslog-ng !network !netfs cpufreq @adsl crond hal kdm @rtirq @cups)
это место в очереди обусловлено тем, что он начинает работать сразу же, т.е. во время загрузки последующих демонов - уже будет масштабирование частоты при необходимости. поэтому ему второе место - сразу после лога (чтобы в логе глядеть можно было на следы жизнедеятельности всех последующих демонов).

Для удобства, чтобы всегда можно было посмотреть текущую частоту без лишних данных, можно вписать в пользовательский ~/.bashrc строчку:
alias freq='cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq'
После перезахода в систему, чтобы посмотреть текущую частоту, достаточно будет открыть консоль, написать freq и нажать enter - получим данные в герцах.

Вот и всё. Сохраняем, перезапускаем систему, всё будет работать.

Конечно, лично мне это вряд ли существенно оптимизировать тепловыделение и энергопотребление - масштабирование частоты небольшое, но на более новых процессорах (особенно, такие температурно-темпераментные, как AMD Phenom и более новые)- это даёт заметные результаты. Странно, что, например, в ubuntu 10.04 "из коробки" этого нет.

P.S. на нынешнем своём процессоре - i5 2500K даже при отсутствии cpufreq частота процессора масштабируется автоматически - фирменная опция Intel Speedstep во всей красе.

воскресенье, 5 декабря 2010 г.

Решение проблемы с /usr/lib/cups/filter/hpcups failed

Случилось мне переустанавливать ArchLinux на своём десктопе. Всё настроил, но возникла странная проблема: не настраивается CUPS для печати.

Вспоминаю, что при настройке через hp-setup получил строку:
error: Python gobject/dbus may be not installed
Проверил зависимости, установил отсутствовавший почему-то пакет dbus-python. Но не помогло. При попытке что-то напечатать получал сообщение:
/usr/lib/cups/filter/hpcups failed
Само собой, такое меня не устраивало, принтер-то нужен.
Оказалось всё весьма прозаично. HPLIP требовала бинарник python в /usr/bin/python, а там не было ничего. Даже линка. Вот и возмущался CUPS и HPLIP.

Решаем:
1. создаём линк. поскольку у меня в /usr/bin/ нашёлся бинарник python2.7, то:
ln -s /usr/bin/python2.7 /usr/bin/python
2. сносим старые настройки CUPS к чёртовой бабушке вместе с его директорией:
rm -r /etc/cups
3. переустанавливаем CUPS, чтобы он создал новые, чистенькие настройки. ну, и HPLIP - чисто на всякий. в разных дистрибутивах это выглядит, само собой, по-разному. а в ArchLinux это так:
pacman -S cups hplip
4. перезапускаем демон CUPS. опять же, его расположение дистроспецифично. в ArchLinux, например:
/etc/rc.d/cups restart
в gentoo, например, такое же действие будет выглядеть как /etc/init.d/cupsd restart.

5. заново настраиваем принтер. я люблю это делать в терминале, просто нажимая Enter в диалогах, поэтому добавляю ключик -i, чтобы не было графического интерфейса. это нужно и в случае, если нет qt. смотрится это так:
hp-setup -i
Ну и вот, всё работает.
Правда, в моём случае, приходилось осуществлять ещё одно действие, во избежание ошибки /usr/lib/cups/backend/hp failed

Вот, собственно, и всё :)
Конечно, наверняка есть более грамотный и элегантный способ решения проблемы. Но я же не гуру, и не всё знаю-понимаю, что с чем и как работает. Для меня главное, что сейчас могу печатать, и никаких негативных последствий от моих действий, по крайней мере, пока, нет :)

понедельник, 15 ноября 2010 г.

Решение проблемы с /usr/lib/cups/backend/hp failed

Имеется у меня МФУ Hewlett-Packard LaserJet M1005 MFP. Работал исправно со своими hplip-дровами в archlinux. Но, случилась беда - неожиданно отказался печатать. В веб-интерфейсе CUPS меня ждала надпись, что принтер приостановлен и задание в очереди со статусом "/usr/lib/cups/backend/hp failed". Поиски решения, загрузки-перезагрузки, проверки, переустановки hplip, другие драйверы ничего не дали. Обратился на линуксфорум и поискал аналогичные проблемы на официальном форуме archlinux - ничего мне подходящего. Поставил рядом "стабильный" дебиан - и там то же самое. Поставил ubuntu 9.10 - всё работает. Долго потрошил интернет - ничего путного не нашёл.

Не помню где, но видел мысль в очень давних мэйлинг-листах англоязычных, что, возможно, сей баг связан с разрешениями / правилами udev. Я - человек от заумных слов далёкий. Решил попробовать дать права "принтеру". А где у нас принтер? В usb!
Недолго думая, в консоли:
lsusb
получаю среди прочего строчку:

Bus 001 Device 002: ID 03f0:3b17 Hewlett-Packard LaserJet M1005 MFP
отлично, вот он где. теперь нужно дать права на этот адресок (от рута пишем):
chmod 777 /dev/bus/usb/001/002
захожу в веб-интерфейс капса, перевожу принтер из состояния "приостановлен" в рабочее посредством пункта "возобновить печать". перезапускаю задание...
Ура, печатается! Дело за малым - настроить исполнение этой команды при загрузке (не писать же каждый раз перед печатью, если перезагружалась система)
Вписываю её в /etc/rc.local и сохраняю изменённый файл.

Всё, проблема решена :)
Надеюсь, кому-нибудь это поможет, т.к. сам в своё время прибил много времени на поиск и решение оной - с арча уходить не хотелось, а без рабочей печати не совсем удобно. Держать систему рядом или в виртуалке только для печати - совсем не хотелось.