• A
    fs: group frequently accessed fields of struct super_block together · 99c228a9
    Amir Goldstein 提交于
    Kernel test robot reported [1] a 6% performance regression in a
    concurrent unlink(2) workload on commit 60f7ed8c ("fsnotify: send
    path type events to group with super block marks").
    
    The performance test was run with no fsnotify marks at all on the
    data set, so the only extra instructions added by the offending
    commit are tests of the super_block fields s_fsnotify_{marks,mask}
    and these tests happen on almost every single inode access.
    
    When adding those fields to the super_block struct, we did not give much
    thought of placing them on a hot cache lines (we just placed them at the
    end of the struct).
    
    Re-organize struct super_block to try and keep some frequently accessed
    fields on the same cache line.
    
    Move the frequently accessed fields s_fsnotify_{marks,mask} near the
    frequently accessed fields s_fs_info,s_time_gran, while filling a 64bit
    alignment hole after s_time_gran.
    
    Move the seldom accessed fields s_id,s_uuid,s_max_links,s_mode near the
    seldom accessed fields s_vfs_rename_mutex,s_subtype.
    
    Rong Chen confirmed that this patch solved the reported problem.
    
    [1] https://lkml.org/lkml/2018/9/30/206Reported-by: Nkernel test robot <rong.a.chen@intel.com>
    Tested-by: Nkernel test robot <rong.a.chen@intel.com>
    Fixes: 1e6cb723 ("fsnotify: add super block object type")
    Signed-off-by: NAmir Goldstein <amir73il@gmail.com>
    Signed-off-by: NJan Kara <jack@suse.cz>
    99c228a9
fs.h 111.3 KB