• Artur Paszkiewicz's avatar
    md: improve io stats accounting · 41d2d848
    Artur Paszkiewicz authored
    Use generic io accounting functions to manage io stats. There was an
    attempt to do this earlier in commit 18c0b223 ("md: use generic io
    stats accounting functions to simplify io stat accounting"), but it did
    not include a call to generic_end_io_acct() and caused issues with
    tracking in-flight IOs, so it was later removed in commit 74672d06
    ("md: fix md io stats accounting broken").
    
    This patch attempts to fix this by using both disk_start_io_acct() and
    disk_end_io_acct(). To make it possible, a struct md_io is allocated for
    every new md bio, which includes the io start_time. A new mempool is
    introduced for this purpose. We override bio->bi_end_io with our own
    callback and call disk_start_io_acct() before passing the bio to
    md_handle_request(). When it completes, we call disk_end_io_acct() and
    the original bi_end_io callback.
    
    This adds correct statistics about in-flight IOs and IO processing time,
    interpreted e.g. in iostat as await, svctm, aqu-sz and %util.
    
    It also fixes a situation where too many IOs where reported if a bio was
    re-submitted to the mddev, because io accounting is now performed only
    on newly arriving bios.
    Acked-by: default avatarGuoqing Jiang <guoqing.jiang@cloud.ionos.com>
    Signed-off-by: default avatarArtur Paszkiewicz <artur.paszkiewicz@intel.com>
    Signed-off-by: default avatarSong Liu <songliubraving@fb.com>
    41d2d848
md.c 257 KB