我有一个非常简单的问题:当我在服务器和客户端上使用 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 是总使用情况。