Сетевые сокеты AIO и нулевое копирование под Linux

Я экспериментировал с асинхронными сетевыми сокетами Linux (aio_read и др. В aio.h / librt), и я пытался выяснить, являются ли они нулевыми копиями или нет. Практически все, что я прочитал, обсуждает файловый ввод-вывод, тогда как его сетевой ввод-вывод меня интересует.

AIO немного неудобно использовать, и я подозреваю, что он непереносимый, поэтому мне интересно, стоит ли с ним продолжать. Нулевое копирование - это чуть ли не единственное преимущество (альбиет - главное преимущество для моих целей), которое он имел бы перед (неблокирующим) select / epoll ..


person Remy    schedule 04.06.2010    source источник
comment
Кажется, что AIO является частью POSIX.1-2001, поэтому он должен быть переносимым.   -  person el.pescado    schedule 06.06.2010
comment
POSIX / glibc AIO (функции -lrt и aio_*) и Linux AIO (-laio с io_* функциями) - это разные вещи. Первый портативный, а второй - нет. См. Руководство пользователя Google AIO.   -  person Trevor Robinson    schedule 10.03.2013


Ответы (1)


В GLIBC AIO реализован с использованием потоков POSIX и обычного pread-вызова. Так что это, вероятно, дороже, чем select или epoll и делать read или recv самостоятельно.

person Stéphan Kochen    schedule 05.06.2010
comment
Немного удивительно, что, хотя я полагаю, что с текущим оборудованием (и некоторыми причудливыми трюками с разбивкой по страницам?) Скорость передачи данных становится узким местом до того, как это сделает memcopy-bandwidth вызовов ядра. - person Remy; 08.06.2010