[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <98612748-8454-43E8-9915-BAEBA19A6FD7@linaro.org>
Date: Mon, 20 May 2019 12:38:32 +0200
From: Paolo Valente <paolo.valente@...aro.org>
To: Theodore Ts'o <tytso@....edu>
Cc: "Srivatsa S. Bhat" <srivatsa@...il.mit.edu>,
linux-fsdevel@...r.kernel.org,
linux-block <linux-block@...r.kernel.org>,
linux-ext4@...r.kernel.org, cgroups@...r.kernel.org,
kernel list <linux-kernel@...r.kernel.org>,
Jens Axboe <axboe@...nel.dk>, Jan Kara <jack@...e.cz>,
jmoyer@...hat.com, amakhalov@...are.com, anishs@...are.com,
srivatsab@...are.com, Andrea Righi <righi.andrea@...il.com>
Subject: Re: CFQ idling kills I/O performance on ext4 with blkio cgroup
controller
> Il giorno 18 mag 2019, alle ore 21:28, Theodore Ts'o <tytso@....edu> ha scritto:
>
> On Sat, May 18, 2019 at 08:39:54PM +0200, Paolo Valente wrote:
>> I've addressed these issues in my last batch of improvements for
>> BFQ, which landed in the upcoming 5.2. If you give it a try, and
>> still see the problem, then I'll be glad to reproduce it, and
>> hopefully fix it for you.
>
> Hi Paolo, I'm curious if you could give a quick summary about what you
> changed in BFQ?
>
Here is the idea: while idling for a process, inject I/O from other
processes, at such an extent that no harm is caused to the process for
which we are idling. Details in this LWN article:
https://lwn.net/Articles/784267/
in section "Improving extra-service injection".
> I was considering adding support so that if userspace calls fsync(2)
> or fdatasync(2), to attach the process's CSS to the transaction, and
> then charge all of the journal metadata writes the process's CSS. If
> there are multiple fsync's batched into the transaction, the first
> process which forced the early transaction commit would get charged
> the entire journal write. OTOH, journal writes are sequential I/O, so
> the amount of disk time for writing the journal is going to be
> relatively small, and especially, the fact that work from other
> cgroups is going to be minimal, especially if hadn't issued an
> fsync().
>
Yeah, that's a longstanding and difficult instance of the general
too-short-blanket problem. Jan has already highlighted one of the
main issues in his reply. I'll add a design issue (from my point of
view): I'd find a little odd that explicit sync transactions have an
owner to charge, while generic buffered writes have not.
I think Andrea Righi addressed related issues in his recent patch
proposal [1], so I've CCed him too.
[1] https://lkml.org/lkml/2019/3/9/220
> In the case where you have three cgroups all issuing fsync(2) and they
> all landed in the same jbd2 transaction thanks to commit batching, in
> the ideal world we would split up the disk time usage equally across
> those three cgroups. But it's probably not worth doing that...
>
> That being said, we probably do need some BFQ support, since in the
> case where we have multiple processes doing buffered writes w/o fsync,
> we do charnge the data=ordered writeback to each block cgroup. Worse,
> the commit can't complete until the all of the data integrity
> writebacks have completed. And if there are N cgroups with dirty
> inodes, and slice_idle set to 8ms, there is going to be 8*N ms worth
> of idle time tacked onto the commit time.
>
Jan already wrote part of what I wanted to reply here, so I'll
continue from his reply.
Thanks,
Paolo
> If we charge the journal I/O to the cgroup, and there's only one
> process doing the
>
> dd if=/dev/zero of=/root/test.img bs=512 count=10000 oflags=dsync
>
> then we don't need to worry about this failure mode, since both the
> journal I/O and the data writeback will be hitting the same cgroup.
> But that's arguably an artificial use case, and much more commonly
> there will be multiple cgroups all trying to at least some file system
> I/O.
>
> - Ted
Download attachment "signature.asc" of type "application/pgp-signature" (834 bytes)
Powered by blists - more mailing lists