The past few tags are related to performance improvements. Namely:
- Reduction of binary size (1.0.10)
- Improved systemd pattern processing (1.0.11)
Especially the improvement of systemd pattern processing speeds up the gathering. Here are some CPU profilings on systems with ~650 processes matched by systemd patterns:
Before:
# time /usr/sbin/psstat --cache-name testing --systemd :php*fpm* | wc -c
69515
real 0m3.749s
user 0m1.855s
sys 0m0.697s
# go tool pprof psstat cpu.pprof
(pprof) top -cum
Showing nodes accounting for 10ms, 1.85% of 540ms total
Showing top 10 nodes out of 151
flat flat% sum% cum cum%
0 0% 0% 270ms 50.00% main.main
0 0% 0% 270ms 50.00% runtime.main
0 0% 0% 200ms 37.04% runtime.mcall
0 0% 0% 200ms 37.04% runtime.schedule
10ms 1.85% 1.85% 170ms 31.48% runtime.findrunnable
0 0% 1.85% 160ms 29.63% runtime.park_m
0 0% 1.85% 120ms 22.22% github.com/fuegas/psstat/process.PidsFromSystemdFlags
0 0% 1.85% 110ms 20.37% os/exec.(*Cmd).Output
0 0% 1.85% 110ms 20.37% os/exec.(*Cmd).Run
0 0% 1.85% 90ms 16.67% os/exec.(*Cmd).Start
After
# time /usr/sbin/psstat --cache-name testing --systemd :php*fpm* | wc -c
69513
real 0m1.275s
user 0m0.689s
sys 0m0.075s
# go tool pprof psstat cpu.pprof
(pprof) top -cum
Showing nodes accounting for 20ms, 13.33% of 150ms total
Showing top 10 nodes out of 86
flat flat% sum% cum cum%
0 0% 0% 110ms 73.33% main.main
0 0% 0% 110ms 73.33% runtime.main
20ms 13.33% 13.33% 50ms 33.33% github.com/fuegas/psstat/process.(*Process).SumResources
0 0% 13.33% 30ms 20.00% github.com/fuegas/psstat/process.(*Process).ParseStat
0 0% 13.33% 30ms 20.00% github.com/fuegas/psstat/process.GatherAllProcs
0 0% 13.33% 30ms 20.00% github.com/fuegas/psstat/process.GatherAllProcsSingleThreaded
0 0% 13.33% 30ms 20.00% github.com/fuegas/psstat/process.NewProcess
0 0% 13.33% 30ms 20.00% runtime.mallocgc
0 0% 13.33% 30ms 20.00% runtime.mapiternext
0 0% 13.33% 30ms 20.00% runtime.systemstack