nouveau и reclocking
Уже довольно долгое время я использую nouveau и решил состряпать маленькую заметочку. На самом деле не все так плохо, как можно прочитать на различных форумах, а если Вы не игроман, то nouveau самое оно. Собственно какие преимущества Вы получите:
- KMS — штатное разрешение экрана в консоли, плюс шрифты будут четкими, а не размазанными как при использовании фрэймбуфера, а также мгновенное переключение между tty и X`ми;
- не нужно пересобирать nvidia драйвер после обновления ядра;
- меньшее потребление памяти.
Из недостатков можно выделить меньшую производительность (по сравнению с nvidia-блобом), немного большую нагрузку на процессор и возможно, работа вентилятора на полных оборотах.
Все эксперименты проходили на gentoo, но справедливы и для других дистрибутивов.
Для быстрой смены между nouveau и nvidia можно использовать следующий скрипт:
#test root
if [ `id -u` -ne 0 ]; then echo "You need be root"; exit 1; fi
#test arg
if [ $# -ne 1 ]; then echo "Usage: $0 <1> nvidia | <2> nouveau"; exit 1; fi
#args
ARGS=$1
#config files
BLACKLIST=/etc/modprobe.d/blacklist.conf
XORGCONFIG=/etc/X11/xorg.conf
case $ARGS in
nvidia|1)
echo "Update blacklist.conf"
sed s/nvidia/nouveau/ -i $BLACKLIST
echo "Update xorg.conf"
sed s/nouveau/nvidia/ -i $XORGCONFIG
eselect opengl set nvidia
exit 0
;;
nouveau|2)
echo "Update blacklist.conf"
sed s/nouveau/nvidia/ -i $BLACKLIST
echo "Update xorg.conf"
sed s/nvidia/nouveau/ -i $XORGCONFIG
eselect opengl set xorg-x11
exit 0
;;
*)
echo "Usage: $0 <1> nvidia | <2> nouveau"
exit 1
;;
esac
Внимание! nouveau должен быть собран модулем.
Конечно можно было бы переписать скрипт иначе, для «горячей» смены драйвера, но все-равно пришлось бы перезапускать иксы.
Если загружается nvidia, то используется uvesafb. Для этого в файл /etc/conf.d/modules:
и в файл /etc/modprobe.d/uvesafb.conf:
Конечно можно было добавить строчку в загрузчик к параметрам ядра
Тем самым мы обеспечим комфортные условия работы в консоли независимо от используемого драйвера. Теперь вернемся к настройке nouveau. Тут достаточно всего одного параметра nouveau.modeset=1, который включает поддержку KMS. Но руки чешутся еще что-нибудь настроить, и можно добавить еще nouveau.perflvl_wr=7777, чтобы можно было вручную менять performance level, а для фиксации добавить nouveau.perflvl=2. Также эти параметры можно разместить в /etc/modprobe.d/nouveau.conf
options nouveau nouveau.perflvl_wr=7777
# Если хотите указать performance level
# этот параметр лучше указывать в загрузчике
options nouveau perflvl=2
#на случай возникновения проблем с tty
#options nouveau nofbaccel=1
Теперь давайте посмотрим как обстоят дела на самом деле.
mesa-9999
libdrm-9999
xf86-video-nouveau-9999
xorg-server-1.12.0 # и тут проверю на 9999
kernel-3.4.0-rc5
Смотрим какие доступны режимы.
profile: 2, 2
c: core 500MHz shader 1000MHz memory 399MHz voltage 1090mV
0: core 169MHz shader 338MHz memory 100MHz voltage 900mV fanspeed 100%
1: core 275MHz shader 550MHz memory 250MHz voltage 900mV fanspeed 100%
2: core 500MHz shader 1000MHz memory 400MHz voltage 1090mV fanspeed 100%
3: core 640MHz shader 1600MHz memory 500MHz voltage 1200mV fanspeed 100%
Для смены режима необходимо:
На kernel-3.3 работают 0 и 1, а на kernel-3.4 0, 1 и 2.
В итоге glxgears показал следующие результаты:
core 275MHz ~ 630 FPS
core 500MHz ~ 1000 FPS
nvidia-drivers ~ 4000 FPS
Чтобы зафиксировать результат добавил следующие параметры в загрузчик:
Кстати, nvidia-drivers не собирается с kernel-3.4, для успешной сборки посмотрите сюда.
Подводя итоги, nouveau обеспечивает вполне приемлемый уровень производительности, и в нормальных условиях вообще не наблюдается каких-либо глюков и тормозов. Без проблем позволяет играть, например, в urbanterror, но для более тяжелых игр скорее всего понадобятся nvidia-drivers.
Разгон на свободных дровах ещё невозможен?