Hello, I would like to determine the CPU usage of a process on a "real-time" basis. That is, every few seconds (sampling period), I would like to compute its average CPU usage in the previous period. If this is too complex, it is also fine to simply compute the average CPU usage over the last few seconds, independently of the sampling period.
Currently, both top and htop use the "p_pctcpu" field of struct kinfo_proc.
But this is a moving average and it is not very reactive.
For example, a simple infinite loop ("while :; do :; done") takes 15
seconds to show up as 50% CPU usage, and 30 seconds to show up as 75% CPU
usage. Similarly, when a process stops, it takes time for its reported
CPU usage to decrease significantly.
I had a look at several other fields but none seem to match the intended
usage:
- p_cpticks looks good at first, but it's reset to 0 at unpredictable
times -- at each call to schedcpu() according to [1]. So it's not
easily usable from userspace.
- p_estcpu is described as a time average of p_cpticks, which looks like
the best candidate. However, in practice, it never goes above 36 even
for an infinite loop; on the other end of the spectrum, near-idle
processes exhibit high values of p_estcpu such as 16 or 17.
- p_rtime_{sec,usec} could be used by substracting two consecutive values
taken a few seconds apart. However, I have observed that this value is
not updated very often. Sometimes, it takes several minutes(!) to see
an increase in the reported rtime value.
- p_uticks, p_sticks and p_iticks behaves essentially the same as p_rtime,
with big jumps from time to time. I would guess that p_rtime is
computed from these 3 ticks values.
Did I miss something? What is the meaning of the values returned by
p_estcpu? If no solution exists currently, would it be acceptable to add
a variant of p_cpticks that keeps increasing without being reset?
I'm attaching a trace showing all these values during a few minutes for
the ksh infinite loop. I ran this on gcc220 on the GCC compile farm [2].
It is currently running OpenBSD 6.8.
Thanks,
Baptiste
[1] https://marc.info/?l=openbsd-misc&m=126349350517760&w=2
[2] https://cfarm.tetaneutral.net/machines/list/
[1628850341.403192] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850341.495126] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850341.495764] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850343.005514] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850344.515493] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850346.025826] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850347.536009] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850349.045610] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850350.555765] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850352.065621] pid=31244 cpticks=0, estcpu=0, rtime=0.003564, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850353.575882] pid=31244 cpticks=0, estcpu=0, rtime=0.003761, pctcpu=0, uticks=0, sticks=1, iticks=0 [1628850355.086090] pid=31244 cpticks=0, estcpu=0, rtime=0.004112, pctcpu=1, uticks=0, sticks=2, iticks=0 [1628850356.595829] pid=31244 cpticks=0, estcpu=0, rtime=0.004174, pctcpu=0, uticks=0, sticks=2, iticks=0 [1628850358.106328] pid=31244 cpticks=0, estcpu=0, rtime=0.004174, pctcpu=0, uticks=0, sticks=2, iticks=0 [1628850359.615888] pid=31244 cpticks=31, estcpu=25, rtime=0.004215, pctcpu=99, uticks=0, sticks=2, iticks=0 [1628850361.125749] pid=31244 cpticks=82, estcpu=36, rtime=0.004215, pctcpu=194, uticks=0, sticks=2, iticks=0 [1628850362.635961] pid=31244 cpticks=33, estcpu=33, rtime=0.004215, pctcpu=370, uticks=0, sticks=2, iticks=0 [1628850364.146414] pid=31244 cpticks=84, estcpu=36, rtime=0.004215, pctcpu=451, uticks=0, sticks=2, iticks=0 [1628850365.656123] pid=31244 cpticks=35, estcpu=34, rtime=0.004215, pctcpu=602, uticks=0, sticks=2, iticks=0 [1628850367.166191] pid=31244 cpticks=86, estcpu=36, rtime=0.004215, pctcpu=672, uticks=0, sticks=2, iticks=0 [1628850368.676229] pid=31244 cpticks=37, estcpu=34, rtime=0.004215, pctcpu=802, uticks=0, sticks=2, iticks=0 [1628850370.186306] pid=31244 cpticks=88, estcpu=36, rtime=0.004215, pctcpu=862, uticks=0, sticks=2, iticks=0 [1628850371.696161] pid=31244 cpticks=39, estcpu=35, rtime=0.004215, pctcpu=974, uticks=0, sticks=2, iticks=0 [1628850373.206417] pid=31244 cpticks=90, estcpu=36, rtime=0.004215, pctcpu=1026, uticks=0, sticks=2, iticks=0 [1628850374.716282] pid=31244 cpticks=41, estcpu=35, rtime=0.004215, pctcpu=1122, uticks=0, sticks=2, iticks=0 [1628850376.226488] pid=31244 cpticks=92, estcpu=36, rtime=0.004215, pctcpu=1167, uticks=0, sticks=2, iticks=0 [1628850377.736477] pid=31244 cpticks=43, estcpu=36, rtime=0.004215, pctcpu=1250, uticks=0, sticks=2, iticks=0 [1628850379.246333] pid=31244 cpticks=94, estcpu=36, rtime=0.004215, pctcpu=1288, uticks=0, sticks=2, iticks=0 [1628850380.756386] pid=31244 cpticks=45, estcpu=36, rtime=0.004215, pctcpu=1360, uticks=0, sticks=2, iticks=0 [1628850382.266434] pid=31244 cpticks=96, estcpu=36, rtime=0.004215, pctcpu=1393, uticks=0, sticks=2, iticks=0 [1628850383.776502] pid=31244 cpticks=47, estcpu=36, rtime=0.004215, pctcpu=1454, uticks=0, sticks=2, iticks=0 [1628850385.286564] pid=31244 cpticks=98, estcpu=36, rtime=0.004215, pctcpu=1483, uticks=0, sticks=2, iticks=0 [1628850386.796721] pid=31244 cpticks=49, estcpu=36, rtime=0.004215, pctcpu=1536, uticks=0, sticks=2, iticks=0 [1628850388.307027] pid=31244 cpticks=0, estcpu=26, rtime=0.004215, pctcpu=1584, uticks=0, sticks=2, iticks=0 [1628850389.816716] pid=31244 cpticks=51, estcpu=36, rtime=0.004215, pctcpu=1606, uticks=0, sticks=2, iticks=0 [1628850391.327039] pid=31244 cpticks=2, estcpu=26, rtime=0.004215, pctcpu=1647, uticks=0, sticks=2, iticks=0 [1628850392.836895] pid=31244 cpticks=53, estcpu=36, rtime=0.004215, pctcpu=1666, uticks=0, sticks=2, iticks=0 [1628850394.347144] pid=31244 cpticks=4, estcpu=27, rtime=0.004215, pctcpu=1701, uticks=0, sticks=2, iticks=0 [1628850395.857183] pid=31244 cpticks=55, estcpu=36, rtime=0.004215, pctcpu=1717, uticks=0, sticks=2, iticks=0 [1628850397.367226] pid=31244 cpticks=6, estcpu=27, rtime=0.004215, pctcpu=1748, uticks=0, sticks=2, iticks=0 [1628850398.877255] pid=31244 cpticks=57, estcpu=36, rtime=0.004215, pctcpu=1762, uticks=0, sticks=2, iticks=0 [1628850400.387625] pid=31244 cpticks=8, estcpu=28, rtime=0.004215, pctcpu=1788, uticks=0, sticks=2, iticks=0 [1628850401.897114] pid=31244 cpticks=59, estcpu=36, rtime=0.004215, pctcpu=1800, uticks=0, sticks=2, iticks=0 [1628850403.407169] pid=31244 cpticks=10, estcpu=28, rtime=0.004215, pctcpu=1823, uticks=0, sticks=2, iticks=0 [1628850404.917209] pid=31244 cpticks=61, estcpu=36, rtime=0.004215, pctcpu=1833, uticks=0, sticks=2, iticks=0 [1628850406.427264] pid=31244 cpticks=12, estcpu=30, rtime=0.004215, pctcpu=1853, uticks=0, sticks=2, iticks=0 [1628850407.937290] pid=31244 cpticks=63, estcpu=36, rtime=0.004215, pctcpu=1862, uticks=0, sticks=2, iticks=0 [1628850409.447631] pid=31244 cpticks=14, estcpu=30, rtime=0.004215, pctcpu=1879, uticks=0, sticks=2, iticks=0 [1628850410.957624] pid=31244 cpticks=65, estcpu=36, rtime=0.004215, pctcpu=1887, uticks=0, sticks=2, iticks=0 [1628850412.467719] pid=31244 cpticks=16, estcpu=31, rtime=0.004215, pctcpu=1901, uticks=0, sticks=2, iticks=0 [1628850413.977777] pid=31244 cpticks=67, estcpu=36, rtime=0.004215, pctcpu=1908, uticks=0, sticks=2, iticks=0 [1628850415.487606] pid=31244 cpticks=18, estcpu=31, rtime=0.004215, pctcpu=1920, uticks=0, sticks=2, iticks=0 [1628850416.997617] pid=31244 cpticks=69, estcpu=36, rtime=0.004215, pctcpu=1926, uticks=0, sticks=2, iticks=0 [1628850418.507682] pid=31244 cpticks=20, estcpu=32, rtime=0.004215, pctcpu=1936, uticks=0, sticks=2, iticks=0 [1628850420.018104] pid=31244 cpticks=71, estcpu=36, rtime=0.004215, pctcpu=1941, uticks=0, sticks=2, iticks=0 [1628850421.527761] pid=31244 cpticks=22, estcpu=32, rtime=0.004215, pctcpu=1950, uticks=0, sticks=2, iticks=0 [1628850423.037812] pid=31244 cpticks=73, estcpu=36, rtime=0.004215, pctcpu=1954, uticks=0, sticks=2, iticks=0 [1628850424.548167] pid=31244 cpticks=24, estcpu=33, rtime=0.004215, pctcpu=1962, uticks=0, sticks=2, iticks=0 [1628850426.058457] pid=31244 cpticks=75, estcpu=36, rtime=0.004215, pctcpu=1966, uticks=0, sticks=2, iticks=0 [1628850427.567990] pid=31244 cpticks=26, estcpu=33, rtime=0.004215, pctcpu=1973, uticks=0, sticks=2, iticks=0 [1628850429.077987] pid=31244 cpticks=77, estcpu=36, rtime=0.004215, pctcpu=1976, uticks=0, sticks=2, iticks=0 [1628850430.588037] pid=31244 cpticks=28, estcpu=34, rtime=0.004215, pctcpu=1982, uticks=0, sticks=2, iticks=0 [1628850432.098406] pid=31244 cpticks=79, estcpu=36, rtime=0.004215, pctcpu=1985, uticks=0, sticks=2, iticks=0 [1628850433.608400] pid=31244 cpticks=30, estcpu=35, rtime=0.004215, pctcpu=1990, uticks=0, sticks=2, iticks=0 [1628850435.118571] pid=31244 cpticks=81, estcpu=36, rtime=0.004215, pctcpu=1992, uticks=0, sticks=2, iticks=0 [1628850436.628849] pid=31244 cpticks=32, estcpu=36, rtime=0.004215, pctcpu=1996, uticks=0, sticks=2, iticks=0 [1628850438.138304] pid=31244 cpticks=83, estcpu=36, rtime=0.004215, pctcpu=1998, uticks=0, sticks=2, iticks=0 [1628850439.648614] pid=31244 cpticks=34, estcpu=36, rtime=0.004215, pctcpu=2002, uticks=0, sticks=2, iticks=0 [1628850441.158694] pid=31244 cpticks=85, estcpu=36, rtime=0.004215, pctcpu=2004, uticks=0, sticks=2, iticks=0 [1628850442.668880] pid=31244 cpticks=36, estcpu=36, rtime=0.004215, pctcpu=2008, uticks=0, sticks=2, iticks=0 [1628850444.178773] pid=31244 cpticks=87, estcpu=36, rtime=0.004215, pctcpu=2009, uticks=0, sticks=2, iticks=0 [1628850445.688788] pid=31244 cpticks=38, estcpu=36, rtime=0.004215, pctcpu=2011, uticks=0, sticks=2, iticks=0 [1628850447.198839] pid=31244 cpticks=89, estcpu=36, rtime=0.004215, pctcpu=2012, uticks=0, sticks=2, iticks=0 [1628850448.708934] pid=31244 cpticks=40, estcpu=36, rtime=0.004215, pctcpu=2014, uticks=0, sticks=2, iticks=0 [1628850450.218707] pid=31244 cpticks=91, estcpu=36, rtime=0.004215, pctcpu=2015, uticks=0, sticks=2, iticks=0 [1628850451.728755] pid=31244 cpticks=42, estcpu=36, rtime=0.004215, pctcpu=2017, uticks=0, sticks=2, iticks=0 [1628850453.239098] pid=31244 cpticks=93, estcpu=36, rtime=0.004215, pctcpu=2018, uticks=0, sticks=2, iticks=0 [1628850454.749090] pid=31244 cpticks=44, estcpu=36, rtime=0.004215, pctcpu=2020, uticks=0, sticks=2, iticks=0 [1628850456.259440] pid=31244 cpticks=95, estcpu=36, rtime=0.004215, pctcpu=2021, uticks=0, sticks=2, iticks=0 [1628850457.769006] pid=31244 cpticks=46, estcpu=36, rtime=0.004215, pctcpu=2023, uticks=0, sticks=2, iticks=0 [1628850459.279009] pid=31244 cpticks=97, estcpu=36, rtime=0.004215, pctcpu=2024, uticks=0, sticks=2, iticks=0 [1628850460.789108] pid=31244 cpticks=48, estcpu=36, rtime=0.004215, pctcpu=2026, uticks=0, sticks=2, iticks=0 [1628850462.299110] pid=31244 cpticks=99, estcpu=36, rtime=0.004215, pctcpu=2027, uticks=0, sticks=2, iticks=0 [1628850463.809219] pid=31244 cpticks=50, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850465.319212] pid=31244 cpticks=1, estcpu=28, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850466.829262] pid=31244 cpticks=52, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850468.339307] pid=31244 cpticks=3, estcpu=29, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850469.849362] pid=31244 cpticks=54, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850471.359476] pid=31244 cpticks=5, estcpu=29, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850472.869465] pid=31244 cpticks=56, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850474.379577] pid=31244 cpticks=7, estcpu=30, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850475.889564] pid=31244 cpticks=58, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850477.399615] pid=31244 cpticks=9, estcpu=30, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850478.909641] pid=31244 cpticks=60, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850480.420136] pid=31244 cpticks=11, estcpu=31, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850481.930040] pid=31244 cpticks=62, estcpu=36, rtime=0.004215, pctcpu=2028, uticks=0, sticks=2, iticks=0 [1628850483.440340] pid=31244 cpticks=13, estcpu=32, rtime=124.947794, pctcpu=2028, uticks=12494, sticks=2, iticks=0 [1628850484.949853] pid=31244 cpticks=64, estcpu=36, rtime=126.597762, pctcpu=2028, uticks=12659, sticks=2, iticks=0 [1628850486.459902] pid=31244 cpticks=15, estcpu=32, rtime=128.147761, pctcpu=2028, uticks=12814, sticks=2, iticks=0 [1628850487.969949] pid=31244 cpticks=66, estcpu=36, rtime=129.597727, pctcpu=2028, uticks=12959, sticks=2, iticks=0 [1628850489.480002] pid=31244 cpticks=17, estcpu=33, rtime=131.147723, pctcpu=2028, uticks=13114, sticks=2, iticks=0 [1628850490.990062] pid=31244 cpticks=68, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850492.500620] pid=31244 cpticks=19, estcpu=33, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850494.010162] pid=31244 cpticks=70, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850495.520200] pid=31244 cpticks=21, estcpu=33, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850497.030553] pid=31244 cpticks=72, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850498.540609] pid=31244 cpticks=23, estcpu=34, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850500.050645] pid=31244 cpticks=74, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850501.560854] pid=31244 cpticks=25, estcpu=34, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850503.070460] pid=31244 cpticks=76, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850504.580515] pid=31244 cpticks=27, estcpu=35, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850506.090609] pid=31244 cpticks=78, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850507.600589] pid=31244 cpticks=29, estcpu=35, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850509.110644] pid=31244 cpticks=80, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850510.620683] pid=31244 cpticks=31, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850512.130729] pid=31244 cpticks=82, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850513.640780] pid=31244 cpticks=33, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850515.150830] pid=31244 cpticks=84, estcpu=36, rtime=131.407724, pctcpu=2028, uticks=13140, sticks=2, iticks=0 [1628850516.660877] pid=31244 cpticks=0, estcpu=28, rtime=157.852534, pctcpu=2013, uticks=15784, sticks=2, iticks=0 [1628850518.170947] pid=31244 cpticks=0, estcpu=28, rtime=157.852534, pctcpu=1914, uticks=15784, sticks=2, iticks=0
signature.asc
Description: PGP signature

