HomeFreeBSD

Parallel pool import

Description

Parallel pool import

This commit allow spa_load() to drop the spa_namespace_lock so
that imports can happen concurrently. Prior to dropping the
spa_namespace_lock, the import logic will set the spa_load_thread
value to track the thread which is doing the import.

Consumers of spa_lookup() retain the same behavior by blocking
when either a thread is holding the spa_namespace_lock or the
spa_load_thread value is set. This will ensure that critical
concurrent operations cannot take place while a pool is being
imported.

The zpool command is also enhanced to provide multi-threaded support
when invoking zpool import -a.

Lastly, zinject provides a mechanism to insert artificial delays
when importing a pool and new zfs tests are added to verify parallel
import functionality.

Contributions-by: Don Brady <don.brady@klarasystems.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: George Wilson <gwilson@delphix.com>
Closes #16093

Details

Provenance
George Wilson <george.wilson@delphix.com>Authored on Apr 22 2024, 4:42 PM
GitHub <noreply@github.com>Committed on Apr 22 2024, 4:42 PM
Parents
rGf4f156157de3: abd_iter_page: rework to handle multipage scatterlists
Branches
Unknown
Tags
Unknown