Previously, when creating a snapshot in blobstore the snapshot's cluster map was copied from the "original" blob, with the original's map zeroed. These operations are both O(num_clusters*cluster_size/page_size) while io operations are frozen. This change replaces the linear operation with an O(1) pointer swap at the critical moment that io is frozen, while doing the zeroing before the freeze when preparing the snapshot to minimize freeze time. Change-Id: I1e468bc97623f5da161a8ddba1393c271acd3aed Signed-off-by: Amir More <habeanf@gmail.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/451486 Reviewed-by: Maciej Szwed <maciej.szwed@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> |
||
---|---|---|
.. | ||
bdev | ||
blob_bs_dev.c | ||
blobstore.c | ||
blobstore.h | ||
Makefile | ||
request.c | ||
request.h | ||
zeroes.c |