On peut comparer Ashd à Hurd / MINIX (micro-noyau) et Apache à Linux (monolithique). J'avais lu que Hurd a de gros problèmes de performances car les données doivent être copiées d'un processus à l'autre (bien qu'il semble que ces problèmes soient spécifiques au micro-noyau GNU Mach et que les autres genre L4 sont moins pires). Je me demande comment ça se passe pour Ashd qui vante la séparation de processus comme qualité en matière de sécurité.
Soit les processus sont vraiment cloisonnés et il faut donc recopier les données d'un processus à l'autre. Au moins entre le processus qui génère le corps de la réponse HTTP et htparser qui gère la socket (ou bien htparser transmet la socket à son fils ? c'est possible sous Linux).
Soit les processus partagent de la mémoire. Ce qui revient un peu à utiliser des threads avec de la mémoire partagée. Un bug ou une faille de sécurité affectant un processus va contaminer tous les autres processus. Par contre, on peut éviter certaines copies mémoires. Maintenant quand je lis qu'un programme s'appelle "sendfile", je me demande justement s'il utilise l'appel système sendfile qui permet de copier les données depuis un fichier vers une socket sans aucune copie des données entre l'espace noyau et l'espace utilisateur (noyau (disque dur) => espace utilisateur (tampon), puis espace utilisateur => noyau (socket)).
# Micro-noyau et copies mémoires
Posté par Victor STINNER (site web personnel) . En réponse à la dépêche Un nouveau serveur httpd : Ashd, A Sane HTTP Daemon. Évalué à 9.
Soit les processus sont vraiment cloisonnés et il faut donc recopier les données d'un processus à l'autre. Au moins entre le processus qui génère le corps de la réponse HTTP et htparser qui gère la socket (ou bien htparser transmet la socket à son fils ? c'est possible sous Linux).
Soit les processus partagent de la mémoire. Ce qui revient un peu à utiliser des threads avec de la mémoire partagée. Un bug ou une faille de sécurité affectant un processus va contaminer tous les autres processus. Par contre, on peut éviter certaines copies mémoires. Maintenant quand je lis qu'un programme s'appelle "sendfile", je me demande justement s'il utilise l'appel système sendfile qui permet de copier les données depuis un fichier vers une socket sans aucune copie des données entre l'espace noyau et l'espace utilisateur (noyau (disque dur) => espace utilisateur (tampon), puis espace utilisateur => noyau (socket)).