On 3/26/20 11:21 PM, Hans van Kranenburg wrote:
Hi!
On 3/26/20 7:16 PM, Holger Hoffstätte wrote:
could someone explain what SSD mode *actually* still does? Not ssd_spread,
that's clear and unrelated. A recent commit removed the thread-offloaded
bio submission (avoiding context switches etc.)
Can you share the commit id?
[1] followed by [2].
- which I thought was the
reason for SSD mode? - and looking through the code I couldn't find any
bits that helped clarify the difference.
After the change in 2017 to change the extent allocator in ssd mode for
data to behave like nossd already did before, there are two differences
between ssd and nossd left:
1) This if statement in tree-log.c:
cd354ad613a39 (Chris Mason 2011-10-20 15:45:37 -0400 3042)
/* when we're on an ssd, just kick the log commit out */
0b246afa62b0c (Jeff Mahoney 2016-06-22 18:54:23 -0400 3043)
if (!btrfs_test_opt(fs_info, SSD) &&
Ah yes, multi-writer batching - a common DB optimization technique.
I wonder how much of a difference that actually still makes, but
it sounds like a good idea.
2) Metadata "cluster allocator" write behavior:
*empty_cluster = SZ_64K # nossd
*empty_cluster = SZ_2M # ssd
This happens in extent-tree.c.
2M used to be a common erase block size on SSDs. Or maybe it's just
a nice round number.. ¯\(ツ)/¯
cheers,
Holger
[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=08635bae0b4ceb08fe4c156a11c83baec397d36d
[2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ba8a9d07954397f0645cf62bcc1ef536e8e7ba24