我应该使用 CPU 利用率还是系统负载?

我应该使用 CPU 利用率还是系统负载?

我过去ffmpeg将 H265 视频转码为 H264 流。从两个摄像头提取视频时,计算机似乎超出容量。

在此处输入图片描述

该机器配备了8核i7-7700T。我的问题是,我应该使用CPU利用率(460.7%,331.7%)还是平均负载来评估转码任务的CPU需求。

答案1

平均负载显示 1.5 和 15 分钟间隔内(5 秒帧内)运行和等待的进程数

CPU 利用率为您提供特定进程的处理器使用情况。这对您来说更有意义。您可以将所有ffmpeg进程的该值相加。

如果你想获取特定时刻整个系统的 CPU 利用率,你可以使用以下命令:

vmstat 1 2

(获取第二行,因为第一行是从系统启动时开始的平均值)

答案2

您应该使用平均负载来评估 CPU 需求。

要解释 CPU 使用率和平均负载数字,您应该考虑

  • 系统中物理核心的总数(所有 CPU)
  • 是否启用超线程
  • 在 Linux 中,平均负载还包括处于不间断睡眠状态、等待 I/O 的进程
  • CPU 使用率和平均负载数字的解释取决于逻辑核心的数量
  • 您应该检查每个核心的 CPU 统计数据,以确保更加准确。按top“1”查看每个核心的统计数据,按“t”查看图表条。

i7-7700T有4 个物理核心并启用 HT8 个逻辑核心 https://ark.intel.com/content/www/us/en/ark/products/97122/intel-core-i77700t-processor-8m-cache-up-to-3-80-ghz.html

CPU使用率, %
显示利用率——CPU 不空闲并执行 OS 调度程序安排的任务的时间百分比。

每个核心的使用率可达 100%,因此 8 个核心的最大使用容量为 800%。

因此两个 ffmpeg 进程占用全部 8 个核心的利用率分别为 460.7% + 331.7% = 792.4%。

此行中包含整个 CPU 统计数据

%Cpu(s):  19.9 us,  0.7 sy,  78.1 ni, 1.1 id,  0.0 wa,  0.0 hi,  0.1 si,  0.0 st

这里 19.9% 的用户空间时间 + 78.1% 的良好时间 = 用户空间程序 98% 的 CPU 使用率。

因此,CPU 核心被所有用户空间进程占用了 98%,其中 79.2% 正在执行两个 ffmpeg 进程。

由于转码是一项 CPU 密集型任务,因此任何 CPU 的利用率几乎总是接近 100%。

平均负载
是某一时间段内已执行的线程数 + 等待执行的线程数的平均值。

一个核心在一个时间片内执行一个线程。8
个核心可以在一个时间片内执行8个线程。

如果平均负载 > 逻辑核心数,则系统过载。
这意味着 OS 调度程序由于核心繁忙而无法将下一个时间片分配给某些线程,并将它们放入运行队列中等待执行。
在具有 8 个核心的系统上,平均负载中的第二个数字 = 25.65 意味着:

  • 过去 5 分钟内平均执行 8 个线程
  • 过去 5 分钟内,平均有 17.65 个线程在运行队列中等待

因此系统超载率为 17.65/8*100=220.6%。

相关内容