![Linux 压力失速信息实际上是如何工作的](https://linux22.com/image/219962/Linux%20%E5%8E%8B%E5%8A%9B%E5%A4%B1%E9%80%9F%E4%BF%A1%E6%81%AF%E5%AE%9E%E9%99%85%E4%B8%8A%E6%98%AF%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%E7%9A%84.png)
我一直在阅读有关 Linux 4.20 中引入的 PSI 的背景知识。 PSI 指示 CPU、内存和 IO 等资源的竞争情况。对于找出性能问题的根本原因,这可能是一个非常有用的指标。所以我的假设是某个资源的 PSI 越高,例如从/proc/pressure/cpu
该节点的更多争用中获得的 cpu。为了研究这种行为,我在 Kubernetes 集群中进行了一个简单的实验。我使用了以下 pod 配置: 部署 pod 的节点有 88 个核心。
apiVersion: v1
kind: Pod
metadata:
name: stress-ng
labels:
app: stress-ng
spec:
containers:
- name: stress-ng
image: alexeiled/stress-ng:latest
imagePullPolicy: Always
command: [ '/stress-ng' ]
args:
- --matrix
- '5000'
- -t
- '5m'
resources:
requests:
memory: "5000Mi"
cpu: "5000m"
limits:
memory: "5000Mi"
cpu: "5000m"
nodeName: stressed-node1
虽然这个 Pod 仅使用 5 个核心,但在 30 秒内 PSI 上升到近 90%,如下所示
而节点的平均CPU利用率很低(<5%)。
我的理解是整个系统没有竞争,在这种情况下,高 PSI 只是由于这种明显的工作负载配置,我假设计算会考虑全局系统状态:
所以我的问题是:
- PSI实际上是如何计算的?
- 在这种情况下,PSI 是否具有误导性,或者我是否遗漏了什么?
我将不胜感激任何指点。