vdev_file: make FLUSH and TRIM asynchronous #17064
Merged
+23
−22
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
[Sponsors: Klara, Inc., Wasabi Technology, Inc.]
Motivation and Context
zfs_file_fsync()
andzfs_file_deallocate()
are both blocking ops, so the zio_taskq thread is active and blocked both while waiting for the IO call and then while calling zio_execute() for the next stage. This is a particular issue for FLUSH, as thez_flush_iss
queue typically only has one thread; multiple flushes arriving at once can cause long delays if the underlyingfsync()
response is particularly slow.Description
To fix this, we dispatch both FLUSH and TRIM to the
z_vdev_file
taskq just as we do for reads and writes. Further, we return all results throughzio_interrupt()
, so neither the issue nor the file taskqs are blocked.How Has This Been Tested?
ZTS run completed.
In a heavy
fsync()
workload on file-backed pools on a slow underlying device (a slow zvol in this case), throughput bump of ~100x. ymmv.Types of changes
Checklist:
Signed-off-by
.