]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/commit
Speed up geom_stats_resync in the presence of many devices
authorAlan Somers <asomers@FreeBSD.org>
Sat, 27 Feb 2021 15:59:40 +0000 (08:59 -0700)
committerAlan Somers <asomers@FreeBSD.org>
Thu, 8 Apr 2021 21:33:09 +0000 (21:33 +0000)
commit8cfe6a4729f598d8a65d846a01184f1fabe2ebc7
tree4e1c1f193c0a4d57696f91ae75b311abd5b78eb0
parent9e9ef41bec1f1c7b4bbccecebb6d8fad92104f7b
Speed up geom_stats_resync in the presence of many devices

The old code had a O(n) loop, where n is the size of /dev/devstat.
Multiply that by another O(n) loop in devstat_mmap for a total of
O(n^2).

This change adds DIOCGMEDIASIZE support to /dev/devstat so userland can
quickly determine the right amount of memory to map, eliminating the
O(n) loop in userland.

This change decreases the time to run "gstat -bI0.001" with 16,384 md
devices from 29.7s to 4.2s.

Also, fix a memory leak first reported as PR 203097.

Sponsored by: Axcient
Reviewed by: mav, imp
Differential Revision: https://reviews.freebsd.org/D28968

(cherry picked from commit ab63da3564e8ab0907f9d8eb565774848ffdadeb)
lib/libgeom/geom_stats.c
sys/kern/subr_devstat.c