-
Gabriel Krisman Bertazi authored
This is a dummy implementation for performance comparison with the FUSE filesystem ciopfs. It converts names to lowercase on-disk, so it is not stable, but it is what gives the best performance. In comparison to ciopfs, it performs 10x faster when doing inexact-case searches than CIOPFS. For case-exact matches, they perform pretty much the same, which is pretty much the same as a flat access to the filesystem, i.e. we won't get any better on that case. But, it has the same issues as CIOPFS: - Not stable names - Uppercase Files created outside the CI mountpoint are hidden. - Doesn't handle utf8. This is a very trivial implementation, but one which demonstrates the advantages of syscall_intercept over FUSE approaches for this basic scenario. The benchmark I used for the above was pathwalk, which does a simple, create, randomize pathname case and search. For 10k files, The following times were collected. === CI lookups === * libcasefold test: inexact match of 10k files LD_PRELOAD=libcasefold.so ./pathwalkci /tmp/ci/ 10000 ci created 10000 files Performing case inexact lookup found 10000 files. TIME: 0.011 * CIOPS test: inexact match of 10k files ./pathwalkci /tmp/ciopfs-ci/ 10000 ci [git:master@pathwalkci] created 10000 files Performing case inexact lookup found 10000 files. TIME: 0.118 === CS lookups === * libcasefold test: Exact matches of 10k files LD_PRELOAD=libcasefold.so ./pathwalkci /tmp/ci/ 10000 created 10000 files Performing case exact lookup found 10000 files. TIME: 0.011 * CIOPS test: exact match of 10k files ./pathwalkci /tmp/ciopfs-ci/ 10000 created 10000 files Performing case exact lookup found 10000 files. TIME: 0.014 * Flat tests: Exact match of 10k files ./pathwalkci /tmp/ci/ 10000 created 10000 files Performing case exact lookup found 10000 files. TIME: 0.009 Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.co.uk>
b5ed55cc