Cygwin Filesystem Performance degradation 1.7.5 vs 1.7.7, and methods for improving performance
Derry Shribman
derry@hola.org
Thu Sep 30 14:17:00 GMT 2010
Hi,
> I think you just proved why a global setting is bad. You are apparently
> presupposing that libxxx.so is doing something that would be ok with a
> "fast stat". I don't see how you can ever make that assumption. For
Every program author knows very well whether ino/nlink is required by his
programs or libraries his programs uses.
libraries dont just do stuff on their own. Libraries do what the program
requests them to do, so the program author knows whether they are doing
something that night need ino/nlink.
cvs, gnumake, grep and many many others do not need ino/nlink, since ino/nlink
is not related to the programs logic, and if any library they use IS using
ino/nlink info, then its a very strange library, if not even a bug.
all the common libraries (libc, libnss, libz etc...) do not use ino/nlink on
their own.
Beyond that: it has already been tested: many people mount with ihash (which
means no ino/nlink), and nearly all the applications work without any problem.
Derry
On 9/30/2010 2:04 AM, Christopher Faylor wrote:
> On Wed, Sep 29, 2010 at 10:31:54PM +0200, Derry Shribman wrote:
>> Hi,
>>
>>> If it's known that the application doesn't ever use the "heavy" parts of
>>> stat() in any of its code, then substituting xstat() for stat() globally
>>> only needs to happen once in the code as well.
>>
>> It needs to be replaced in the following places:
>> - detection code added in autoconf
>> - define in a header
>> #ifdef HAVE_XSTAT
>> #define STRUCT_FAST_STAT struct xstat
>> #define FAST_STAT(...) xstat(__VA_ARGS__)
>> #else
>> #define STRUCT_FAST_STAT struct stat
>> #define FAST_STAT(...) stat(__VA_ARGS__)
>> #endif
>>
>> And now need to search/replace in every single file where 'struct stat' and
>> 'stat()' appear to change them to STRUCT_FAST_STAT, and FAST_STAT()
>>
>> This is a BIG change.
>>
>> And the problem is that it does not have a GLOBAL effect on the program. It only
>> affects the code compiled directly, not the code linked together with the
>> application. So if a program uses libraries (/lib/libxxx.a or /lib/libxxx.so),
>> the above will not affect the libs the program uses.
>
> I think you just proved why a global setting is bad. You are apparently
> presupposing that libxxx.so is doing something that would be ok with a
> "fast stat". I don't see how you can ever make that assumption. For
> instance, if your application is using ncurses how can you know for
> certain that it doesn't ever need to real inode numbers? You have no
> idea what all of the libraries you're linking with could be using.
>
> cf
>
>
More information about the Cygwin-developers
mailing list