вторник, 6 января 2009 г.

Тестирование Intel GMA 900 на EEE PC 901

Продолжаю серию тестов нетбука Asus EEE PC 901. В предыдущей заметке написано как завести все это железо в рамках Gentoo Linux. Теперь самое время провести тесты видеокарты, результаты которых должны быть интересны в свете последних событий в развитии драйвера xf86-video-intel и интеграции в него новых фитч, повышающих его производительность и стабильность. Наибольший интерес представляет поддержка системы управления памятью GEM (Graphics Execution Manager), ибо уже подоспело ядро linux-2.6.28 и вполне юзабельным стал разрабатываемый xorg-server-1.6.0.
И так преступим. Установим xorg-x11-7.4 ( xf86-video-intel-2.5.1-r1, xf86-input-synaptics-0.99.3 и xorg-server-1.5.3), проконтролировав что установлены USE-флаги dri,hal,xv,xvmc, убран флаг SSE2 дабы не обновлять gcc до 4.3 и glibc до 2.9, а также устройства intel, vesa, synaptics, evdev, keyboard,mouse . Сразу стоит оговориться, что на сегодня по части производительности все что выше xorg-server-1.3 оставляет желать лучшего, но так как все-таки нетбук предъявляет дополнительные требования по функционалу, например, подключение устройств ввода/вывода "налету", придется закрыть на это глаза.
Убеждаемся что syslog-ng, acpid, sshd и hald будут стартовать автоматом при загрузке и перезагружаем подопытного для чистоты эксперимента. Заходим по ssh пользователем root и стратуем с пустым xorg.conf- starx. Смотрим что нам говорят glxinfo и glxgears: failed to initialize TTM buffer и direct rendering: Yes, 60FPS всреднем (что значит включен VSinc). Каких либо серьезных тестов проводить не буду, ибо уже 100 раз тестировалось. Мне главное убедиться, что от всех этих новых штучек будет прок в простых задачах: 2D, Video, простые OpenGL игры.
Теперь выполним более реальный тест, оценив производительность тулкита GTK. Сразу оговорюсь, для отрисовки шрифтов будут использоваться патчи из оверлея bobrik-cleartype, дабы на LCD шрифты смотрелись не так страшно (особенно когда есть с чем сравнивать). Устанавливаем gtkperf-0.4, gtk+-2.12.11, cairo-1.8.6-r1(glitz opengl) и запускаем очередную серию тестов. Получаем Total time: 16.86. Крутим опции драйвера видюхи следующим образом:
Section "Device"
Identifier "Configured Video Device"
Option "AccelMethod" "UXA"
Option "Tiling" "No"
EndSection
Все, запускаем опять gtkperf и видиим. Total time: 303.83. В целом все медленнее незначительно, но львиная доля уходит на:
GtkDrawingArea - Lines - time: 264.64
GtkDrawingArea - Circles - time: 10.72
GtkDrawingArea - Text - time: 12.25
Что то не ладно с новым методом акселерации (UXA), возможно надо mesa и xorg-server посвежее. Теперь посмотрим на поддержку 3D. Серьезные тесты гонять нет смысла хотябы потому, что это железо не предназначено для таких задач. Ограничимся запуском игрушки games-action/extreme-tuxracer. Пока не будем шаманить с 3D (например, забудем о force_comptex_s3tc.so), посотмрим дефолтовую производительность. Как оказалось смотреть не начто: в full-screen при 1024x600 оно не играбельно. Ну что же, если брать релизные версии софта, то Intel GMA900 не годится для игровых приложений, разве только для ускорения видео и Compiz. Скорее всего тут где-то что-то не так, но большого желания искать узкое место нет, лучше посотмреть что ожидается в следующем xorg-server, а вместе с ним и драйвер 2.6, GEM, обновленный libdrm и ядро со свежим DRM-модулем.
Добавим оверлей X11 и возьмем от туда следующие компоненты, попутно обновятся pixman и randr:
x11-proto/inputproto-9999
x11-libs/libdrm-9999
media-libs/mesa-9999
x11-base/xorg-server-9999
x11-drivers/xf86-video-intel-9999
x11-drivers/xf86-input-mouse-9999
x11-drivers/xf86-input-keyboard-9999
x11-drivers/xf86-input-evdev-9999
x11-drivers/xf86-input-synaptics-9999
x11-proto/dri2proto-9999
Опционально можно обновить и эти библиотеки(я не стал пробовать), однако есть риск словить нестыковки с другими библиотеками такими как cairo и gtk :
x11-proto/xproto-9999
x11-proto/xcb-proto-9999
x11-libs/libxcb-9999
x11-libs/libX11-9999
Смотрим на результаты gtkperf: Total time: 15.77. Уже не плохо. Включаем метод акселерации графики UXA(tiling теперь не нужно отключать) и получаем первую прибавку: glxgears выдает 259FPS. Походу Vsync теперь отключен в Mesa (чето такое я видел в лога репозитария на тему еще недопиленого UXA). А вот gtkperf дает осечку, хотя не такую страшную: Total time: 18.21. Кстати стоит заметить отсутсвие ругани на TTM buffer, значит GEM работает. Также судя по логам DRI2 тоже работает. Запустим нашу игру etracer: вау!, в 2 раза быстрее, теперь выдает 3FPS вместо прежних 1.5FPS. Вот они обещанные 50%, :) надо будет подумать может где загвоздка, но пока это не суть важно. Можно конечно попробовать снапшот ядра drm-intel. Насколько я понял, в ветке drm-intel-next ведутся основные разработки по необходимым нам модулям drm. Однако посмотрел логи, серьезных изменеий относительно производительности я не заметил, только фиксы и поддержка kernel-videomodeset.
Ну пожалуй до полной картины осталось протестировать воспроизведение видео. О наличи в каком либо плеере/библиотеки/драйвере аппаратной поддержки декодирования видео(как например у nvidia) на видюхах Intel я не знаю(). Поэтому сделаю просто: установлю mplayer-9999 из оверлея berkano. i8x0 xvmc у меня не заработало, что бы я не прописывал в /etc/X11/XvMCConfig: libIntelXvMC.so.1 или libI810XvMC.so.1:
localhost ~ # cat /var/log/Xorg.0.log | grep XvMC
(**) intel(0): Option "XvMC" "true"
(==) intel(0): Intel XvMC decoder disabled
Значит сломано до сих пор или както по другому включается(когда включится то можно будет проверить на xine-lib). Теперь пробуем различные видео записи(с оглядкой что просмотр идет по 100мбит сети). В качестве примеров несколько файлов наугад: big_buck_bunny_1080p_surround.avi (1Gb), Stargate.The.Ark.Of.Truth.2008.1080p.HDTV.x264-hV_RUS_ENG.mkv (7Gb), и несколько простых фильмов. Без Direct Rendering (опция -dr, не путать с DRI) смотреть почти все(заисключением широкоэкранных фильмов низкого разрешения) некомофртно: заметны дерганья картинки во многих сценах. Самый быстрый(и единственный комофртный) вывод видео через Xvideo. OpenGL и особенно Textured video(gl2) в данном случае оказались мало пригодны для просмотра тоже. Особенно разницу видно на "Звездных вратах": на XVideo идет дерганое видео и звук, на GL и GL2 все начинает тормозить начиная с заставки "со львом", сам фильм же уже нельзя назвать дерганый, он уже рваный. Да и вывод через gl/gl2 не сильно разгружает проц: от 5 до 15% разницы.

Подитожу выше сказанное: большого толка от этих карточек с ускорением нет - уж слишком занижены частоты и медленный обвяз. XvMC не понятно как включать, возможно оно не хочет заводиться с DRI2. Вцелом, драйвер intel-2.5 поправил баги накопившиеся, какой либо эффект от UXA в сравнении EXA в области 2D особо не наблюдается, даже наооборот. Получается, если не нужно 3D вообще, то можно смело забить на GEM, по части Xvideo это мало чем поможет. Тут два выбора: если необходим функлионал XRandR, XOrg.Hotplug то нужно смотреть в сторону xorg-server-1.5/1.6 и всех этих плюшек, в противном случае смело откатываться на xorg-server-1.3 и не париться. Как мне кажется, нужно подождать первых ласточек 2.6.29, к тому времени в нем возможно улучшат Intel DRM, да и libdrm, intel-2.6 и xorg-server-1.6 возможно подшаманят.

воскресенье, 4 января 2009 г.

Свой linux на EEE PC 901

Отгремели новогодние салюты, улицы опустели, народ начал отдыхать от праздников. Я решил тоже посвоему отдохнуть, достав месяц лежавший новенький небук ASUS EEE PC 901 с чемто нечто неюзабельным под названием Xandros.
Идея была изначально прикрутить к нему Debian так как в рамках проекта DebianEeePC идет активная работа, однако лень взяла свое и чисто из академического интереса я начал пробовать на нем Gentoo, решив для начала потестировать на нем linux-2.6.28.
Дабы не утруждать себя занудными процессами компиляции на Intel Atom, скачал stage3-i686-20081224.tar.bz2, распаковал его на домашнем компе, "зачрутился" туда, добавил в make.conf оптимизации компилятора(march=prescott и -fomit-frame-pointer), подкрутил USE-флаги, размаскировал linux-headers-2.6.28-r1 и gentoo-sources-2.6.28 и отправил в недолгий путь emerge -vuND @system.
Теперь самое время подумать о загрузке всего этого пробного добра на малыше EEE PC. RSinc'акть rootfs после каждого чиха на него как-то не сруки, поэтому ставим на домашний комп net-misc/dhcp, net-ftp/tftp-hpa и net-fs/nfs-utils-1.1.4 что позволит экспортировать rootfs по сети через NFSv3, а также грузить ядро по сети через PXE.
Теперь собираем ядро 2.6.28 в подоспевшем chroot'е для EEE PC 901. Ключевые моменты конфига ядра таковы: --->
  1. Processor family (Pentium-4/Celeron(P4-based)/Pentium-4 M/older Xeon)
  2. Symmetric multi-processing support и SMT (Hyperthreading) scheduler support (для BIOS'ов с поддержкой Hyperthreading)
  3. Не включаем в ACPI ASUS/Medion Laptop Extras
  4. PCI Express support и модулем PCI Express Hotplug driver
  5. Networking support--->Networking options--->IP: kernel level autoconfiguration--->IP: DHCP support
  6. Все протоколы для bluetooth и драйвер HCI USB driver тамже
  7. Для wifi Generic IEEE 802.11 Networking Stack (mac80211) и сопутствующие опции
  8. RF switch subsystem support и Input layer to RF switch connector
  9. В Device Drivers: Misc devices--->Eee PC Hotkey Driver (данная опция появится после включения некоторых нежеследующих пунктов), Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support, Atheros L1E Gigabit Ethernet support, Wireless LAN (IEEE 802.11), модулем Ralink driver support на всякий случай,
  10. Input device support---> Mice---> PS/2 mouse---> Elantech PS/2 protocol extension
  11. I2C support --->Intel 82801 (ICH)
  12. Hardware Monitoring support модулем
  13. Video For Linux--->Enable Video For Linux API 1 compatible Layer модулем, и тутже V4L USB devices--->USB Video Class (UVC)--->UVC input events device support
  14. Direct Rendering Manager--->i915 driver
  15. Backlight & LCD device support--->Lowlevel LCD controls и Lowlevel Backlight controls
  16. Framebuffer Console support и Support for frame buffer devices--->Intel 830M/845G/852GM/855GM/865G/915G/945G/945GM/965G/965GM support
  17. Модулями ALSA и Intel HD Audio (пока не понтно о полной поддержке этой версией, например по части микрофонов)
  18. Generic HID support и USB Human Interface Device
  19. USB модулем, EHCI, UHCI, USB selective suspend/resume and wakeup, The shared table of common (or usual) storage devices(и запомнить об этом на будущее когда тестировать кардридер)
  20. LED Support, Real Time Clock--->PC-style 'CMOS'
  21. В ядро NFS client support--->NFS client support for NFS version 3 и Root file system on NFS, отключить обязательно Register local RPC services via rpcbind v4 дабы не словить проблему на 2.6.28.
Вот общий конфиг ядра, который будет грузиться на нетбуке. Полный рабочий конфиг, как и некоторые другие лежат по ссылке в архиве абзацем ниже. Также там есть патч для ядра, который решает проблему невозможности включения bluetooth.
Теперь самое время настроить удаленную загрузку по сети. Настраиваем DHCP, чтобы тот отавал IP из диапазона(у меня привязки к MAC нет, так по dhcp получает IP только netbook) и отадвал опции root-path на nfs с нашим chroot'ом и параметр filename на загрузчик pxelinux.0. Теперь настраивает tftp-server, я в конфиге указал корень на /var/tftp, положил туда ядро скомпиленное нами, pxelinux.0 и pxelinux.cfg с единым конфигом для всех. Самым вредным оказался nfsd, точнее баг в 2.6.28 ядре: необходимо чтобы опция Register local RPC services via rpcbind v4 была отключена (как впрочем на всякий случай и все остальны касательно ACL, NFSv4 и авторизации). Все, теперь экспортируем наш chroot под видом например таким: /mnt/hd1 192.168.2.20(sync,rw,no_root_squash,no_all_squash). Все сетевая загрузка готова. Архив с конфигами для тех кто плавает в этом вопросе тут.
Тут возникает проблема: baselaout не приспособлен для корня на nfs, поправить это не так сложно, но всетаки проще поставить baselayout2, отказаться от паралельной загрузки сервисов(что по умолчанию) и сразу ядру при загрузке по сети передавать что корень доступен на rw.
В результате получаем рабочую систему для тестирования железа и обкатки скриптов, wifi итд с консоли EEEPC(или по ssh), а также chroot на рабочем компе, в котором можно находится паралельно и ставить всеь необходимый софт без оглядки на ущербность проца.
Теперь потестируем работоспособность железа. Дрова на беспроводную карту(в моем случае это не atheros) за отсутствием их в ядре берем из оверлея arcon - net-wireless/ralink-rt2860. Прописываем в /etc/conf.d/modules автоматическую загрузку модуля pciehp, в /etc/modprobe.d/pciehp пишем options pciehp pciehp_force=1 и делаем update-modules. Устанавливаем sys-power/acpid. Все, перезагружаемся. Наблюдаем очередной сюприз в baselayout, как uevets думает некоторое время и в ключает без особой просьбы bluetooth и wifi. Убеждаемся что модуль ядра pciehp и eeepc_laptop подгружены. Если нет, то надо думать где ошиблись. Ставим sys-apps/pciutils и sys-apps/usbutils.
Теперь, чтобы включать/выключать wifi и bluetooth, смотрим в /sys/class/rfkill/rfkillX/name кто есть кто и посылаем туда 1 или 0 соотвественно(echo 0 > /sys/class/rfkill/rfkill0/state). С камерой маленько по другому но суть таже: echo 1 > /sys/devices/platform/eeepc/camera. После этих манипуляция можно при помощи нехитрых команд lspci, lsusb, dmesg, lsmod убедиться что устройства появляются-пропадают. Убедится в работоспособности звука легко, пока только особо не разбирался почему микшер не показывает регулировки для микровофона. До кардридера пока руки не дошли.
Следующим шагом будет приведение к 2.6.28- и gentoo-особеностям скриптов из серии eeepc-acpi-scripts а также тестирования нового драйвера x11-drivers/xf86-video-intel с mesa из свежего снапшота на предмет выявления какого-либо значимого ускорения от GEM. Также интересно выглядит перспектива потестить новый xf86-input-synaptics-0.99.3 на предмет поддержки каких либо особенностей родного драйвера для тачпада. На соновании чего можно будет сделать вывод - стоит ли писать скрипт для генерации из gentoo-chroot образа без всяких dev-штучек для EEEPC со всякими "извращенно-эффективными" файловыми системами/разделами или же затраты на его создание перекроют затраты сил
на перетаксивание и адаптацию и устаканивание в debian lenny свежих X.org, быстрый parallel-init, свежее ядро, что в перспективе дальнейше работы со всем этим не кажется столь радужным.