l'indien wrote in message :C'est vrai mais il est peut être aussi interressant que le temps passé
dans le noyau est assez souvent pénalisant pour tout le monde vu qu'il
est souvent obligé de locker des structures, ...
Oui, il y a plein de trucs, mais tu n'en sors pas : tout ce que doit faire
le noyau pour passer un message à un processus, quelqu'un doit le faire,
d'une manière ou d'une autre pour passer des messages d'un processus. On
n'en sort pas, le noyau est mieux placé pour passer ces messages.
Alors que si un process est blocqué, il est préempté.
Un noyau bien conçu est capable de se préempter lui-même. Ok, Linux n'est
pas un noyau bien conçu, mais il s'en approche.
C'est vrai que sur x86 un switch de contexte est très couteux (c'est
moins vrai sur les amd64), mais comme la plupart des CPU n'ont pas ce
problème et que le x86 est loin de représenter la majorité des CPU
vendus, je pense qu'il ne faut pas trop s'atarder sur les tares de cette
architecture.
D'un autre côté, le x86 reste ultra-majoritaire dans la catégorie des
processeurs sur lesquels on fait tourner des trucs style Nautilus ou
Konqueror qui ont besoin de fam ou assimilé.
Bon, ça commence à sentir fortement le troll roussi, par ici, non ?
Oui, c'est bien, ça passe le temps.
Il suffit de mapper un espace partagé en mémoire, un fichier, par
exemple. Un process écrit, les autres lisent, il n'y a aucune recopie
mémoire.
Mais ce n'est pas parfait. Il n'est pas possible d'obtenir un mapping
anonyme partagé entre deux processus à moins de le mettre en place dans un
ancêtre commun. C'est assez naze, d'ailleurs. J'ai vu passer un patch pour
faire l'inverse d'un mmap, c'est à dire obtenir un fd pointant vers une zône
de mémoire, fd qu'on pouvait ensuite passer sur une socket locale, mais il
n'y a eu aucune suite. À défaut de mapping anonyme, il faut, comme tu le
suggères, le mapping d'un fichier. Mais là, ça veut dire qu'on se tape la
surcharge du filesystem, et même avec un tmpfs, ça doit quand même coûter
pas mal. Tout ceci n'est vraiment pas satisfaisant.
l'indien wrote in message <pan.2005.09.21.22.03.49.423452@magic.fr>:
C'est vrai mais il est peut être aussi interressant que le temps passé
dans le noyau est assez souvent pénalisant pour tout le monde vu qu'il
est souvent obligé de locker des structures, ...
Oui, il y a plein de trucs, mais tu n'en sors pas : tout ce que doit faire
le noyau pour passer un message à un processus, quelqu'un doit le faire,
d'une manière ou d'une autre pour passer des messages d'un processus. On
n'en sort pas, le noyau est mieux placé pour passer ces messages.
Alors que si un process est blocqué, il est préempté.
Un noyau bien conçu est capable de se préempter lui-même. Ok, Linux n'est
pas un noyau bien conçu, mais il s'en approche.
C'est vrai que sur x86 un switch de contexte est très couteux (c'est
moins vrai sur les amd64), mais comme la plupart des CPU n'ont pas ce
problème et que le x86 est loin de représenter la majorité des CPU
vendus, je pense qu'il ne faut pas trop s'atarder sur les tares de cette
architecture.
D'un autre côté, le x86 reste ultra-majoritaire dans la catégorie des
processeurs sur lesquels on fait tourner des trucs style Nautilus ou
Konqueror qui ont besoin de fam ou assimilé.
Bon, ça commence à sentir fortement le troll roussi, par ici, non ?
Oui, c'est bien, ça passe le temps.
Il suffit de mapper un espace partagé en mémoire, un fichier, par
exemple. Un process écrit, les autres lisent, il n'y a aucune recopie
mémoire.
Mais ce n'est pas parfait. Il n'est pas possible d'obtenir un mapping
anonyme partagé entre deux processus à moins de le mettre en place dans un
ancêtre commun. C'est assez naze, d'ailleurs. J'ai vu passer un patch pour
faire l'inverse d'un mmap, c'est à dire obtenir un fd pointant vers une zône
de mémoire, fd qu'on pouvait ensuite passer sur une socket locale, mais il
n'y a eu aucune suite. À défaut de mapping anonyme, il faut, comme tu le
suggères, le mapping d'un fichier. Mais là, ça veut dire qu'on se tape la
surcharge du filesystem, et même avec un tmpfs, ça doit quand même coûter
pas mal. Tout ceci n'est vraiment pas satisfaisant.
l'indien wrote in message :C'est vrai mais il est peut être aussi interressant que le temps passé
dans le noyau est assez souvent pénalisant pour tout le monde vu qu'il
est souvent obligé de locker des structures, ...
Oui, il y a plein de trucs, mais tu n'en sors pas : tout ce que doit faire
le noyau pour passer un message à un processus, quelqu'un doit le faire,
d'une manière ou d'une autre pour passer des messages d'un processus. On
n'en sort pas, le noyau est mieux placé pour passer ces messages.
Alors que si un process est blocqué, il est préempté.
Un noyau bien conçu est capable de se préempter lui-même. Ok, Linux n'est
pas un noyau bien conçu, mais il s'en approche.
C'est vrai que sur x86 un switch de contexte est très couteux (c'est
moins vrai sur les amd64), mais comme la plupart des CPU n'ont pas ce
problème et que le x86 est loin de représenter la majorité des CPU
vendus, je pense qu'il ne faut pas trop s'atarder sur les tares de cette
architecture.
D'un autre côté, le x86 reste ultra-majoritaire dans la catégorie des
processeurs sur lesquels on fait tourner des trucs style Nautilus ou
Konqueror qui ont besoin de fam ou assimilé.
Bon, ça commence à sentir fortement le troll roussi, par ici, non ?
Oui, c'est bien, ça passe le temps.
Il suffit de mapper un espace partagé en mémoire, un fichier, par
exemple. Un process écrit, les autres lisent, il n'y a aucune recopie
mémoire.
Mais ce n'est pas parfait. Il n'est pas possible d'obtenir un mapping
anonyme partagé entre deux processus à moins de le mettre en place dans un
ancêtre commun. C'est assez naze, d'ailleurs. J'ai vu passer un patch pour
faire l'inverse d'un mmap, c'est à dire obtenir un fd pointant vers une zône
de mémoire, fd qu'on pouvait ensuite passer sur une socket locale, mais il
n'y a eu aucune suite. À défaut de mapping anonyme, il faut, comme tu le
suggères, le mapping d'un fichier. Mais là, ça veut dire qu'on se tape la
surcharge du filesystem, et même avec un tmpfs, ça doit quand même coûter
pas mal. Tout ceci n'est vraiment pas satisfaisant.
Je n'irai pas
jusqu'à dire qu'il faut faire des micro-noyaux
La préemption du noyau Linux reste assez périlleuse, d'après mes
(mauvaises) expériences... Et ça ne résoud pas le problème des locks.
Si un sous-système est locké, ça bloque tous les process qui en ont
besoin...
C'est très utile en embarqué aussi, figure toi.
C'est possible en mappant /dev/mem et en se débrouillant pour passer
l'addresse à mapper aux process qui en ont besoin. C'est vrai que ça
ressemble fortement à un hack...
Sinon, il faut créer un ramdisk sans filesystem et le mapper. Dans ce
cas, il n'y a pas d'overhead de filesystem et tout le monde travaille dans
le cache. L'effet secondaire, c'est que les pages en question ne pourront
pas être swappées, ce qui peut être génant...
<snip>
Pour l'utiliser, ce serait très simple: tu ouvres le device, et tu fait
un select pour savoir s'il y a des choses à lire.
Je n'irai pas
jusqu'à dire qu'il faut faire des micro-noyaux
La préemption du noyau Linux reste assez périlleuse, d'après mes
(mauvaises) expériences... Et ça ne résoud pas le problème des locks.
Si un sous-système est locké, ça bloque tous les process qui en ont
besoin...
C'est très utile en embarqué aussi, figure toi.
C'est possible en mappant /dev/mem et en se débrouillant pour passer
l'addresse à mapper aux process qui en ont besoin. C'est vrai que ça
ressemble fortement à un hack...
Sinon, il faut créer un ramdisk sans filesystem et le mapper. Dans ce
cas, il n'y a pas d'overhead de filesystem et tout le monde travaille dans
le cache. L'effet secondaire, c'est que les pages en question ne pourront
pas être swappées, ce qui peut être génant...
<snip>
Pour l'utiliser, ce serait très simple: tu ouvres le device, et tu fait
un select pour savoir s'il y a des choses à lire.
Je n'irai pas
jusqu'à dire qu'il faut faire des micro-noyaux
La préemption du noyau Linux reste assez périlleuse, d'après mes
(mauvaises) expériences... Et ça ne résoud pas le problème des locks.
Si un sous-système est locké, ça bloque tous les process qui en ont
besoin...
C'est très utile en embarqué aussi, figure toi.
C'est possible en mappant /dev/mem et en se débrouillant pour passer
l'addresse à mapper aux process qui en ont besoin. C'est vrai que ça
ressemble fortement à un hack...
Sinon, il faut créer un ramdisk sans filesystem et le mapper. Dans ce
cas, il n'y a pas d'overhead de filesystem et tout le monde travaille dans
le cache. L'effet secondaire, c'est que les pages en question ne pourront
pas être swappées, ce qui peut être génant...
<snip>
Pour l'utiliser, ce serait très simple: tu ouvres le device, et tu fait
un select pour savoir s'il y a des choses à lire.