From: Шлыков Василий (AKA VaSh) <vash@id.ru>
Subject: Повышение производительности в XWindow видеокарт Matrox
Предупреждение
Данная статья распространяется КАК ЕСТЬ, в надежде оказаться
кому-нибудь полезной. Так что автор не несёт ответственность за
спаленные видеокарты, лапти, валенки или другой ущерб приченённый в
результате попытки двинуть описанные ниже идеи в жизнь.
В свою очередь я, собственно, не претендую на первенство, а хочу лишь
поделиться найденным способом с народом.
'О чём у нас там самое был разговор шёл?'
(c) Не мой.
Данная статья посвящена повышению производительности видеокарточек
Matrox в X'ах (http://www.xfree.org/ XFree86 имеются ввиду).
К сожалению утилиты типа PowerStrip для *nix нет, и поэтому приходится
расчитывать на собственные силы(у кого они есть :-) ). Если заглянуть в manы,
посвященные в частности драйверам Matrox, то можно найти несколько
любопытных ключей, отвечающих за производительность карточки. Это, во
первых, параметр `AGPMode' с помощью которого можно настроить
пропускную способнось AGP шины. Кроме этого у Matrox'овских карточек
есть параметр `OverclockMem' про который, цитирую, сказано:
Set clocks to values used by some commercial X-Servers (G100, G200
and G400 only). Default: off.
И все :-( Но! Есть исходники драйверов Matrox'a :-). Если в них
заглянуть, то окажется, что он отвечает за установку частоты работы
GPU/памяти для видеокарт следующим образом:
CAPTION: Соответствие карта/режим -> частота
`OverclockMem' G100 G200 G400/G550 G400 MAX
GPU Mem GPU Mem GPU Mem GPU Mem
true - 143/220* - 143 125 166 150 200
false - 124/203* - 124 110 166 125 166
* При наличии памяти типа SDRAM
Как видно, по умолчанию G400 работают(по идее) на частоте меньшей, чем
положено :-/ Естественно возникает желание повысить частоту работы
GPU/памяти, тем более что ни в какие спецификации лазить не
приходится, всё уже готово. Итак, для этого нужно:
1. Исходники X'ов(Я правил в 4.3.0, но это не имеет значения, по
крайней мере, для 4.x.x)
2. gcc + make + other stuff ...
Собственно править нужно файл
xc/programs/Xserver/hw/xfree86/drivers/mga/mga_dacG.c Привожу для
удобства нужный нам кусок(с выброшенными ненужными кусками).
static Bool
MGAGInit(ScrnInfoPtr pScrn, DisplayModePtr mode)
{
/*
* initial values of the DAC registers
*/
const static unsigned char initDAC[] = {
/* 0x00: */ 0, 0, 0, 0, 0, 0, 0x00, 0,
...
MGA_NOT_HAL(
/* Allocate the DacRegs space if not done already */
if (pReg->DacRegs == NULL) {
pReg->DacRegs = xnfcalloc(DACREGSIZE, 1);
}
for (i = 0; i < DACREGSIZE; i++) {
pReg->DacRegs[i] = initDAC[i];
}
); /* MGA_NOT_HAL */
MGA_NOT_HAL(
/* must always have the pci retries on but rely on
polling to keep them from occuring */
pReg->Option &= ~0x20000000;
...
return(TRUE);
}
Таким образом, можно задать частоты работы G400 в режиме
`OverclockMem' равными, соответсвенно 150/200 MHz. Для этого копируем
соответствующий блок установок регистров из блока для G400 MAX. И все!
Кстати, обратите внимание на макрос MGA_HAL(...) (из mga_macros.h) он
исполняет код, переданный ему в скобках. Так что, если вы хотите чтобы
этот способ работал, либо вообще не грузите mga_hal_drv.o, либо
уберите этот код ТАМ ГДЕ НУЖНО. См. также MGAISGx50(...).
Для тех, кто не очень ориентируется во всём этом :-)
* Добываете исходники X'ов(лучше из любимого дистрибутива).
* Распаковываете в /usr/src (ну или куда там вам нужно).
* Ползёте в /...там где
нужно.../xc/programs/Xserver/hw/xfree86/drivers/mga
* Правите mga_dacG.c
* Переходите обратно в xc/ и запускаете 'make World' (править
никакие конфиги не надо)
* Для тех, у кого не 2.5+GHz/1Gb: Ждать окончания компиляции не
нужно, можно оборвать процесс когда начнётся, собственно,
компиляция.
* Снова идете в /...там где
нужно.../xc/programs/Xserver/hw/xfree86/drivers/mga, и если там
ещё ничего не скомпилировано, запускаете 'make'. Можно также
поправить Makefile на предмет '-fno-strength-reduce
-fещё-туева-хуча-всего' на '-fstrength-reduce
-fomit-frame-pointer'(ВЕЗДЕ!).
* Когда образуется файл 'mga_drv.o', скопируйте его в
'/usr/X11/lib/modules/drivers'.
Теперь можно править конфиг X-ов.
...
Section "Device"
Identifier "Matrox G400"
VendorName "Matrox"
Driver "mga"
Option "AGPMode" "4" # если вам это надо (и ПОДДЕРЖИВАЕТСЯ!)
Option "OverclockMem" "true" # за что боролись! (или как у вас там)
# + Ваши параметры
EndSection
...
Что касаемо benchmark'ов, то тут широкое поле для экспериментов...
Я юзал 'glxgears': (G400, 125/166->150/200) fps подросли на ~15-20%.
Да и QIII стал пошустрее Ж:-) ...
Шлыков Василий (AKA VaSh) <vash@id.ru>
344 Прочтений • [Повышение производительности в XWindow видеокарт Matrox (linux x xfree86 video tune)] [08.05.2012] [Комментариев: 0]