Witam!
Zrobiłem ciekawy eksperyment z przydzielaniem pamięci RAM (i być może nie tylko) dla operacji 3D w biosie i iksach. Nie tyle wydajność programów 3D interesowała mnie w tej chwili, co wolne miejsce w pamięci dla pozostałych programów.
Czy z tego co poniżej pokazałem wynika, że jeśli nie używam w danej chwili programów 3D, to niewykorzystana pamięć po prostu się marnuje i nie jest dostępna dla reszty?
Za tym idzie decyzja czy używać jednych ustawień środowiska Xorg do pracy z programami 3D, a drugich, gdy nie korzystam z takich programów, ale używam innych pamięciożernych (choćby GIMP). 256 MB pamięci to na tyle mało, że warto się pogłowić i powalczyć o każdy kawałek na różne sposoby. Nawet kompilacja dużych programów zdaje się schodzić do swapu z braku RAMu i oczywiście zwalniać, gdy jednocześnie część RAMu leżeć może odłogiem, bo przeznaczyłem je dla 3D.
Eksperyment robiłem za każdym razem w IceWM na konsoli aterm, na karcie Radeon 9000 (posiadającą 64 MB pamięci DDR) i otwartym sterownikiem jądra dla niej.
Na początku wyglądało to tak:
option "GARTSize" "64"
BIOS: AGP Aperture Size: 64
Xorg.0.log:
(II) RADEON(0): Using 64 MB GART aperture
(II) RADEON(0): Using 1 MB for the ring buffer
(II) RADEON(0): Using 2 MB for vertex/indirect buffers
(II) RADEON(0): Using 61 MB for GART textures
~ $ free
total used free shared buffers cached
Mem: 256896 229604 27292 0 12628 114584
-/+ buffers/cache: 102392 154504
Swap: 488840 80 488760
~ $ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 256MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=3
reg05: base=0xe0000000 (3584MB), size= 64MB: write-combining, count=2
Po wyłączeniu opcji "GARTSize" w xorg.conf:
Xorg.0.log:
(II) RADEON(0): Using 8 MB GART aperture
(II) RADEON(0): Using 1 MB for the ring buffer
(II) RADEON(0): Using 2 MB for vertex/indirect buffers
(II) RADEON(0): Using 5 MB for GART textures
~ $ free
total used free shared buffers cached
Mem: 256896 174516 82380 0 12332 114544
-/+ buffers/cache: 47640 209256
Swap: 488840 80 488760
~ $ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 256MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=3
reg05: base=0xe0000000 (3584MB), size= 64MB: write-combining, count=2
Zrobiłem restart i zmniejszyłem przydział pamięci RAM dla AGP poniżej GARTSize. Efekt: brak akceleracji 3D.
option "GARTSize" "64"
BIOS: AGP Aperture Size: "32"
Xorg.0.log:
(II) RADEON(0): [agp] 65536 kB allocated with handle 0x00000001
(EE) RADEON(0): [agp] Could not bind
(EE) RADEON(0): [agp] AGP failed to initialize. Disabling the DRI.
(II) RADEON(0): [agp] You may want to make sure the agpgart kernel module
...
testy-3d $ free
total used free shared buffers cached
Mem: 256896 107456 149440 0 5876 66592
-/+ buffers/cache: 34988 221908
Swap: 488840 0 488840
~ $ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 256MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=2
reg05: base=0xe0000000 (3584MB), size= 32MB: write-combining, count=2
Naturalnie, następnym krokiem było zmniejszenie GARTSize do 32 i restart iksów. Akceleracja wróciła.
Xorg.0.log:
(II) RADEON(0): Using 32 MB GART aperture
(II) RADEON(0): Using 1 MB for the ring buffer
(II) RADEON(0): Using 2 MB for vertex/indirect buffers
(II) RADEON(0): Using 29 MB for GART textures
~ $ free
total used free shared buffers cached
Mem: 256896 145116 111780 0 6692 69472
-/+ buffers/cache: 68952 187944
Swap: 488840 0 488840
~ $ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 256MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=3
reg05: base=0xe0000000 (3584MB), size= 32MB: write-combining, count=2
Ostatni wynik zachęcił mnie do jeszcze jednego eksperymentu: ustawienia w BIOSie "AGP Aperture Size" na maksimum równe 256 MB. Jest to z jednej strony cały mój RAM, z drugiej - granica możliwości mojej płyty głównej (MSI-6712, v. 1.0). Chcę zobaczyć czy te 256 MB może sobie potencjalnie czekać i czy rzeczywistą przydzieloną ilością mogę żonglować za pomocą ustawień iksów.
~ $ free
total used free shared buffers cached
Mem: 256896 135980 120916 0 5544 64784
-/+ buffers/cache: 65652 191244
Swap: 488840 0 488840
~ $ cat /proc/mtrr
reg00: base=0x00000000 ( 0MB), size= 256MB: write-back, count=1
reg01: base=0xd0000000 (3328MB), size= 128MB: write-combining, count=3
reg05: base=0xe0000000 (3584MB), size= 256MB: write-combining, count=2
Xorg.0.log:
(II) RADEON(0): Using 32 MB GART aperture
(II) RADEON(0): Using 1 MB for the ring buffer
(II) RADEON(0): Using 2 MB for vertex/indirect buffers
(II) RADEON(0): Using 29 MB for GART textures
ed: zrobiłem oprawę w tag CODE