Reviewed by: Matthew Ahrens <[email protected]>
Reviewed by: John Kennedy <[email protected]>
Reviewed by: Dan Kimmel <[email protected]>

Details about the motivation of this feature and its usage can
be found in this blogpost:
https://sdimitro.github.io/post/zpool-checkpoint/

A lightning talk of this feature can be found here:
https://www.youtube.com/watch?v=fPQA8K40jAM

Implementation details can be found in big block comment of
spa_checkpoint.c

Side-changes that are relevant to this commit but not explained
elsewhere:
* renames metaslab trees to be shorter without losing meaning
* space_map_{alloc,truncate}() accept a block size as a
  parameter. The reason is that in the current state all space
  maps that we allocate through the DMU use a global tunable
  (space_map_blksz) which defauls to 4KB. This is ok for
  metaslab space maps in terms of bandwirdth since they are
  scattered all over the disk. But for other space maps this
  default is probably not what we want. Examples are device
  removal's vdev_obsolete_sm or vdev_chedkpoint_sm from this
  review. Both of these have a 1:1 relationship with each vdev
  and could benefit from a bigger block size.

Upstream Bugs: DLPX-49202, DLPX-48936, DLPX-48532, DLPX-46652,
    DLPX-51224, DLPX-51469, DLPX-52028, DLPX-53181, DLPX-52524,
    DLPX-56750, DLPX-57058, DLPX-57033
You can view, comment on, or merge this pull request online at:

  https://github.com/openzfs/openzfs/pull/560

-- Commit Summary --

  * 9166 zfs storage pool checkpoint

-- File Changes --

    M usr/src/cmd/mdb/common/modules/zfs/zfs.c (67)
    M usr/src/cmd/truss/codes.c (6)
    M usr/src/cmd/zdb/zdb.c (847)
    M usr/src/cmd/zdb/zdb_il.c (12)
    M usr/src/cmd/zpool/zpool_main.c (215)
    M usr/src/cmd/ztest/ztest.c (120)
    M usr/src/common/zfs/zfeature_common.c (7)
    M usr/src/common/zfs/zfeature_common.h (3)
    M usr/src/common/zfs/zpool_prop.c (4)
    M usr/src/lib/libzfs/common/libzfs.h (7)
    M usr/src/lib/libzfs/common/libzfs_pool.c (43)
    M usr/src/lib/libzfs/common/libzfs_util.c (29)
    M usr/src/lib/libzfs/common/mapfile-vers (2)
    M usr/src/lib/libzfs_core/common/libzfs_core.c (68)
    M usr/src/lib/libzfs_core/common/libzfs_core.h (3)
    M usr/src/lib/libzfs_core/common/mapfile-vers (9)
    M usr/src/man/man1m/zdb.1m (5)
    M usr/src/man/man1m/zpool.1m (93)
    M usr/src/man/man5/zpool-features.5 (20)
    M usr/src/pkg/manifests/system-test-zfstest.mf (52)
    A usr/src/test/zfs-tests/cmd/randwritecomp/Makefile (19)
    A usr/src/test/zfs-tests/cmd/randwritecomp/randwritecomp.c (192)
    M usr/src/test/zfs-tests/include/commands.cfg (1)
    M usr/src/test/zfs-tests/include/libtest.shlib (20)
    M usr/src/test/zfs-tests/runfiles/delphix.run (11)
    A usr/src/test/zfs-tests/runfiles/longevity.run (23)
    M usr/src/test/zfs-tests/runfiles/omnios.run (13)
    M usr/src/test/zfs-tests/runfiles/openindiana.run (13)
    M usr/src/test/zfs-tests/tests/functional/cli_root/zdb/zdb_001_neg.ksh (4)
    M 
usr/src/test/zfs-tests/tests/functional/cli_root/zpool_import/import_rewind_config_changed.ksh
 (36)
    A usr/src/test/zfs-tests/tests/functional/pool_checkpoint/Makefile (21)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_after_rewind.ksh
 (55)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_big_rewind.ksh
 (57)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_capacity.ksh 
(90)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_conf_change.ksh
 (43)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_discard.ksh 
(53)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_discard_busy.ksh
 (106)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_discard_many.ksh
 (52)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_indirect.ksh 
(59)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_invalid.ksh 
(80)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_lun_expsz.ksh
 (61)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_open.ksh (48)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_removal.ksh 
(72)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_rewind.ksh 
(49)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_ro_rewind.ksh
 (57)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_sm_scale.ksh 
(74)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_twice.ksh 
(40)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_vdev_add.ksh 
(63)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_zdb.ksh (80)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/checkpoint_zhack_feat.ksh
 (66)
    A usr/src/test/zfs-tests/tests/functional/pool_checkpoint/cleanup.ksh (23)
    A 
usr/src/test/zfs-tests/tests/functional/pool_checkpoint/pool_checkpoint.kshlib 
(392)
    A usr/src/test/zfs-tests/tests/functional/pool_checkpoint/setup.ksh (25)
    M usr/src/test/zfs-tests/tests/functional/removal/removal.kshlib (108)
    M 
usr/src/test/zfs-tests/tests/functional/removal/removal_remap_deadlists.ksh (5)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_reservation.ksh 
(9)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_add.ksh (14)
    M 
usr/src/test/zfs-tests/tests/functional/removal/removal_with_create_fs.ksh (9)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_export.ksh 
(31)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_remap.ksh 
(13)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_remove.ksh 
(9)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_scrub.ksh 
(13)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_send.ksh (11)
    M 
usr/src/test/zfs-tests/tests/functional/removal/removal_with_send_recv.ksh (13)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_snapshot.ksh 
(9)
    M usr/src/test/zfs-tests/tests/functional/removal/removal_with_zdb.ksh (15)
    A usr/src/test/zfs-tests/tests/longevity/Makefile (21)
    A usr/src/test/zfs-tests/tests/longevity/slop_space_test.ksh (255)
    M usr/src/uts/common/Makefile.files (1)
    M usr/src/uts/common/fs/zfs/dmu_traverse.c (14)
    M usr/src/uts/common/fs/zfs/dnode.c (4)
    M usr/src/uts/common/fs/zfs/dnode_sync.c (2)
    M usr/src/uts/common/fs/zfs/dsl_dataset.c (12)
    M usr/src/uts/common/fs/zfs/dsl_destroy.c (4)
    M usr/src/uts/common/fs/zfs/dsl_dir.c (37)
    M usr/src/uts/common/fs/zfs/dsl_pool.c (111)
    M usr/src/uts/common/fs/zfs/dsl_scan.c (145)
    M usr/src/uts/common/fs/zfs/dsl_synctask.c (124)
    M usr/src/uts/common/fs/zfs/dsl_userhold.c (5)
    M usr/src/uts/common/fs/zfs/metaslab.c (441)
    M usr/src/uts/common/fs/zfs/range_tree.c (10)
    M usr/src/uts/common/fs/zfs/spa.c (449)
    A usr/src/uts/common/fs/zfs/spa_checkpoint.c (623)
    M usr/src/uts/common/fs/zfs/spa_misc.c (77)
    M usr/src/uts/common/fs/zfs/space_map.c (149)
    M usr/src/uts/common/fs/zfs/sys/dmu.h (1)
    M usr/src/uts/common/fs/zfs/sys/dsl_dir.h (3)
    M usr/src/uts/common/fs/zfs/sys/dsl_pool.h (8)
    M usr/src/uts/common/fs/zfs/sys/dsl_synctask.h (41)
    M usr/src/uts/common/fs/zfs/sys/metaslab.h (6)
    M usr/src/uts/common/fs/zfs/sys/metaslab_impl.h (53)
    M usr/src/uts/common/fs/zfs/sys/range_tree.h (3)
    M usr/src/uts/common/fs/zfs/sys/spa.h (8)
    A usr/src/uts/common/fs/zfs/sys/spa_checkpoint.h (44)
    M usr/src/uts/common/fs/zfs/sys/spa_impl.h (5)
    M usr/src/uts/common/fs/zfs/sys/space_map.h (12)
    M usr/src/uts/common/fs/zfs/sys/uberblock_impl.h (24)
    M usr/src/uts/common/fs/zfs/sys/vdev.h (5)
    M usr/src/uts/common/fs/zfs/sys/vdev_impl.h (11)
    M usr/src/uts/common/fs/zfs/sys/vdev_removal.h (4)
    M usr/src/uts/common/fs/zfs/sys/zio.h (1)
    M usr/src/uts/common/fs/zfs/sys/zthr.h (1)
    M usr/src/uts/common/fs/zfs/uberblock.c (3)
    M usr/src/uts/common/fs/zfs/vdev.c (179)
    M usr/src/uts/common/fs/zfs/vdev_indirect.c (17)
    M usr/src/uts/common/fs/zfs/vdev_label.c (46)
    M usr/src/uts/common/fs/zfs/vdev_removal.c (78)
    M usr/src/uts/common/fs/zfs/zcp.c (2)
    M usr/src/uts/common/fs/zfs/zcp_synctask.c (9)
    M usr/src/uts/common/fs/zfs/zfs_ioctl.c (32)
    M usr/src/uts/common/fs/zfs/zil.c (109)
    M usr/src/uts/common/fs/zfs/zio.c (17)
    M usr/src/uts/common/fs/zfs/zthr.c (2)
    M usr/src/uts/common/sys/fs/zfs.h (36)

-- Patch Links --

https://github.com/openzfs/openzfs/pull/560.patch
https://github.com/openzfs/openzfs/pull/560.diff

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/openzfs/openzfs/pull/560

------------------------------------------
openzfs-developer
Archives: 
https://openzfs.topicbox.com/groups/developer/discussions/Td88f07fc9e296932-M497cde1d95406220e58313f4
Powered by Topicbox: https://topicbox.com

Reply via email to