Toon posts:

PCIe dma geheugen lokatie in fysiek geheugen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik heb een vraagje betreffende het alloceren van dma-geheugen voor een PCIe device in linux 64bit. Ik zou graag willen weten op welke CPU / Memorycontroller het dma-geheugen gealloceert wordt in een multiprocessor systeem. Daarnaast zou ik graag willen weten of ik de allocatie van dit geheugen kan beinvloeden en of het mogelijk is om de lokatie van dit geheugen in fysiek geheugen bij een andere CPU neer te leggen.

Het systeem wat ik gebruik heeft twee Intel Nehalem processoren aan boord die via de intel quick path interconnect [QPI] bus verbonden zijn. Beide processoren hebben 3GB DD3 RAM geheugen in hun memorybank. Verder hangt er aan de QPI bus nog een tylersburg IO hub die de PCIe addressering regelt.

Op dit systeem draai ik een 64 bit linux kernel op dit moment 2.6.26, het PCIe device wat ik aan wil spreken kent alleen 32 bit adressering. Voor maximale performance wil ik weten waar en hoe ik het dma-geheugen bij een bepaalde processor neer leg.

Samenvattend:
-1- Hoe kan ik weten waar dma-geheugen gealloceerd wordt in het fysieke geheugen
-2- Hoe en is het mogelijk om de allocatie te beinvloeden en zodoende te kunnen bepalen bij welke CPU dit geheugen gealloceerd wordt.

Ik hoop dat ik de vraag op de goede plek stel, zo niet weet iemand waar ik deze vraag wel kan/mag stellen.

Alvast bedankt,

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 26-01 13:48
Als ik jou was zou ik beginnen met het lezen van "Linux Device Drivers", te vinden op http://lwn.net/Kernel/LDD3, tenminste als je het zelf wilt sturen...

Overigens is lange tijd DMA 16 bit gebleven, 32 bit is nog redelijk "nieuw", dus "kent alleen 32 bit adressering" is al heel wat, maar welk niet-industrieel apparaat heeft momenteel al 4G nodig... :? Dan werk je al snel voor het CERN als je dat nodig hebt. Tegen de tijd dat je het hebt volgeschreven moet er toch ook al een aanzienlijk deel zijn uitgelezen.

Maar het antwoord op 1 is: de driver zal dat (moeten) weten, lees dus eens LDD en kijk in de kernel code zelf.
Voor 2 eveneens: de allocatie wordt door de kernel bepaald en kan dus daar worden beïnvloed, dus lees LDD en kijk in de kernel zelf...

Overigens is de 2.6.26 kernel wel erg gedateerd, het kan zijn dat deze nog geen 32bit DMA ondersteunt, volgens mij zit dat nog niet zo gek lang in de kernel of is er recent een flinke verbetering aangebracht.

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


Verwijderd

Topicstarter
Het is inderdaad voor een driver die gemaakt dient te worden, we hebben de kernel documentatie en LDD3 al bekeken en weten hoe we dma kunnen alloceren voor een pci-device.

De vraag is dus of er op een of andere manier inderdaad via de kernel achter valt te komen waar en bij welke processor dit geheugen gemapt wordt. De tylersburg chip heeft hier waarschijnlijk invloed op en wij zouden graag weten of we via de kernel er achter kunnen komen hoe deze mapping gebeurd en/of we hier via de kernel invloed op uit kunnen oefenen.

Was al bang dat het dieper in de kernel zoeken ging worden heb je misschien een hou vast wat een goed startpunt is?

Bedankt hoop dat jullie ons verder kunnen helpen

[ Voor 9% gewijzigd door Verwijderd op 08-07-2009 22:49 ]


  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 26-01 13:48
De ontwikkelaars op de Linux kernel mailing list zijn over het algemeen wel bereid je een duwtje in de goede richting te geven. Dus ik zou het daar ook eens proberen als ik jou was, dit is wel gespecialiseerd genoeg om daar je vraag te kunnen stellen. Wel zou ik je adviseren eerst een recentere kernel te installeren.

offtopic:
Ben wel benieuwd waar jij werkt en of ze nog mensen zoeken... ;)

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic