CPU 利用率计算
CPU utilization calculation
我在很多地方都读到,通过以下公式获得 CPU 利用率的一种简单而体面的方法是:
CPU utilization = 1 - p^n
其中:
p
- 阻塞时间
n
- 进程数
但我找不到解释。好像跟统计有关,但我想不通。
我的出发点是:如果我有 2 个等待时间为 50% 的进程,那么该公式将产生 1 - 1/4 = 75% CPU utilization
。但是我的错误逻辑引出了一个问题:如果一个进程在 I/O 上被阻塞,而另一个进程在第一个被阻塞时被换入 运行(无论爆发是什么),这意味着当一个进程等待时,第二个 运行s 和他们的等待时间重叠。那不是100% CPU utilization
吗?我认为只有当程序的前半部分保证 运行 而无需 IO 时,这才是正确的。
问题是:该公式如何考虑所有其他可能性?
你需要从概率的角度来思考。如果每个内核空闲(等待 IO)的概率为 0.5
,则 CPU 处于空闲状态的概率是所有内核处于空闲状态的概率同时。那是 0.5 * 0.5 = 0.25
所以 CPU 做功的概率是 1 - 0.25 = 0.75 = 75%
我在很多地方都读到,通过以下公式获得 CPU 利用率的一种简单而体面的方法是:
CPU utilization = 1 - p^n
其中:
p
- 阻塞时间n
- 进程数
但我找不到解释。好像跟统计有关,但我想不通。
我的出发点是:如果我有 2 个等待时间为 50% 的进程,那么该公式将产生 1 - 1/4 = 75% CPU utilization
。但是我的错误逻辑引出了一个问题:如果一个进程在 I/O 上被阻塞,而另一个进程在第一个被阻塞时被换入 运行(无论爆发是什么),这意味着当一个进程等待时,第二个 运行s 和他们的等待时间重叠。那不是100% CPU utilization
吗?我认为只有当程序的前半部分保证 运行 而无需 IO 时,这才是正确的。
问题是:该公式如何考虑所有其他可能性?
你需要从概率的角度来思考。如果每个内核空闲(等待 IO)的概率为 0.5
,则 CPU 处于空闲状态的概率是所有内核处于空闲状态的概率同时。那是 0.5 * 0.5 = 0.25
所以 CPU 做功的概率是 1 - 0.25 = 0.75 = 75%