2010-06-04 17 views
6

J'ai expérimenté avec des sockets réseau Linux async (aio_read et al dans aio.h/librt), et une chose que j'ai essayé de savoir est de savoir si elles sont zéro-copie ou pas. À peu près tout ce que j'ai lu jusqu'ici traite des E/S de fichier, alors que son E/S de réseau je m'intéresse.Sockets réseau AIO et zéro-copie sous Linux

AIO est un peu une douleur à utiliser et je suspecte est non portable, se demandant si son Cela vaut la peine de persévérer. Zéro-copie est à peu près le seul avantage (albiet un majeur pour mes fins), il aurait plus de (non-bloquant) select/epoll ..

+0

AIO semble faire partie de POSIX.1-2001, il devrait donc être portable. –

+0

POSIO/glibc AIO (fonctions '-lrt' et' aio_ * ') et Linux AIO (' -laio' avec fonctions 'io_ *') sont deux choses différentes. Le premier est portable, mais le dernier ne l'est pas. Voir [Guide de l'utilisateur AIO de Google] (http://code.google.com/p/kernel/wiki/AIOUserGuide). –

Répondre

2

Dans GLIBC, AIO est mis en œuvre en utilisant des threads POSIX et un pread - appel. Donc, il est probablement plus cher que select ou epoll et de faire le read ou recv vous-même.

+0

Un peu surprenant que, bien que je suppose avec le matériel actuel (et quelques astuces de pagination de fantaisie?) Les vitesses de fil deviennent un goulot d'étranglement avant que la bande passante memcopy des appels de noyau le fasse. – Remy