4.1. Ustawianie MTRR

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:

  1. z komunikatów startowych X11, na przykład:

    (--) SVGA: PCI: Matrox MGA G400 AGP rev 4, Memory @ 0xd8000000, 0xd4000000
    (--) SVGA: Linear framebuffer at 0xD8000000

  2. 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)

  3. 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 MB0x100000
2 MB0x200000
4 MB0x400000
8 MB0x800000
16 MB0x1000000
32 MB0x2000000

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ć).