diff options
author | Pawel Jakub Dawidek <[email protected]> | 2012-05-29 10:50:50 -0700 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2012-06-14 09:49:04 -0700 |
commit | 0cee24064a79f9c01fc4521543c37acea538405f (patch) | |
tree | cc7429b7bc14f057aade9bea66a72a39e6a5a23c /include | |
parent | 74497b7ab6af69434453e03c755d3f6e6e655aee (diff) |
Speed up 'zfs list -t snapshot -o name -s name'
FreeBSD #xxx: Dramatically optimize listing snapshots when user
requests only snapshot names and wants to sort them by name, ie.
when executes:
# zfs list -t snapshot -o name -s name
Because only name is needed we don't have to read all snapshot
properties.
Below you can find how long does it take to list 34509 snapshots
from a single disk pool before and after this change with cold and
warm cache:
before:
# time zfs list -t snapshot -o name -s name > /dev/null
cold cache: 525s
warm cache: 218s
after:
# time zfs list -t snapshot -o name -s name > /dev/null
cold cache: 1.7s
warm cache: 1.1s
NOTE: This patch only appears in FreeBSD. If/when Illumos picks up
the change we may want to drop this patch and adopt their version.
However, for now this addresses a real issue.
Ported-by: Brian Behlendorf <[email protected]>
Issue #450
Diffstat (limited to 'include')
-rw-r--r-- | include/libzfs.h | 2 | ||||
-rw-r--r-- | include/sys/zfs_ioctl.h | 3 |
2 files changed, 3 insertions, 2 deletions
diff --git a/include/libzfs.h b/include/libzfs.h index 26b1ce302..86e23ac32 100644 --- a/include/libzfs.h +++ b/include/libzfs.h @@ -516,7 +516,7 @@ extern int zfs_iter_root(libzfs_handle_t *, zfs_iter_f, void *); extern int zfs_iter_children(zfs_handle_t *, zfs_iter_f, void *); extern int zfs_iter_dependents(zfs_handle_t *, boolean_t, zfs_iter_f, void *); extern int zfs_iter_filesystems(zfs_handle_t *, zfs_iter_f, void *); -extern int zfs_iter_snapshots(zfs_handle_t *, zfs_iter_f, void *); +extern int zfs_iter_snapshots(zfs_handle_t *, boolean_t, zfs_iter_f, void *); extern int zfs_iter_snapshots_sorted(zfs_handle_t *, zfs_iter_f, void *); typedef struct get_all_cb { diff --git a/include/sys/zfs_ioctl.h b/include/sys/zfs_ioctl.h index e3fd2c3fc..4e5c5fba2 100644 --- a/include/sys/zfs_ioctl.h +++ b/include/sys/zfs_ioctl.h @@ -286,7 +286,8 @@ typedef struct zfs_cmd { boolean_t zc_temphold; uint64_t zc_action_handle; int zc_cleanup_fd; - uint8_t zc_pad[4]; /* alignment */ + uint8_t zc_simple; + uint8_t zc_pad[3]; /* alignment */ uint64_t zc_sendobj; uint64_t zc_fromobj; uint64_t zc_createtxg; |