Jest WYSOCE wskazane sprawdzenie, czy rejestry MTRR są ustawione prawidłowo, ponieważ mogą dać duży wzrost wydajności.
Wykonaj cat /proc/mtrr:
--($:~)--
cat /proc/mtrr
reg00: base=0xe4000000 (3648MB), size= 16MB: write-combining, count=9
reg01: base=0xd8000000 (3456MB), size= 128MB: write-combining, count=1
Widać mojego Matroksa G400 z 16MB pamięci. Wydałem tę komendę z XFree 4.x.x, które ustawiają MTRR automatycznie.
Jeżeli nie zadziałało, trzeba to ustawić ręcznie. Przede wszystkim musisz znaleźć adres bazowy. Możesz to zrobić na 3 sposoby:
z komunikatów startowych X11, na przykład:
(--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000 (--) SVGA: Linear framebuffer at 0xD8000000
z /proc/pci (użyj polecenia lspci -v):
01:00.0 VGA compatible controller: Matrox Graphics, Inc.: Unknown device 0525 Memory at d8000000 (32-bit, prefetchable)
z komunikatów sterownika mga_vid w jądrze (użyj dmesg):
mga_mem_base = d8000000
Znajdźmy teraz rozmiar pamięci. Jest to bardzo łatwe, po prostu zamień rozmiar RAMu na karcie graficznej na system szesnastkowy lub użyj tej tabelki:
1 MB | 0x100000 |
2 MB | 0x200000 |
4 MB | 0x400000 |
8 MB | 0x800000 |
16 MB | 0x1000000 |
32 MB | 0x2000000 |
Znasz już adres bazowy i rozmiar pamięci. Ustawmy więc rejestry MTRR!
Na przykład dla powyższej karty Matrox (base=0xd8000000
)
z 32MB RAMu (size=0x2000000
) po prostu wykonaj:
echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr
Nie wszystkie procesory obsługują MTRR. Na przykład starsze K6-2 (jakieś 266MHz, stepping 0) nie obsługują MTRR, ale stepping 12 już tak (wykonaj cat /proc/cpuinfo aby sprawdzić).