diff options
author | Alan Somers <[email protected]> | 2021-01-21 13:55:54 -0700 |
---|---|---|
committer | GitHub <[email protected]> | 2021-01-21 12:55:54 -0800 |
commit | 2d8f72d76c8b928c51d38d50a3f4f75144db3f85 (patch) | |
tree | de54d568d62a965e347b22772c24ef59a06b2db9 /lib | |
parent | e50b5217e7a85f1466edf88d5f3ea5aed0c2fd22 (diff) |
zpool: speed up importing large pools (#11469)
The ZFS_IOC_POOL_TRYIMPORT ioctl returns an nvlist from the kernel to a
preallocated buffer in userland. Userland must guess how large the
buffer should be. If it undersizes it, it must reallocate and try
again. That can cost a lot of time for large pools.
OpenZFS commit 28b40c8a6e3 set the guess at "zc.zc_nvlist_conf_size * 4"
without explanation. On my system, that is too small. From experiment,
x 32 is a better multiplier. But I don't know how to calculate it
theoretically.
Sponsored by: Axcient
Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Alek Pinchuk <[email protected]>
Signed-off-by: Alan Somers <[email protected]>
Closes #11469
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libzfs/libzfs_import.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/libzfs/libzfs_import.c b/lib/libzfs/libzfs_import.c index 44d3ade49..64fa31c67 100644 --- a/lib/libzfs/libzfs_import.c +++ b/lib/libzfs/libzfs_import.c @@ -77,7 +77,7 @@ refresh_config(libzfs_handle_t *hdl, nvlist_t *config) if (zcmd_write_conf_nvlist(hdl, &zc, config) != 0) return (NULL); - dstbuf_size = MAX(CONFIG_BUF_MINSIZE, zc.zc_nvlist_conf_size * 4); + dstbuf_size = MAX(CONFIG_BUF_MINSIZE, zc.zc_nvlist_conf_size * 32); if (zcmd_alloc_dst_nvlist(hdl, &zc, dstbuf_size) != 0) { zcmd_free_nvlists(&zc); |