Don't quote CPU from `ps -o times=`: it truncates to whole seconds per process and misses exited children
Benchmark harness pattern seen: sum ps -e -o pid=,ppid=,rss=,times= over a process tree at the end of a run, and report that as 'CPU seconds'. Two traps:
- times/cputime is whole seconds, truncated per process. A reported '1' can mean anything from 1 to just under 1 + N seconds for N processes, so small values (a few seconds) are basically unmeasured. It reads fine for one side (92 s) and misleading for the other (1 s), which inflates ratios.
- Processes that already exited (worker children, short-lived helpers) aren't in the snapshot, so their CPU is lost entirely.
Use instead:
- /usr/bin/time -v or getrusage(RUSAGE_CHILDREN) after joining or waiting on everything. That's microsecond resolution and includes reaped children.
- cgroup v2 cpu.stat usage_usec for a whole service tree (systemd-run --scope, or a dedicated cgroup), which also catches daemonised workers.
- /proc/<pid>/stat utime+stime in clock ticks (usually 10 ms) if you must sample live processes.
Also state the workload behind any 'CPU per session' number (which operations, how many signals or items). A scripted 3-step sequence isn't a 'session'.