-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fast Dedup: DDT Prefetch #15890
Fast Dedup: DDT Prefetch #15890
Conversation
5bcc9d3
to
7024ec8
Compare
|
ddfc334
to
d9b9f3b
Compare
0ad925e
to
503c190
Compare
d923ec7
to
a25b0b7
Compare
a25b0b7
to
109908a
Compare
109908a
to
ca6d7f3
Compare
ca6d7f3
to
d07be89
Compare
rebased after zap shrinking was landed |
Maybe I missed something, but I have two questions:
Thanks. |
Right now it will evict something prefetched earlier. Not very efficient...
As I pointed earlier, it should be done for BRT also, since they and their problems due to random access are very similar. "Genertic pool metadata" though is pretty vague, you should not want to prefetch all existing space maps, indirect blocks, extended attributes and other things you likely never need in a typical operation. |
[Fast dedup stack rebased to master 3c941d1] |
[Fast dedup stack rebased to master c98295e] |
1026417
to
1bcea4c
Compare
b8be895
to
ef81388
Compare
186c360
to
3779c22
Compare
tests/zfs-tests/tests/functional/cli_root/zpool_prefetch/zpool_prefetch.cfg
Outdated
Show resolved
Hide resolved
c937bc8
to
e76b46c
Compare
@allanjude can you take a look at the checkstyle errors? |
This change adds a new `zpool prefetch -t ddt $pool` command which causes a pool's DDT to be loaded into the ARC. The primary goal is to remove the need to "warm" a pool's cache before deduplication stops slowing write performance. It may also provide a way to reload portions of a DDT if they have been flushed due to inactivity. Sponsored-by: iXsystems, Inc. Sponsored-by: Catalogics, Inc. Sponsored-by: Klara, Inc. Co-authored-by: Will Andrews <will.andrews@klarasystems.com> Co-authored-by: Allan Jude <allan@klarasystems.com> Co-authored-by: Don Brady <don.brady@klarasystems.com> Signed-off-by: Allan Jude <allan@klarasystems.com> Signed-off-by: Will Andrews <will.andrews@klarasystems.com> Signed-off-by: Fred Weigel <fred.weigel@klarasystems.com> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Signed-off-by: Don Brady <don.brady@klarasystems.com>
e76b46c
to
3bc212e
Compare
It was the file you had me remove, needed to be removed from the Makefile.am as well. |
Hellooo! So this commit BSODs on Windows, it turns out to be: https://github.com/KlaraSystems/zfs/blob/master/module/zfs/spa.c#L553 Before we get here, We leave somewhat early due to
and in
So https://github.com/KlaraSystems/zfs/blob/master/module/zfs/zfs_ioctl.c#L7974 Boom, we are rogering around with the freed So, first fix is I could do a PR, but I have 332 commits to pull in still, so if someone gets one in before me, I will be happy :) |
@lundman wow, good find. I've got half a patch worked up already; I'll finish and post it tonight. |
This change adds a new `zpool prefetch -t ddt $pool` command which causes a pool's DDT to be loaded into the ARC. The primary goal is to remove the need to "warm" a pool's cache before deduplication stops slowing write performance. It may also provide a way to reload portions of a DDT if they have been flushed due to inactivity. Sponsored-by: iXsystems, Inc. Sponsored-by: Catalogics, Inc. Sponsored-by: Klara, Inc. Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Tony Hutter <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Allan Jude <allan@klarasystems.com> Signed-off-by: Will Andrews <will.andrews@klarasystems.com> Signed-off-by: Fred Weigel <fred.weigel@klarasystems.com> Signed-off-by: Rob Norris <rob.norris@klarasystems.com> Signed-off-by: Don Brady <don.brady@klarasystems.com> Co-authored-by: Will Andrews <will.andrews@klarasystems.com> Co-authored-by: Don Brady <don.brady@klarasystems.com> Closes openzfs#15890
Motivation and Context
After pool import, it takes a long time for a dedup table to naturally be loaded into the cache, which reduces performance until enough of the table is in memory.
In production we have seen significantly reduces performance for at least 72 hours on a large DDT, reduces to minutes using this feature.
Description
This change adds a new
zpool prefetch -t ddt $pool
command which causes a pool's DDT to be loaded into the ARC. The primary goal is to remove the need to "warm" a pool's cache before deduplication stops slowing write performance. It may also provide a way to reload portions of a DDT if they have been flushed due to inactivity.Replaces #9464
How Has This Been Tested?
Tests added.
Types of changes
Checklist:
Signed-off-by
.