![在带有 -V 的 iperf3 命令中,CPU 利用率上的“s”和“u”字母是什么意思?](https://linux22.com/image/1514746/%E5%9C%A8%E5%B8%A6%E6%9C%89%20-V%20%E7%9A%84%20iperf3%20%E5%91%BD%E4%BB%A4%E4%B8%AD%EF%BC%8CCPU%20%E5%88%A9%E7%94%A8%E7%8E%87%E4%B8%8A%E7%9A%84%E2%80%9Cs%E2%80%9D%E5%92%8C%E2%80%9Cu%E2%80%9D%E5%AD%97%E6%AF%8D%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
我有一个非常简单的问题:当我在服务器和客户端上使用 Iperf3 时,我添加了参数 -V,这意味着它将显示更详细的信息,它显示有关服务器和客户端上 CPU 利用率的信息。显示信息的示例:
CPU Utilization: local/sender 0.2% (0.1%u/0.1%s), remote/receiver 11.5% (7.7%u/3.9%s)
我不知道这些字母“u”和“s”代表什么意思,所以这是我的问题,寻求您的帮助。
答案1
DavidPostill 的评论是正确的:它们代表你服务s系统。为了证明这一点,我们来看看代码。
我们找到字符串“CPU Utilization”在iperf_locale.c
。该文件似乎包含所有特定于语言的字符串,并且报告 CPU 使用率的行的变量称为report_cpu
。
const char report_cpu[] =
"CPU Utilization: %s/%s %.1f%% (%.1f%%u/%.1f%%s), %s/%s %.1f%% (%.1f%%u/%.1f%%s)\n";
我们发现使用的变量在iperf_api.c
。那里使用的函数似乎或多或少类似于printf
,它采用格式字符串(我们的report_cpu
)并用给定变量的人类可读版本替换其中的所有占位符。
iperf_printf(test, report_cpu, report_local, test->sender?report_sender:report_receiver, test->cpu_util[0], test->cpu_util[1], test->cpu_util[2], report_remote, test->sender?report_receiver:report_sender, test->remote_cpu_util[0], test->remote_cpu_util[1], test->remote_cpu_util[2]);
第四和第五个占位符,%.1f
即括号内的 s,就是我们要研究的。看起来函数的前两个参数分别是某种上下文和模板字符串,所以我们从第一个开始数report_local
。第四个是test->cpu_util[1]
。经过一番挖掘,我们发现这些三值cpu_util
数组是由在iperf_util.c
有趣的部分位于函数的最末尾cpu_util
:
pcpu[0] = (((ctemp - clast) * 1000000.0 / CLOCKS_PER_SEC) / timediff) * 100;
pcpu[1] = (userdiff / timediff) * 100;
pcpu[2] = (systemdiff / timediff) * 100;
插槽 1 和 2 确实分别基于用户时间和系统时间,而插槽 0 是总使用情况。