On 06 Sep 2010, at 3:10 PM, Paul Fee wrote:

If mod_disk_cache's on disk format is changing, now may be an opportunity to investigate some options to improve performance of httpd as a caching proxy.

Currently headers and data are in separate files. If they were in a single file, the operating system is given more indication that these two items are tightly coupled. For example, when the headers are read in, the O/S can
readahead and buffer part of the body.

A difficulty with this could be refreshing the headers after a response to a
conditional GET.  If the headers are at the start of the file and they
change size, then they may overwrite the start of the existing body. You could leave room for expansion (risks wasted space and may not be enough) or
you could put the headers at the end of the file (may not benefit from
readahead).

This requirement is the reason the files are separate now. It's not that practical to have a header which can change size in time, and a body which can change size in time in the same file.

On a similar theme, would filesystem extended attributes be suitable for storing the headers? The cache file's contents would be the entity body. A problem with this approach could be portability. However the APR could abstract this, reverting to separate files on platforms/filesystems that
didn't offer extended attributes.

http://en.wikipedia.org/wiki/Extended_file_attributes

I haven't tested extended attributes to see if they offer performance gains over separate header and body files. However it seems cleaner to have both
parts in one file.  It should also eliminate race conditions where
headers/body could get out of sync.

mod_cache.h provides a provider mechanism for cache implementations, it is entirely possible to create a new cache implementation targeted directly at platforms where extended attributes are supported. The only requirement would be that it be possible to update the extended attributes atomically.

Regards,
Graham
--

Reply via email to