[lkml]   [2012]   [Jul]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: [PATCHv4 3/5] ext4: remove unnecessary superblock dirtying
    On Wed, 2012-07-04 at 15:11 +0200, Jan Kara wrote:
    > On Wed 04-07-12 15:21:52, Artem Bityutskiy wrote:
    > > From: Artem Bityutskiy <>
    > >
    > > This patch changes the '__ext4_handle_dirty_super()' function which is used
    > > by ext4 to update the superblock via the journal in the following cases:
    > >
    > > 1. When creating the first large file on a file system without
    > > 2. When re-sizing the file-system.
    > > 3. When creating an xattr on a file-system without the
    > > 4. When adding or deleting an orphan (because we update the 's_last_orphan'
    > > superblock field).
    > >
    > > This function, however, falls back to just marking the superblock as dirty
    > > if the file-system has no journal. This means that we delay the actual
    > > superblock I/O submission by 5 seconds (roughly speaking). Namely, the
    > > 'sync_supers()' kernel thread will call 'ext4_write_super()' later, where
    > > we actually will submit the superblock down to the media.
    > >
    > > However:
    > > 1. For cases 1-3 it does not add any value to delay the I/O submission. These
    > > events are rare and we may just commit submit the superblock for
    > > asynchronous I/O right away.
    > > 2. For case 4 - similarly, not terribly frequent event in most of workloads.
    > > It should be good enough to just submit asynchronous superblock write-out.
    > Well, it happens for every inode being truncated / deleted to it can be
    > rather frequent. That's why I wanted to have now == 1 case everywhere -
    > i.e. just recompute the checksum and do mark_buffer_dirty(). I'd just
    > remove the 'now' test in this patch and then in patch 5 remove the now
    > argument from the function and callers as you did.

    I am a bit confused.

    It seems you consider that 'ext4_commit_super()' is a considerably
    slower than just marking the buffer as dirty right away. But I do not
    really understand why - all it does - it just updates a couple of
    superblock fields and then marks the buffer as dirty (I assume sync ==
    0). So from my POW they are almost the same. And when csum is enabled -
    re-calculating csum will probably be the longest part.

    More important is that we dirty the superblock on every deletion - this
    mean that with my change we will re-calculate checsum on every deletion
    and I am not sure it is nice. Ideally, we should be able to calculate
    the checksum just before sending the buffer to the IO queue...

    I'll prepare a new patch-set and send it to you. Thanks!

    Best Regards,
    Artem Bityutskiy
    [unhandled content-type:application/pgp-signature]
     \ /
      Last update: 2012-07-10 13:21    [W:0.026 / U:2.728 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site