• Dave Hansen's avatar
    fs/notify: optimize inotify/fsnotify code for unwatched files · 7c49b861
    Dave Hansen authored
    I have a _tiny_ microbenchmark that sits in a loop and writes single
    bytes to a file.  Writing one byte to a tmpfs file is around 2x slower
    than reading one byte from a file, which is a _bit_ more than I expecte.
    This is a dumb benchmark, but I think it's hard to deny that write() is
    a hot path and we should avoid unnecessary overhead there.
    
    I did a 'perf record' of 30-second samples of read and write.  The top
    item in a diffprofile is srcu_read_lock() from fsnotify().  There are
    active inotify fd's from systemd, but nothing is actually listening to
    the file or its part of the filesystem.
    
    I *think* we can avoid taking the srcu_read_lock() for the common case
    where there are no actual marks on the file.  This means that there will
    both be nothing to notify for *and* implies that there is no need for
    clearing the ignore mask.
    
    This patch gave a 13.1% speedup in writes/second on my test, which is an
    improvement from the 10.8% that I saw with the last version.
    Signed-off-by: default avatarDave Hansen <dave.hansen@linux.intel.com>
    Reviewed-by: default avatarJan Kara <jack@suse.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Eric Paris <eparis@redhat.com>
    Cc: John McCutchan <john@johnmccutchan.com>
    Cc: Robert Love <rlove@rlove.org>
    Cc: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7c49b861
fsnotify.c 9.21 KB