Re: sysctl is too slow
- Reply: Alan Somers : "Re: sysctl is too slow"
- Reply: Joerg Sonnenberger : "Re: sysctl is too slow"
- In reply to: Alan Somers : "sysctl is too slow"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 16 Aug 2021 19:30:51 UTC
Last time I checked lookup of a sysctl was very bad with linear scans all over. Short of complete revamp of the entire thing I would start with replacing the scans with a RB tree at each level. As is if you indeed have 5000 datasets, you are doing increasingly longer walks. On 8/16/21, Alan Somers <asomers@freebsd.org> wrote: > ztop feels very sluggish on a server with 5000 ZFS datasets. Dtrace shows > that almost all of its time is spent in sys_sysctl. ktrace shows that both > ztop and sysctl(8) call sys_sysctl a total of five times for each sysctl > they care about: > > 1) To get the next oid > 2) To get the sysctl's name > 3) To get the oidfmt > 4) To get the size of the value > 5) To get the value itself. > > Each of these steps takes about equal time, and together all five take > about 100us. If the time per call is mostly syscall overhead, then the > process could be sped up by 80% by combining all of these things into a > single syscall: return the next oid, its name, its format, the size of its > value, and optimistically the value itself, assuming the user passed a > sufficiently large buffer. > > Am I missing something? Is there any other reason why sysctl is so slow? > Or should I forget about it, and try to export ZFS's dataset stats through > devstat instead? > -Alan > -- Mateusz Guzik <mjguzik gmail.com>