]> git.proxmox.com Git - mirror_zfs-debian.git/blame - debian/patches/2000-increase-default-zcmd-allocation-to-256K.patch
gbp-dch: update
[mirror_zfs-debian.git] / debian / patches / 2000-increase-default-zcmd-allocation-to-256K.patch
CommitLineData
7c82c597
CIK
1Increase default zcmd allocation to 256K (LP: #567557)
2
3When creating hundreds of clones (for example using containers with
4LXD) cloning slows down as the number of clones increases over time.
5The reason for this is that the fetching of the clone information
6using a small zcmd buffer requires two ioctl calls, one to determine
7the size and a second to return the data. However, this requires
8gathering the data twice, once to determine the size and again to
9populate the zcmd buffer to return it to userspace.
10
11These are expensive ioctl() calls, so instead, make the default buffer
12size much larger: 256K. This may sound large, but on 64 bit systems
13running ZFS this is not a huge chunk of memory for the speed
14improvement we gains for large sets of clones:
15
16 16K zcmd 256K zcmd
17Clones Time Clones Time Clone % improvement
18 (secs) per sec (secs) per sec
19100 7 14.29 5 20.00 28.57
20200 10 20.00 9 22.22 10.00
21300 19 15.79 18 16.67 5.26
22400 22 18.18 22 18.18 0.00
23500 29 17.24 29 17.24 0.00
24600 39 15.38 39 15.38 0.00
25700 46 15.22 45 15.56 2.17
26800 58 13.79 51 15.69 12.07
27900 74 12.16 61 14.75 17.57
281000 90 11.11 74 13.51 17.78
291100 98 11.22 87 12.64 11.22
301200 102 11.76 95 12.63 6.86
311300 113 11.50 104 12.50 7.96
321400 143 9.79 109 12.84 23.78
331500 145 10.34 132 11.36 8.97
341600 165 9.70 145 11.03 12.12
351700 187 9.09 156 10.90 16.58
361800 210 8.57 166 10.84 20.95
371900 226 8.41 183 10.38 19.03
382000 256 7.81 198 10.10 22.66
392200 311 7.07 238 9.24 23.47
402400 373 6.43 271 8.86 27.35
412600 487 5.34 316 8.23 35.11
423000 619 4.85 426 7.04 31.18
433400 915 3.72 549 6.19 40.00
444000 1332 3.00 923 4.33 30.71
45
46As one can see, with > 2000 clones we get 25-40% speed
47improvement.
48
49This patch was originally suggested by Brian Behlendorf
50(see https://github.com/zfsonlinux/zfs/issues/6372), however
51this fix is a more generic fix to cover all zcmd cases.
52
53Signed-off-by: Colin Ian King <colin.king@canonical.com>
54
55Index: zfs/lib/libzfs/libzfs_util.c
56===================================================================
57--- zfs.orig/lib/libzfs/libzfs_util.c
58+++ zfs/lib/libzfs/libzfs_util.c
59@@ -1354,7 +1354,7 @@ int
60 zcmd_alloc_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, size_t len)
61 {
62 if (len == 0)
63- len = 16 * 1024;
64+ len = 256 * 1024;
65 zc->zc_nvlist_dst_size = len;
66 zc->zc_nvlist_dst =
67 (uint64_t)(uintptr_t)zfs_alloc(hdl, zc->zc_nvlist_dst_size);