Re: [PATCH v7 0/9] Ext4 Fast Commit Performance Patchset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Aug 17, 2024 at 9:04 PM Harshad Shirwadkar
<harshadshirwadkar@xxxxxxxxx> wrote:
>
> V7 Cover Letter
> ---------------
>
> This is the V7 of the patch series. This patch series contains fixes to
> review comments by Jan Kara (<jack@xxxxxxx>). The main changes are as
> follows:
>
> - As discussed in V6 review, I have dropped "ext4: add nolock mode to
>   ext4_map_blocks()" patch given that we now ensure that i_data_sem is
>   always grabbed before ext4_mark_inode_dirty() is called.
>
> - I have also dropped "ext4: introduce selective flushing in fast commit"
>   given that correctly implementing that would require more changes, and I
>   think they would be best done outside of this series.
>
> - I added "ext4: introduce selective flushing in fast commit" as the last
>   patch in the series. While testing log group tests I found a few failures
>   which get fixed due to this patch.

Sorry that was a copy paste error. I meant to say I have added a new
patch - "ext4: hold s_fc_lock while during fast commit" (which is the
last patch in the series).

- Harshad

>
> V6 Cover Letter
> ---------------
>
> This is the V6 of the patch series. This patch series contains fixes to a
> bunch of kernel build warnings reported by Kernel Test Robot
> (lkp@xxxxxxxxx) and Dan Carpenter (dan.carpenter@xxxxxxxxxx). Thank you!
>
> V5 Cover Letter
> ---------------
>
> This patch series supersedes the patch series "ext4: remove journal barrier
> during fast commit" sent in July 2022[1].  Except following three patches
> all the other patches are newly introduced in this series.
>
> * ext4: convert i_fc_lock to spinlock
> * ext4: for committing inode, make ext4_fc_track_inode wait
> * ext4: drop i_fc_updates from inode fc info
>
> This patchset does not introduce any on-disk format and / or user visible
> API change. This patchset reworks fast-commit's commit path improve overall
> performance of the commit path. Following optimizations have been added in
> this series:
>
> * Avoid having to lock the journal throughout the fast commit.
> * Remove tracking of open handles per inode.
> * Avoid issuing cache flushes when fast commits are contained within a
>   single FUA writes and there is no data that needs flushing.
> * Temporarily lift committing thread's priority to match that of the
>   journal thread to reduce scheduling delays.
>
> With the changes introduced in this patch series, now the commit path for
> fast commits is as follows:
>
> 1. Lock the journal by calling jbd2_journal_lock_updates_no_rsv(). This
>    ensures that all the exsiting handles finish and no new handles can
>    start.
> 2. Mark all the fast commit eligible inodes as undergoing fast commit by
>    setting "EXT4_STATE_FC_COMMITTING" state.
> 3. Unlock the journal by calling jbd2_journal_unlock_updates. This allows
>    starting of new handles. If new handles try to start an update on any of
>    the inodes that are being committed, ext4_fc_track_inode() will block
>    until those inodes have finished the fast commit.
> 4. Submit data buffers of all the committing inodes.
> 5. Wait for [4] to complete.
> 6. Commit all the directory entry updates in the fast commit space.
> 7. Commit all the changed inodes in the fast commit space and clear
>    "EXT4_STATE_FC_COMMITTING" for all the inodes.
> 8. Write tail tag to ensure atomicity of commits.
>
> (The above flow has been documented in the code as well)
>
> I verified that the patch series introduces no regressions in "log" groups
> when "fast_commit" feature is enabled.
>
> Also, we have a paper on fast commits in USENIX ATC 2024 this year which
> should become available on the website[2] in a few months.
>
> [1] https://lwn.net/Articles/902022/
> [2] https://www.usenix.org/conference/atc24
>
> Harshad Shirwadkar (9):
>   ext4: convert i_fc_lock to spinlock
>   ext4: for committing inode, make ext4_fc_track_inode wait
>   ext4: mark inode dirty before grabbing i_data_sem in ext4_setattr
>   ext4: rework fast commit commit path
>   ext4: drop i_fc_updates from inode fc info
>   ext4: update code documentation
>   ext4: temporarily elevate commit thread priority
>   ext4: make fast commit ineligible on ext4_reserve_inode_write failure
>   ext4: hold s_fc_lock while during fast commit
>
>  fs/ext4/ext4.h              |  18 +-
>  fs/ext4/fast_commit.c       | 339 ++++++++++++++++++------------------
>  fs/ext4/fast_commit.h       |   1 +
>  fs/ext4/inline.c            |   3 +
>  fs/ext4/inode.c             |  38 ++--
>  fs/ext4/super.c             |   9 +-
>  fs/jbd2/journal.c           |   2 -
>  include/trace/events/ext4.h |   7 +-
>  8 files changed, 214 insertions(+), 203 deletions(-)
>
> --
> 2.46.0.184.g6999bdac58-goog
>





[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux