пʼятниця, 20 листопада 2009 р.

Двохвидеокартная система на vaio

Как я уже писал, в моём vaio (как и во всех z серии) стоит две видеокарты: NVIDIA GeForce 9300M и Mobile Intel Graphics Media Accelerator 4500MHD. Windows Vista умеет динамически (без перезагрузки) переключаться между ними: работать на intel когда нужна длительная работа от аккумулятора или на nvidia когда нужна высокая производительность графики и/или hdmi выход. Переключение делается специальным переключателем stamina<->speed на ноутбуке. Текущий режим работы отображается светодиодом возле переключателя.
Так вот работает это дело в тесном сотрудничестве с драйверами висты. Точнее даже не так: переключатель просто сообщает висте "надо бы переключиться", после чего виста правильно пинает всё на предмет переключения. Естественно под другими операционками это не работает, даже под Windows XP оно работает частично: необходимо перезагружаться чтобы переключение вступило в силу.
Под FreeBSD же в pciconf отображаются обе видеокарточки, но реально работает только intel. На переключатель реакции никакой, оба индикатора режима не светятся, и судя по всему электричество жрут обе видеокарты.
Но после гугления по всяким другим поводам была найдена тема на ixbt, а в ней ссылка на разлочку Intel VT и advanced menu в EFI bios. Собственно Intel VT пока что интересен только потенциально на будущее, а вот advanced menu оказалось очень полезным: в нём была найдена опция "Video swtiching" со значением по умолчанию "dynamic" и возможностью переключиться в "static" и "automatic". И вот после переключения в "static" видеокарты стал переключать bios в процессе загрузки в зависимости от положения переключателя. При этом включается нужная видеокарта, светодиод режима, во FreeBSD видно только одна выбранная видеокарта, и при этом работает и Intel, и Nvidia. Переключателем можно щёлкать и после загрузки, но это ничего не меняет - переключение видеокарт выполняется только при перезагрузке (что меня вполне устраивает).
При работе на nvidia xrandr кроме lvds и vga (видимых и на intel) так же показывает dvi1 и dvi2. Очевидно один из них это hdmi выход, второй не известно (возможно просто не разведен). Но сходу подключенный к hdmi порту монитор не определился: по xrandr оба dvi продолжают писаться как "not connected". Вероятно нужно еще что-то правильно пнуть чтобы включить hdmi выход.
Для упрощения нарисовал себе скрипт, определяющий при загрузке какая сейчас включена видеокарта и подсовывающий нужный xorg.conf:

# cat /usr/local/etc/rc.d/video
#!/bin/sh
#
# PROVIDE: video
#

. /etc/rc.subr

: ${video_enable="NO"}
: ${video_configdir="/usr/local/etc/X11"}

name=video
rcvar=`set_rcvar`

start_cmd="video_start"

video_start()
{
if ! checkyesno video_enable
then
return 0
fi
if [ -L "${video_configdir}/xorg.conf" ]
then rm "${video_configdir}/xorg.conf"
fi
if ( pciconf -lv|fgrep -q 'Intel Mobile Graphic' )
then
echo "Changing video to Intel"
ln -s xorg.conf.sony.intel "${video_configdir}/xorg.conf"
else
echo "Changing video to nv"
ln -s xorg.conf.sony.nv "${video_configdir}/xorg.conf"
fi
}

load_rc_config ${name}
run_rc_command "$1"

По оценкам FreeBSD на intel время автономной работы больше минимум на 40 минут, чем на nvidia. Но все-равно обещаных 3+ часа автономной работы против обещаных виндой 5 часов немного расстраивают. Думаю что виндовс вытягивает за счет яркости подсветки (которая у меня во FreeBSD на максимуме и не регулируется) и за счет отключения питания с неиспользуемых устройств (dvd привод, firewire порт)

Немає коментарів: