OVH Cloud OVH Cloud

mmap ou shmem ?

4 réponses
Avatar
Kakrocq
bonjour,
je voudrais avoir de la mémoire partagée ( 100Ko environ) entre un
process utilisateur et un module pilote PCI.
j'ai vu qu'on peut le faire soit par mmap soit par shmem ,
quel est la meilleur solution en terme de performance.

4 réponses

Avatar
DINH Viêt Hoà

bonjour,
je voudrais avoir de la mémoire partagée ( 100Ko environ) entre un
process utilisateur et un module pilote PCI.
j'ai vu qu'on peut le faire soit par mmap soit par shmem ,
quel est la meilleur solution en terme de performance.


une fois la zone mémoire initialisée (avec mmap et shmem), les
mécanismes sous-jacent sont les mêmes donc, les performances très
proches (voire identiques).
mmap() est cependant la solution la plus propre et la plus hype.

--
DINH V. Hoa,

"tu as bientot 15 ans, faut que tu commences à être autonome" -- jul

Avatar
l'indien
On Wed, 02 Feb 2005 09:04:42 +0000, Kakrocq wrote:

bonjour,
je voudrais avoir de la mémoire partagée ( 100Ko environ) entre un
process utilisateur et un module pilote PCI.
j'ai vu qu'on peut le faire soit par mmap soit par shmem ,
quel est la meilleur solution en terme de performance.


Si c'est entre un process user et un module, tu n'as pas beaucoup le choix.
Il faut que ton module fasse un vmalloc de la taille souhaitée et que
le device qui y accède implémente les primitives mmap et munmap sur
cette zone. C'est la seule approche valide.

Avatar
Salut
Oui c'est exactement ca .
je vois bien comment faire le vmalloc dans le module , mais comment
récupérer l' adresse de cette zone dans le process user avec mmap.
Si tu connais un exemple ou un site qui pourrais m'expliquer ca , je suis
preneur.
"l'indien" a écrit dans le message de
news:
On Wed, 02 Feb 2005 09:04:42 +0000, Kakrocq wrote:

bonjour,
je voudrais avoir de la mémoire partagée ( 100Ko environ) entre un
process utilisateur et un module pilote PCI.
j'ai vu qu'on peut le faire soit par mmap soit par shmem ,
quel est la meilleur solution en terme de performance.


Si c'est entre un process user et un module, tu n'as pas beaucoup le
choix.

Il faut que ton module fasse un vmalloc de la taille souhaitée et que
le device qui y accède implémente les primitives mmap et munmap sur
cette zone. C'est la seule approche valide.




Avatar
l'indien
On Wed, 02 Feb 2005 13:51:26 +0100, Salut wrote:

Oui c'est exactement ca .
je vois bien comment faire le vmalloc dans le module , mais comment
récupérer l' adresse de cette zone dans le process user avec mmap.
Si tu connais un exemple ou un site qui pourrais m'expliquer ca , je suis
preneur.


Tu doit créer un device dans ton module et implémenter l'appel mmap
correspondant à ce device comme mappant la mémoire retournée par le
vmalloc pour le process appelant.
Beaucoup de drivers font celà. Regarde par exemple du coté des devices
v4l qui permettent, pour certains, de mapper directement la mémoire de
capture vidéo. Ton code sera très proche...
Contacte moi par mail, je pourrais peut-être te faire un squelette en C...


"l'indien" a écrit dans le message de
news:
On Wed, 02 Feb 2005 09:04:42 +0000, Kakrocq wrote:

bonjour,
je voudrais avoir de la mémoire partagée ( 100Ko environ) entre un
process utilisateur et un module pilote PCI.
j'ai vu qu'on peut le faire soit par mmap soit par shmem ,
quel est la meilleur solution en terme de performance.


Si c'est entre un process user et un module, tu n'as pas beaucoup le
choix.

Il faut que ton module fasse un vmalloc de la taille souhaitée et que
le device qui y accède implémente les primitives mmap et munmap sur
cette zone. C'est la seule approche valide.