From: Duncan <1i5t5.duncan@cox.net>
To: linux-btrfs@vger.kernel.org
Subject: Re: Stray 4k extents with slow buffered writes
Date: Fri, 4 Mar 2016 12:17:19 +0000 (UTC) [thread overview]
Message-ID: <pan$c10c8$9f263f0c$e897a9bf$b8ca489d@cox.net> (raw)
In-Reply-To: 56D89655.70504@googlemail.com
Holger Hoffstätte posted on Thu, 03 Mar 2016 20:53:57 +0100 as excerpted:
> It changes things because you likely have a higher value set for
> vm/dirty_expire_centisecs or dirty_bytes explicitly configured; I have
> it set to 1000 (10s) to prevent large writebacks from choking
> everything.
> The default is probably still 30s aka 3000.
[This is a comment on write-cache management strategy in the above
context, not on the buffered write 4k extents issue.]
Interesting strategy.
I left the expire (aka foreground priority) timeout at its default 30
seconds, here, and actually upped the writeback (background priority)
timeout to 10 seconds, from its default 5.
I don't like large writebacks choking things either, but I chose to use
the size knobs (after all, the descriptor at issue here is "large", not
"old") to deal with that, not the time knobs. As a result, I set the
background ratio to 1% (it defaults to 5%), and foreground ratio to 3%
(it defaults to 10%).
With 16 gig of RAM, that's ~160 MiB background, about five seconds worth
at the 30 MiB/sec random write that's a reasonable if perhaps a bit
pessimistic estimate for spinning rust, ~ half a GiB foreground (15
seconds worth). Tho obviously as I'm at 1%, I'd have to switch to the
bytes instead of ratio knobs if I were to up my memory or want to go
lower or wanted more precise knobs.
It just seems to me more logical to fiddle the size knob if I'm worried
about the /size/ of the writeback, and with size now dealt with and off
the table, I decided doubling the low priority background writeback
timeout to 10 seconds was equally logical, giving writes additional time
to accumulate, for better write combining and elevator ordering, before
actually starting low priority writeback, since if sizes started
ballooning the lower size thresholds would trigger writeback anyway. And
with size already dealt with, the higher priority foreground expiry
default of 30 seconds was fine, so I didn't change that at all.
And, it seems to me, that might be part of your problem, since you're
forcing high priority writeback at only 10 seconds, even if it's under
the 4K block size, thus forcing COW rewrites when more data is appended
to those blocks, with COW predictably playing havoc with your extents,
now that you're forcing sub-4K writes to storage at high priority so fast
they have little chance to be consolidated into whole 4K block writes.
--
Duncan - List replies preferred. No HTML msgs.
"Every nonfree program has a lord, a master --
and if you use the program, he is your master." Richard Stallman
next prev parent reply other threads:[~2016-03-04 12:17 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-03 12:28 Stray 4k extents with slow buffered writes Holger Hoffstätte
2016-03-03 18:33 ` Liu Bo
2016-03-03 19:53 ` Holger Hoffstätte
2016-03-03 20:47 ` Austin S. Hemmelgarn
2016-03-03 21:50 ` Holger Hoffstätte
2016-03-03 22:13 ` Liu Bo
2016-03-04 1:37 ` Liu Bo
2016-03-04 12:17 ` Duncan [this message]
2016-03-03 20:55 ` Chris Mason
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='pan$c10c8$9f263f0c$e897a9bf$b8ca489d@cox.net' \
--to=1i5t5.duncan@cox.net \
--cc=linux-btrfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).