-
Notifications
You must be signed in to change notification settings - Fork 1.9k
ZTS: Remove ashift setting from dedup_quota test #17250
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
Conversation
Hooray! It passed on all platforms from the first attempts, and seems faster than before, even though the variation is significant, from ~1.5 to ~8 minutes. |
While it passed on all the CI platforms, it now fails intermittently when I run it locally (where previously it did not):
Removing the ashift from the pool appears to cause the test to become flaky, at least on my system. Removing compression only had no negative affect. I am investigating the failure to see if I can get insight into why this is causing problems. |
Okay, I noticed that the failing runs always used a |
I've restarted the CI to try my luck again. @pcd1193182 I wonder how exactly it fails for you. |
So the failure mode on my runs is that the entries ends up greater than the target of 650000 in the |
@pcd1193182 In the CI logs I regularly saw big discrepancy between the |
@amotin By expanding the dbgmsg output we gather from the test, it looks like we flush ~400k log entries before we start spilling into the normal class, and then we keep flushing another ~380k after that. It seems like the log kept building up while we were doing the writes, and it didn't actually notice we were over quota (and so stop adding things to the log) until the dedup device filled up. My guess is that this is because the dedup log is stored on the special device (as a metadata object), which means that if we're using a special device we notice we're over dedup quota once the log + DDT is big enough to fill the object. Whereas if we are using a dedup device, we only store the actual ddt entries there, and so it doesn't trip the quota until it's too late, and the dedup log has hundreds of thousands of extra entries to handle. As for why removing the 4k made this appear... my guess is that the dirty data inflation was actually helping us by forcing things to spread into more TXGs. That slowed it down enough that the dedup code noticed that we were at the limit before it added the extra entries to the log. EDIT: Also it makes sense why this was only appearing on my runs and not the CI; I'm probably using a significantly beefier VM than the CI runs are, and the problem only appears if we manage to shove all the extra stuff into the log before we can flush enough out to trip the quota. |
@pcd1193182 IIRC we introduced
, so special vdev usage by metadata (I think) is pretty significant here to affect the result. PS: May be in "dedup" case we could reduce the size to 100MB to compensate? |
Ah interesting, I didn't know about that feature! But you're right that indirect blocks would also make a significant difference, at this recordsize. We could try having a smaller |
Okay, with the size set to 100M for dedup and 200M for special, the test also passes consistently.
|
dabba94
to
0755384
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice detective work!
0755384
to
3a36804
Compare
And of course the final version triggered OOMs on two platforms again. In a lack of additional ideas about OOMs I decided to replace the |
3a36804
to
cd75ac8
Compare
The test writes 1M of 1KB blocks, which may produce up to 1GB of dirty data. On top of that ashift=12 likely produces additional 4GB of ZIO buffers during sync process. On top of that we likely need some page cache since the pool reside on files. And finally we need to cache the DDT. Not surprising that the test regularly ends up in OOMs, possibly depending on TXG size variations. Also replace fio with pretty strange parameter set with a set of dd writes and TXG commits, just as we neeed here. While here, remove compression. It has nothing to do here, but waste CI CPU time. Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc.
cd75ac8
to
2e3d984
Compare
It passed this time. Rebasing and restarting once more just in case. Meanwhile, while formally the test passes, looking on the logs I still see a big discrepancy between reported |
The test writes 1M of 1KB blocks, which may produce up to 1GB of dirty data. On top of that ashift=12 likely produces additional 4GB of ZIO buffers during sync process. On top of that we likely need some page cache since the pool reside on files. And finally we need to cache the DDT. Not surprising that the test regularly ends up in OOMs, possibly depending on TXG size variations. Also replace fio with pretty strange parameter set with a set of dd writes and TXG commits, just as we neeed here. While here, remove compression. It has nothing to do here, but waste CI CPU time. Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Tony Hutter <[email protected]>
The test writes 1M of 1KB blocks, which may produce up to 1GB of dirty data. On top of that ashift=12 likely produces additional 4GB of ZIO buffers during sync process. On top of that we likely need some page cache since the pool reside on files. And finally we need to cache the DDT. Not surprising that the test regularly ends up in OOMs, possibly depending on TXG size variations. Also replace fio with pretty strange parameter set with a set of dd writes and TXG commits, just as we neeed here. While here, remove compression. It has nothing to do here, but waste CI CPU time. Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Tony Hutter <[email protected]> (cherry picked from commit 1d8f625)
The test writes 1M of 1KB blocks, which may produce up to 1GB of dirty data. On top of that ashift=12 likely produces additional 4GB of ZIO buffers during sync process. On top of that we likely need some page cache since the pool reside on files. And finally we need to cache the DDT. Not surprising that the test regularly ends up in OOMs, possibly depending on TXG size variations. Also replace fio with pretty strange parameter set with a set of dd writes and TXG commits, just as we neeed here. While here, remove compression. It has nothing to do here, but waste CI CPU time. Signed-off-by: Alexander Motin <[email protected]> Sponsored by: iXsystems, Inc. Reviewed-by: Paul Dagnelie <[email protected]> Reviewed-by: Tony Hutter <[email protected]> (cherry picked from commit 1d8f625)
The test writes 1M of 1KB blocks, which may produce up to 1GB of dirty data. On top of that ashift=12 likely produces additional 4GB of ZIO buffers during sync process. On top of that we likely need some (up to 4GB of) page cache since the pool reside on files. And finally we need to cache the DDT. Not surprising that the test regularly ends up in OOMs, possibly depending on TXG size variations.
Also replace fio with pretty strange parameter set with a set of dd writes and TXG commits, just as we neeed here.
While here, remove compression. It has nothing to do here, but waste CI CPU time.
How Has This Been Tested?
Very briefly by hands. Lets see what CI say about it.
Types of changes
Checklist:
Signed-off-by
.