PSI cpu full 是什么意思?

PSI cpu full 是什么意思?

我发现了 文章关于 PSI,他们都说 cpu 只有“一些”指标。atop也只显示“cpu some”。

但我的系统有“cpu full”指标:

$ cat /proc/pressure/cpu
some avg10=0.05 avg60=0.33 avg300=0.33 total=5815043711
full avg10=0.00 avg60=0.02 avg300=0.06 total=1288113602

它应该测量所有任务都被 cpu 停止的时间,但是什么会导致这种情况发生呢?它实际上测量什么?

答案1

我也在徘徊同样的事情,但没有找到有效的解释。我的情况略有不同,因为我正在查看 cgroup PSI 文件。
因此我查看了linux内核源代码。 psi.c

[psi.c]
当然,系统级别的CPU资源不存在FULL状态,而是存在于cgroup级别。在 cgroup 级别,FULL 表示 cgroup 中的所有非空闲任务都在 CPU 资源上延迟,该资源正被 cgroup 外部的其他任务使用,或者受到 cgroup cpu.max 配置的限制。

full不应该在 中提供/proc/pressure/cpu。它没有任何意义。在主机上,不可能因为CPU资源不足而导致所有任务同时阻塞。任何时候都可以运行等于 CPU 数量的数量(前提是它们不被内存或 IO 阻塞,但这反映在其他文件中)。
如果您使用虚拟化(容器)或 cgroup 来限制特定工作负载的最大资源,则该full值可以存在于/sys/fs/cgroup/<cgroup_name>/cpu.pressure.如果该数字大于 0,则意味着所有 CPU 都被 cgroup 外部的任务使用,因此 cgroup 内的所有任务由于缺乏 CPU 资源而被阻塞在 cgroup 内。
由于 RAM 或 IO 造成的停顿反映在各自的文件中,而不是 CPU 压力中。

如果系统确实显示full/proc/pressure/cpu则必须是某种奇特的配置,或者可能是虚拟化系统用 cgroup 值覆盖文件。

答案2

搜索来源,卢克。从内核文档中,在内核树中找到Documentation/accounting/psi.rst

The "some" line indicates the share of time in which at least some
tasks are stalled on a given resource.

The "full" line indicates the share of time in which all non-idle
tasks are stalled on a given resource simultaneously. In this state
actual CPU cycles are going to waste, and a workload that spends
extended time in this state is considered to be thrashing. This has
severe impact on performance, and it's useful to distinguish this
situation from a state where some tasks are stalled but the CPU is
still doing productive work. As such, time spent in this subset of the
stall state is tracked separately and exported in the "full" averages.

答案3

您可以使用工具手动对系统施加压力stress-ng并监控CPU负载。

./stress-ng --cpu 5 --aggressive -a 0 --timeout 5m & watch -n 1 'cat /proc/pressure/cpu'

这可以给出如下指标:

some avg10=31.57 avg60=8.96 avg300=2.02 total=6285744
full avg10=0.77 avg60=0.22 avg300=0.05 total=235866

这里你可以清楚地看到满载也更新了。

相关内容