mirror_zfs/cmd
George Wilson 93cf20764a Illumos #4101, #4102, #4103, #4105, #4106
4101 metaslab_debug should allow for fine-grained control
4102 space_maps should store more information about themselves
4103 space map object blocksize should be increased
4105 removing a mirrored log device results in a leaked object
4106 asynchronously load metaslab
Reviewed by: Matthew Ahrens <mahrens@delphix.com>
Reviewed by: Adam Leventhal <ahl@delphix.com>
Reviewed by: Sebastien Roy <seb@delphix.com>
Approved by: Garrett D'Amore <garrett@damore.org>

Prior to this patch, space_maps were preferred solely based on the
amount of free space left in each. Unfortunately, this heuristic didn't
contain any information about the make-up of that free space, which
meant we could keep preferring and loading a highly fragmented space map
that wouldn't actually have enough contiguous space to satisfy the
allocation; then unloading that space_map and repeating the process.

This change modifies the space_map's to store additional information
about the contiguous space in the space_map, so that we can use this
information to make a better decision about which space_map to load.
This requires reallocating all space_map objects to increase their
bonus buffer size sizes enough to fit the new metadata.

The above feature can be enabled via a new feature flag introduced by
this change: com.delphix:spacemap_histogram

In addition to the above, this patch allows the space_map block size to
be increase. Currently the block size is set to be 4K in size, which has
certain implications including the following:

    * 4K sector devices will not see any compression benefit
    * large space_maps require more metadata on-disk
    * large space_maps require more time to load (typically random reads)

Now the space_map block size can adjust as needed up to the maximum size
set via the space_map_max_blksz variable.

A bug was fixed which resulted in potentially leaking an object when
removing a mirrored log device. The previous logic for vdev_remove() did
not deal with removing top-level vdevs that are interior vdevs (i.e.
mirror) correctly. The problem would occur when removing a mirrored log
device, and result in the DTL space map object being leaked; because
top-level vdevs don't have DTL space map objects associated with them.

References:
  https://www.illumos.org/issues/4101
  https://www.illumos.org/issues/4102
  https://www.illumos.org/issues/4103
  https://www.illumos.org/issues/4105
  https://www.illumos.org/issues/4106
  https://github.com/illumos/illumos-gate/commit/0713e23

Porting notes:

A handful of kmem_alloc() calls were converted to kmem_zalloc(). Also,
the KM_PUSHPAGE and TQ_PUSHPAGE flags were used as necessary.

Ported-by: Tim Chase <tim@chase2k.com>
Signed-off-by: Prakash Surya <surya1@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2488
2014-07-22 09:39:16 -07:00
..
arcstat sighandler() should take 2 arguments 2014-03-20 11:03:46 -07:00
dbufstat Python 3 fixes 2013-11-08 14:30:29 -08:00
fsck_zfs Add /sbin/fsck.zfs helper 2013-01-09 16:54:58 -08:00
mount_zfs Add full SELinux support 2013-12-19 10:37:31 -08:00
vdev_id vdev_id: support per-channel slot mappings 2014-01-17 11:17:54 -08:00
zdb Illumos #4101, #4102, #4103, #4105, #4106 2014-07-22 09:39:16 -07:00
zed Replace zed_file_create_dirs() with mkdirp() 2014-04-09 13:32:54 -07:00
zfs Only automatically mount a clone when 'canmount == on'. 2014-06-06 12:30:35 -07:00
zhack Illumos 4168, 4169, 4170: ztest, zdb and zhack fixes 2014-07-17 11:37:57 -07:00
zinject Make command line guid parsing more tolerant 2014-04-02 13:10:08 -07:00
zpios Fix error message in zpios 2014-01-29 15:11:56 -08:00
zpool Add information about the -o option to zpool replace 2014-06-27 08:31:07 -07:00
zstreamdump Remove superfluous statement 2014-05-30 17:02:37 -07:00
ztest ztest: Switch to LWP rwlock interface 2014-05-01 15:53:58 -07:00
zvol_id cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
Makefile.am Initial implementation of zed (ZFS Event Daemon) 2014-04-02 13:10:03 -07:00