On Mon, May 14, 2018 at 03:39:33PM +0000, Christopher Lameter wrote: > On Mon, 7 May 2018, Johannes Weiner wrote: > > > What to make of this number? If CPU utilization is at 100% and CPU > > pressure is 0, it means the system is perfectly utilized, with one > > runnable thread per CPU and nobody waiting. At two or more runnable > > tasks per CPU, the system is 100% overcommitted and the pressure > > average will indicate as much. From a utilization perspective this is > > a great state of course: no CPU cycles are being wasted, even when 50% > > of the threads were to go idle (and most workloads do vary). From the > > perspective of the individual job it's not great, however, and they > > might do better with more resources. Depending on what your priority > > is, an elevated "some" number may or may not require action. > > This looks awfully similar to loadavg. Problem is that loadavg gets > screwed up by tasks blocked waiting for I/O. Isnt there some way to fix > loadavg instead? Counting iowaiting tasks is one thing, but there are a few more things that make it hard to use for telling the impact of CPU competition: - It's not normalized to available CPU count. The loadavg in isolation doesn't mean anything, and you have to know the number of CPUs and any CPU bindings / restrictions in effect, which presents at least some difficulty when monitoring a big heterogeneous fleet. - The way it's sampled makes it impossible to use for latencies. You could be mostly idle but periodically have herds of tasks competing for the CPU for short, low-latency operations. Even if we changed this in the implementation, you're still stuck with the interface that has... - ...a short-term load window of 1m. This is generally fairly coarse for something that can be loaded and unloaded as abruptly as the CPU I'm trying to fix these with a portable way of aggregating multi-cpu states, as well as tracking the true time spent in a state instead of sampling it. Plus a smaller short-term window of 10s, but that's almost irrelevant because I'm exporting the absolute state time clock so you can calculate your own averages over any time window you want. Since I'm using the same model and infrastructure for memory and IO load as well, IMO it makes more sense to present them in a coherent interface instead of trying to retrofit and change the loadavg file, which might not even be possible.