[PATCH v9 00/12] fs: multigrain timestamp redux

Jeff Layton
2024-10-02T18:49:52Z

This is a replacement for the v6 series sitting in Christian's
vfs.mgtime branch. The main changes here are to the changelogs,
documentation and comments. The code itself is largely unchanged.

The pipe1_threads test shows these averages on my test rig with this
series:

v6.11: 89233600 (baseline)
v6.11 + v9 series: 88460897 (<1% slower)

Acked-by's and Reviewed-by's would be welcome (particularly from the
timekeeper folks).

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
Changes in v9:
- Comment and documentation cleanups.
- Drop the EXPORT_SYMBOL_GPL() from new timekeeper interfaces
- Link to v8: https://lore.kernel.org/r/20241001-mgtime-v8-0-903343d91bc3@kernel.org

Changes in v8:
- split patch that adds percpu counters into fs and timekeeping patches
- convert percpu counters to unsigned longs
- directly access the offs_real value in timekeeper instead of going
through offsets array
- drop WARN_ON's in timekeeping patches
- better changelogs and more comments for the timekeeping bits
- better document how backward realtime clock jumps affect things
- Link to v7: https://lore.kernel.org/r/20240913-mgtime-v7-0-92d4020e3b00@kernel.org

Changes in v7:
- move the floor value handling into timekeeper for better performance
- Link to v6: https://lore.kernel.org/r/20240715-mgtime-v6-0-48e5d34bd2ba@kernel.org

Changes in v6:
- Normalize timespec64 in inode_set_ctime_to_ts
- use DEFINE_PER_CPU counters for better vfs consistency
- skip ctime cmpxchg if the result means nothing will change
- add trace_ctime_xchg_skip to track skipped ctime updates
- use __print_flags in ctime_ns_xchg tracepoint
- Link to v5: https://lore.kernel.org/r/20240711-mgtime-v5-0-37bb5b465feb@kernel.org

Changes in v5:
- refetch coarse time in coarse_ctime if not returning floor
- timestamp_truncate before swapping new ctime value into place
- track floor value as atomic64_t
- cleanups to Documentation file
- Link to v4: https://lore.kernel.org/r/20240708-mgtime-v4-0-a0f3c6fb57f3@kernel.org

Changes in v4:
- reordered tracepoint fields for better packing
- rework percpu counters again to also count fine grained timestamps
- switch to try_cmpxchg for better efficiency
- Link to v3: https://lore.kernel.org/r/20240705-mgtime-v3-0-85b2daa9b335@kernel.org

Changes in v3:
- Drop the conversion of i_ctime fields to ktime_t, and use an unused bit
of the i_ctime_nsec field as QUERIED flag.
- Better tracepoints for tracking floor and ctime updates
- Reworked percpu counters to be more useful
- Track floor as monotonic value, which eliminates clock-jump problem

Changes in v2:
- Added Documentation file
- Link to v1: https://lore.kernel.org/r/20240626-mgtime-v1-0-a189352d0f8f@kernel.org

---
Jeff Layton (12):
timekeeping: add interfaces for handling timestamps with a floor value
fs: add infrastructure for multigrain timestamps
fs: have setattr_copy handle multigrain timestamps appropriately
fs: handle delegated timestamps in setattr_copy_mgtime
fs: tracepoints around multigrain timestamp events
fs: add percpu counters for significant multigrain timestamp events
timekeeping: add percpu counter for tracking floor swap events
Documentation: add a new file documenting multigrain timestamps
xfs: switch to multigrain timestamps
ext4: switch to multigrain timestamps
btrfs: convert to multigrain timestamps
tmpfs: add support for multigrain timestamps

Documentation/filesystems/index.rst | 1 +
Documentation/filesystems/multigrain-ts.rst | 125 ++++++++++++
fs/attr.c | 60 +++++-
fs/btrfs/file.c | 25 +--
fs/btrfs/super.c | 3 +-
fs/ext4/super.c | 2 +-
fs/inode.c | 282 +++++++++++++++++++++++++---
fs/stat.c | 46 ++++-
fs/xfs/libxfs/xfs_trans_inode.c | 6 +-
fs/xfs/xfs_iops.c | 10 +-
fs/xfs/xfs_super.c | 2 +-
include/linux/fs.h | 36 +++-
include/linux/timekeeping.h | 5 +
include/trace/events/timestamp.h | 124 ++++++++++++
kernel/time/timekeeping.c | 106 +++++++++++
kernel/time/timekeeping_debug.c | 13 ++
kernel/time/timekeeping_internal.h | 9 +
mm/shmem.c | 2 +-
18 files changed, 784 insertions(+), 73 deletions(-)
---
base-commit: 7f1416b4fe6bd3363878a91894cd770f8ee1b5d0
change-id: 20240913-mgtime-20c98bcda88e

Best regards,
--
Jeff Layton <jlayton@kernel.org>