Cygwin Filesystem Performance degradation 1.7.5 vs 1.7.7, and methods for improving performance
Derry Shribman
derry@hola.org
Thu Oct 7 14:57:00 GMT 2010
Hi,
>> In your original patch on the cygwin-patches ML you implemented the
>> fs_info caching using the pathname. I still don't think this is correct
>> for the reasons given in another mail. However, maybe we can use it
>> nevertheless like this:
>>
>> - If we don't find a path prefix matching the incoming path, call
>> symlink_info::check.
>>
>> - Otherwise we have a cached fs_info for the path prefix:
>>
>> - If the path is NFS, call check.
>> - Otherwise, if the calling function doesn't need st_nlink or st_mode,
>> call xcheck.
>> - Otherwise, call check.
>
> - In check, test for samba and use GENERIC_WRITE
> - otherwise use FILE_READ_ATTRIBUTES etc.
>
>> - In check and xcheck, always fetch fs_info using the current method.
>> Write back to path-based cache so we use the info the next time
>> around.
This looks like it will solve a lot of problems: it will choose the best method
for each case, while using the cache to help decide quickly on the right method.
Yet another possible improvement on this line that could be implemented in the
future after the fs_info caching is added:
We see that reading actual DATA from a file REALLY slow: on Windows with AV its
slow due to the AV scanning the file, and on Network Shares (Samba/NFS) - it
means create-read-close (3 round-trips) - as opposed to network-open-info (1
round-trip).
Cygwin reads file content for symlinks (!<symlink>) and files that may be
executable (#!/bin/xxx magic).
A cache could be added for this using the same cache mechanism. The
cache-validation can be done with the quick QAF() (or QIF/QDF), and then the
read the potential symlink/executable file's header only if needed.
Derry
More information about the Cygwin-developers
mailing list