mbox series

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

Message ID 20241002-mgtime-v9-0-77e2baad57ac@kernel.org (mailing list archive)
Headers show
Series fs: multigrain timestamp redux | expand

Message

Jeff Layton Oct. 2, 2024, 6:49 p.m. UTC
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,