Miklos, I ran some micro benchmarks on v3 patch [1] which demonstrated up to 20% slowdown for some workloads (many small reads/writes in a small VM). This revision adds the "relaxed" percpu counter helpers to mitigate the iostats counters overhead. With the relaxed counters, the micro benchmarks that I ran did not demonstrate any measurable overhead on xfs, on overlayfs over xfs and overlayfs over tmpfs. Dave Chinner asked why the io stats should not be enabled for all filesystems. That change seems too bold for me so instead, I included an extra patch to auto-enable per-sb io stats for blockdev filesystems. Should you decide to take the patches for enabling io stats for overlayfs and/or fuse through your tree, it is up to you to whether you want to take this patch as well or leave it out until more people have a chance to test it and run more performance tests on their setups. Thanks, Amir. [1] https://lore.kernel.org/linux-fsdevel/20220301184221.371853-1-amir73il@xxxxxxxxx/ Changes since v3: - Use "relaxed" counters to reduce performance overhead - Opt-in to per-sb io stats via fs_flags (dchinner) - Add patch to auto-enable io stats for all blockdev fs (dchinner) Changes since v2: - Change from per-mount to per-sb io stats (szeredi) - Avoid percpu loop when reading mountstats (dchinner) Changes since v1: - Opt-in for per-mount io stats for overlayfs and fuse Amir Goldstein (9): lib/percpu_counter: add helpers for "relaxed" counters lib/percpu_counter: add helpers for arrays of counters fs: tidy up fs_flags definitions fs: add optional iostats counters to struct super_block fs: collect per-sb io stats fs: report per-sb io stats ovl: opt-in for per-sb io stats fuse: opt-in for per-sb io stats fs: enable per-sb io stats for all blockdev filesystems fs/Kconfig | 8 ++ fs/fuse/inode.c | 3 +- fs/nfsd/export.c | 10 ++- fs/nfsd/nfscache.c | 5 +- fs/nfsd/stats.c | 37 +--------- fs/nfsd/stats.h | 3 - fs/overlayfs/super.c | 3 +- fs/proc_namespace.c | 16 ++++ fs/read_write.c | 88 ++++++++++++++++------ fs/super.c | 11 +++ include/linux/fs.h | 25 ++++--- include/linux/fs_iostats.h | 130 +++++++++++++++++++++++++++++++++ include/linux/percpu_counter.h | 48 ++++++++++++ lib/percpu_counter.c | 27 +++++++ 14 files changed, 337 insertions(+), 77 deletions(-) create mode 100644 include/linux/fs_iostats.h -- 2.25.1