Ramdysk na karcie graficznej

10 kwi 2010
Author Avatar Godzina : 21:06 Komentarzy : 27 Odsłon : 981
QR Code

Konfigurując nowy serwer, doszedłem do wniosku, że pamięc karty graficznej praktycznie będzie nie wykorzystana. A skoro już jest, to dlaczego z niej nie skorzystać? Jedynym sensownym rozwiązaniem było wykorzystanie tej przestrzeni jako szybki ramdysk.

Pierwsze co musimy zrobić to poznać adres szyny PCI w której podpięta jest nasza karta.

# lspci | grep VGA
01:00.0 VGA compatible controller: ATI Technologies Inc RV710 [Radeon HD 4350]

Kolejnym krokiem jest określenie początkowego adresu pamięci oraz jego rozmiaru możliwego do zmapowania przez procesor.

# lspci -vvv -s 01:00.0 | grep prefetchable
Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]
Region 2: Memory at fbce0000 (64-bit, non-prefetchable) [size=64K]

W ten sposób znamy początkowy adres 0xd0000000 oraz rozmiar 256MB.

Na prymitywne potrzeby postanowiłem jednak zachować 32MB (0x02000000).  Stąd też, naszym adresem początkowym będzie 0xd2000000 - z czego zostaje nam 224MB na nasz ramdysk :

# modprobe phram phram=VRAM,0xd2000000,224Mi

Sprawdzamy.

# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 0e000000 00001000 "VRAM"

Gra kapela. Czas na załadowanie modułów mtdblock, który umożliwi nam wykorzystanie mtd jako urządzenia blokowego oraz modułu jffs2, który najlepiej nada się jako system plików dla tego typu urządzenia.

# modprobe mtdblock
# modprobe jffs2

Pozostało już tylko sformatowanie oraz podmontowanie

# mkfs -T jffs2 /dev/mtdblock0
# mkdir /mnt/vram
# mount /dev/mtdblock0 /mnt/vram

Na koniec sprawdzamy czy wszystko przebiegło OK i możemy cieszyć się szybkim ramdyskiem.

# df --si | grep mtdblock
/dev/mtdblock0         232M   132k   220M   1% /mnt/vram

Jak szybko może być ?

# hdparm -t /dev/mtdblock0
/dev/mtdblock0: Timing buffered disk reads:  224 MB in  0.03 seconds = 6422.75 MB/sec

# hdparm -T /dev/mtdblock0
/dev/mtdblock0: Timing cached reads:   17666 MB in  2.00 seconds = 8842.62 MB/sec

Niestety nie ma róży bez kolców - opisana metoda nie będzie działać jeśli wykorzystujemy zamknięte sterowniki ATi / NVidia. Dlatego decyzję trzeba podjąć indywidualnie.

Komentarze

User Avatar

Pigi / 10 kwiecień 2010 - 22:13

Wow! Swietne! A do czego teraz to wykorzystasz? Jakis cache? Bufor? Tak tylko strzelam, bo to naprawde ciekawe co zrobiles.

83.9.91.* / Windows XP / Mozilla Firefox 3.6.3

User Avatar

rozyk / 10 kwiecień 2010 - 23:17

Jestem pod wrażeniem. Brawo!

Mam tylko pytanko jedno.

Mógłbyś napisać co należy wykonać w razie chęci powrócenia do starych ustawień?

Bardzo dziękuję.

87.239.216.* / Linux Ubuntu / Mozilla Firefox 3.5.9

User Avatar

joseph / 10 kwiecień 2010 - 23:22

hm... no a ja zawsze mówiłem, po co w serwerze dobra karta graficzna...
Jak widać, czas zweryfikować swoje poglądy ;)

Linux x86_64 / Mozilla Firefox 3.6.3

User Avatar

Korneliusz / 10 kwiecień 2010 - 23:27

@Pigi: Zastosowań kilka - kopia /bin /sbin, jakiś zasobożerny site :) zawsze się przyda

@rozyk: restart, albo umount i rmmod modułów

@joseph: ta karta kosztowała 120,00 :> tylko nie wykimałem jeszcze jak dobrać się do drugiego 256MB :(

Linux / Mozilla Firefox 3.6.3

User Avatar

rozyk / 10 kwiecień 2010 - 23:31

Dziękuję:) Drugie 256MB?:)

87.239.216.* / Linux Ubuntu / Mozilla Firefox 3.5.9

User Avatar

Korneliusz / 10 kwiecień 2010 - 23:32

tak, karta ma 512MB

Linux / Mozilla Firefox 3.6.3

User Avatar

rozyk / 10 kwiecień 2010 - 23:36

To dziwne u mnie pokazuje się od razu cała pamięć przy lspci.

87.239.216.* / Linux Ubuntu / Mozilla Firefox 3.5.9

User Avatar

Grzegorz / 11 kwiecień 2010 - 00:34

A nie jest czasem tak, że Radeon HD 4350 posiada 256mb swojej pamięci a drugie 256mb może być zaadresowane z ramu kompa wykorzystując technologię Hypermemory? Bo o ile się nie mylę to tak właśnie jest...

89.77.138.* / Windows Seven / Safari 533.4

User Avatar

fanthom / 11 kwiecień 2010 - 01:09 Favour Comment

stare jak swiat:
http://www.gentoo-wiki.info/TIP_Use_memory_on_video_card_as_swap

pozdrawiam

unknown @ 84.203.38.* / Linux Gentoo / Mozilla 1.9.2

User Avatar

Korneliusz / 11 kwiecień 2010 - 02:24

@fanthom " Nikt nie mówi, że Amerykę odkryłem :)

Linux / Mozilla Firefox 3.6.3

User Avatar

fanthom / 11 kwiecień 2010 - 08:16

@Korneliusz
jesli nie linkujesz do zrodla to zakladac mozna ze jestes autorem rozwiazania (co polowa komentujacych wlasnie zrobila). W tym przypadku 'credits should go to' kogos innego.

(sory ze tak naskakuje, fajny blog itd. ale w tym przypadku sie nieco zmierzilem)

pozdrawiam

unknown @ 84.203.38.* / Linux Gentoo / Mozilla 1.9.2

User Avatar

gedgon / 11 kwiecień 2010 - 10:40

fanthom, niszczysz swiatopoglad przynajmniej polowy czytelnikow tego bloga ;))

Linux / Safari 533.5

User Avatar

Korneliusz / 11 kwiecień 2010 - 11:34

@fanthom: co Ty bredzisz? przesadzasz lekko - gdybym pokazał jak się montuje dysk ntfs, również źródłem byłby man monunt.ntfs-3g ? To są ogólno dostępne informacje, chociażby dokumentacji modułów i sposobu ich wykorzystania. Bo to co akurat podałeś, żadnym moim źródłem nie było - chociażby z faktu, że tam jest wykorzystanie jako swap.

@gedgon: mój Ty wierny "fanie" :)

Linux / Mozilla Firefox 3.6.3

User Avatar

joseph / 11 kwiecień 2010 - 11:35

@Korneliusz: nie chodziło mi o to czy karta droga czy tania, ale do serwera (tryb tekstowy) jak wiadomo spokojnie wystarcza taka, co ma 8MB i tryb 800x600; a tu proszę duży cache, z zawrotną prędkością ;)

Linux x86_64 / Mozilla Firefox 3.6.3

User Avatar

fanthom / 11 kwiecień 2010 - 16:10

@Korneliusz
skoro "Ameryki nie odkrywasz" tylko wklejasz "ogólno dostępne informacje". To jaki jest sens pisania o tym? Chodzi o tlumaczenie na jezyk polski?

Roznica miedzy wykorzystaniem podanego zastosowania w linkownym artykole i Twoim sprowadza sie do dwoch komend:

Tam jest:
"mkswap /dev/mtdblock0
swapon /dev/mtdblock0"

a u Ciebie:
"# mkfs -T jffs2 /dev/mtdblock0
# mount /dev/mtdblock0 /mnt/vram"

LOL

unknown @ 84.203.38.* / Linux Gentoo / Mozilla 1.9.2

User Avatar

Korneliusz / 11 kwiecień 2010 - 16:20

Pozwól, że sam będę decydował jaki jest sens. Jak się okazuje - nie każdy jest taki biegły jak Ty - dla niektórych to coś nowego. Analogicznie można było napisać how-to jak się montuje cdrom, różnica w opisie mogłaby być tylko w punkcie montowania. I co z tego? Może od dziś będę z Tobą konsultował na zasadzie :

- znasz to ?
- znam ...
- e to nie publikuję.

Żal i eot.

Linux / Mozilla Firefox 3.6.3

User Avatar

Mariusz Zdyb / 11 kwiecień 2010 - 16:53

Niektorzy maja tu jawny problem ze zrozumieniem tekstu pisanego.
fanthom: Nigdzie nie uzyto tutaj sformuwoania "Znalazlem sposob", "Wynalazlem sposob", "Odkrylem sposob"... Korneliusz wyraznie napisal, jak wykorzystal pamiec VRAM na wlasny uzytek. Nie rozumiem skad te bicie piany. Ja sam slyszalem o tej metodzie, ale nigdy nie mialem okazji widziec jak to wyglada od strony wkonowaczej. Pozatym to jest blog do jasnej cholery, a nie portal dla geekow. Chwala za to, ze sa blogi na ktorych poczatkujacy dowiedza sie czegos nowego. Tak wiec mistrzu... krzyz na droge w czytaniu commit logow kernela.

66.249.65.* / Windows Seven / Mozilla Firefox 3.5.9

User Avatar

DeeTah / 11 kwiecień 2010 - 19:17

Dzięki, może się przydać.

83.26.182.* / Linux Ubuntu / Mozilla Firefox 3.5.8

User Avatar

Robert / 11 kwiecień 2010 - 21:29

Ciekawe :) Nie wiedziałem że można tak wykorzystać pamięć karty graficznej.
Jeśli mam zamknięte serowniki nvidi to nie ma szans uruchomienia tego u mnie?

Linux / Mozilla Firefox 3.6.2

User Avatar

b00rt00s / 12 kwiecień 2010 - 02:08

A co mam zrobić, żeby wykorzystać pamięć karty intel 4500 MHD? :D:D:D:D

89.73.79.* / Linux x86_64 / Mozilla Firefox 3.6.3

User Avatar

Mirek / 12 kwiecień 2010 - 09:02

Jeśli chodzi o korzystanie z tego na serwerze, to raczej kwestia używania zamkniętych sterowników odpada - no bo po co komu :)

83.14.220.* / Linux x86_64 / Mozilla Firefox 3.5.8

User Avatar

xeros / 12 kwiecień 2010 - 09:58

Super! Już widzę dobre zastosowanie do tego jako miejsce na cache proxy www albo kolejki serwera poczty (w końcu mail zanim dotrze do skrzynki jest analizowany przez conajmniej kilka narzędzi) - po co zajeżdżać dysk skoro można kartę graficzną :-)

83.18.144.* / Linux x86_64 / Safari 533.5

User Avatar

Zajec / 12 kwiecień 2010 - 19:48 Favour Comment

Dalszej pamięci raczej nie zaadresujesz bez pisania odpowiedniego sterownika. Możesz poczytać o obsłudze większych pamięci przez radeon, kilka razy było poruszane.

62.21.3.* / Linux / Opera 10.10

User Avatar

Korneliusz / 12 kwiecień 2010 - 20:57

Dzięki Zajec za info

Linux / Mozilla Firefox 3.6.3

User Avatar

misiuuu / 13 kwiecień 2010 - 00:58

@fanthom
a czy ty wymyśliłeś słowo "linkujesz"? Podaj źródło! Ukradłeś czyjąś prace!

89.231.126.* / Windows Seven / Mozilla Firefox 3.6.3

User Avatar

Itachi / 13 kwiecień 2010 - 17:25

Proszę o więcej takich postów :-)
Bardzo ciekawy artykuł.

Gdyby wymyślił Pan, jak dostać się do pozostałej pamięci, proszę o informację...
Mój GF ma 1Gb Pamięci własnej, a też pozwala się dobrać jedynie do 256mb.
[root@localhost /]# lspci -vvv -s 02:00.0 |grep Mem
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at e0000000 (64-bit, prefetchable) [size=256M]
Region 3: Memory at f8000000 (64-bit, non-prefetchable) [size=32M]

83.30.107.* / Linux / Konqueror 4.4

User Avatar

Tomahawk / 13 kwiecień 2010 - 21:24

Nie lepiej za cenę tej karty dokupić RAM-u? Szkoda takiej karty do serwera.... No i jeszcze niepotrzebnie się grzeje i pobiera prąd :P

83.22.46.* / Linux x86_64 / Mozilla 1.9.2

Komentarze

Jeżeli się nie zalogujesz, przy Twoim komentarzu pokaże się adres IP.
Zanim skomentujesz, zapoznaj się z zasadami dodawania komentarzy.

Ostatnie 10 wpisów

Ostatnie 5 komentarzy

Facebook

Kategorie

Archiwum

Blogroll

Flag Counter

free counters