William A. Rowe, Jr. wrote:
bill stoddard wrote:
I completely agree, it's not a slam-dunk conclusion that async/event
driven connection management in an http server is clearly superior.
However, Bing mentioned Windows... Apache on Windows is not a stellar
performer, especially compared to a server that fully exploits IOCPs,
connection reuse and TransmitFile. The Windows MPM does use IOCPs
(not optimally) and connection reuse. The biggest inhibitor to
Apache on Windows performance serving files is in the apr_sendfile
implementation. Calls to TransmitFile are broken into something
like 64KB chunks in order to facilitate detecting send timeouts. If
you modify the call to
TransmitFile to always just send the whole file, performance sending
large files will improve dramatically.
My current thinking goes as follows;
* drop detecting timeouts in apr_sendfile (if win32 is incapable, so
be it,
they can configure sendfile off if they must, and in fact we could
do so by default, solving all sorts of NFS-issues with it.)
+1 - Will review.
* drop win32acceptex semantics, replace them with acceptfilter... none
(a simple accept), connect[ion] (the acceptex semantic), data
(acceptex
enhanced with first buffer).
I don't see the advantage of dropping acceptex. AcceptEx allows reuse
of the connection which saves some cycles. Is it breaking anything now?
Bill