Hi,

I did some testing/reviewing of the ssl/event backport proposal

  * core, mod_ssl: Lift the restriction that prevents mod_ssl taking
    full advantage of the event MPM. Enable the ability for a module
    to reverse the sense of a poll event from a read to a write or
    vice versa.

The general idea of the patch is good. Unfortunately, the current 
version doesn't have much effect. The problem is that the core output 
filter, which does all the decisions about buffering, flushing, 
blocking, and async write completion, comes after the ssl output 
filter. Therefore core_output_filter only sees encrypted data and 
never sees file buckets. Therefore it will only do async write 
completion if the encrypted data left to send for a request is less 
than THRESHOLD_MAX_BUFFER (64k).

To be more efficient the order of the filter doing the 
buffering/flushing decitions and the ssl output filter would have to 
be reversed. I haven't looked how this could be achieved. Maybe 
mod_ssl would have to do its encryption in a AP_FTYPE_NETWORK filter 
that comes after the core_output_filter().

Does it make sense to backport the current state nonetheless? While it 
seems likely to me that the current API would be sufficient even if 
this issue is fixed, it may be prudent to wait with a backport until 
we know how the issue should be fixed exactly.


As a related issue, I have noticed that even without ssl, async write 
completion does not work too well at the moment. The reason seems that 
EnableSendfile/EnableMMAP default to off/on respectively, and that the 
core_output_buffer does not treat MMAP buckets like it would treat 
file buckets. AFAICS, there is no facility in apr to create anonymous 
mmaps and we can assume that an apr_mmap_t is always backed by a file. 
Is this correct? I think on some OSs, mmaping /dev/null gives an 
anonymous mapping. Can we ignore that case for the purpose of deciding 
how much memory a bucket needs?

Cheers,
Stefan

Reply via email to