Improve sorted scan memory accounting
Since we use two B-trees q_exts_by_size and q_exts_by_addr, we should count 2x sizeof (range_seg_gap_t) per node. And since average B-tree memory efficiency is about 75%, we should increase it to 3x. Previous code under-counted up to 30% of the memory usage. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Alexander Motin <mav@FreeBSD.org> Sponsored-By: iXsystems, Inc. Closes #13537
This commit is contained in:
parent
cc565f557b
commit
6ff89fe126
|
@ -1268,9 +1268,12 @@ dsl_scan_should_clear(dsl_scan_t *scn)
|
||||||
mutex_enter(&tvd->vdev_scan_io_queue_lock);
|
mutex_enter(&tvd->vdev_scan_io_queue_lock);
|
||||||
queue = tvd->vdev_scan_io_queue;
|
queue = tvd->vdev_scan_io_queue;
|
||||||
if (queue != NULL) {
|
if (queue != NULL) {
|
||||||
/* # extents in exts_by_size = # in exts_by_addr */
|
/*
|
||||||
|
* # of extents in exts_by_size = # in exts_by_addr.
|
||||||
|
* B-tree efficiency is ~75%, but can be as low as 50%.
|
||||||
|
*/
|
||||||
mused += zfs_btree_numnodes(&queue->q_exts_by_size) *
|
mused += zfs_btree_numnodes(&queue->q_exts_by_size) *
|
||||||
sizeof (range_seg_gap_t) + queue->q_sio_memused;
|
3 * sizeof (range_seg_gap_t) + queue->q_sio_memused;
|
||||||
}
|
}
|
||||||
mutex_exit(&tvd->vdev_scan_io_queue_lock);
|
mutex_exit(&tvd->vdev_scan_io_queue_lock);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue