Linux 压力失速信息实际上是如何工作的

Linux 压力失速信息实际上是如何工作的

我一直在阅读有关 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 是否具有误导性,或者我是否遗漏了什么?

我将不胜感激任何指点。

相关内容