Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re[2]: zero copy sockets
Здравствуйте Igor,
9 декабря 2005 г., 22:48:05, Вы писали:
IS> Во FreeBSD использовать zero copy sockets для произвольных данных,
IS> выравненных по 4К, сложно: нет простого метода узнать, когда можно
IS> менять буфер (читать в него новые данные или освобождать). Если буфер
IS> всё ещё используется ядром, то при попытке изменить данные будет
IS> page fault и ядро выделит новую страницу и скопирует туда данные
IS> этой страницы. Шило на мыло, если не хуже.
Согласен, если будет происходить COW то с zero copy будет еще хуже.
А метод из мана на практике не работает?
>From an application standpoint, the best way to guarantee that the data
has been sent out over the wire and freed by the kernel (for TCP-based
sockets) is to set a socket buffer size (see the SO_SNDBUF socket option
in the setsockopt(2) man page) appropriate for the application and net-
work environment and then make sure you have sent out twice as much data
as the socket buffer size before reusing a buffer. For TCP, the send and
receive socket buffer sizes generally directly correspond to the TCP win-
dow size.
Это разумеется приблизительная оценка...
Хотя в целом ситуация ясна - идея красивая, но для практического
использования пока поддержка в ядре недостаточно проработана :(
--
С Уважением,
Антон Валерьевич Южанинов.
|