2010-06-04 14 views
6

Ich experimentierte mit asynchronen Linux-Netzwerk-Sockets (aio_read et al in aio.h/librt), und eine Sache, die ich herausfinden wollte, ist, ob diese Null-Kopie sind oder nicht. Ziemlich alles, was ich bisher gelesen habe, diskutiert Datei-I/O, während seine Netzwerk-I/O ich interessiert bin.AIO-Netzwerk-Sockets und zero-copy unter Linux

AIO ist ein bisschen ein Schmerz zu verwenden, und ich vermute, dass nicht tragbar ist, also fragen, ob es es lohnt sich, damit auszukommen. Zero-Copy ist nur der einzige Vorteil (Albiet ein großer für meine Zwecke) würde es über (nicht-blockierende) select/epoll haben.

+0

AIO scheint Teil von POSIX.1-2001 zu sein, also sollte es tragbar sein. –

+0

POSIX/glibc AIO ('-lrt' und' aio_ * 'Funktionen) und Linux AIO (' -laio' mit 'io_ *' Funktionen) sind zwei verschiedene Dinge. Ersteres ist tragbar, letzteres nicht. Siehe [Google AIO-Benutzerhandbuch] (http://code.google.com/p/kernel/wiki/AIOUserGuide). –

Antwort

2

In GLIBC, AIO ist implementiert mit POSIX-Threads und einem regulären pread - Anruf. Also ist es wahrscheinlich teurer als select oder epoll und machen Sie die read oder recv selbst.

+0

Etwas überraschend, obwohl ich mit der aktuellen Hardware (und einigen ausgefallenen Paging-Tricks?) Drahtgeschwindigkeiten zu einem Flaschenhals werden, bevor die Memcopy-Bandbreite der Kernel-Aufrufe funktioniert. – Remy