Skip to content
  • Gabriel Krisman Bertazi's avatar
    lib: Implement the ciopfs basic behavior · b5ed55cc
    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: default avatarGabriel Krisman Bertazi <krisman@collabora.co.uk>
    b5ed55cc