在带有 -V 的 iperf3 命令中,CPU 利用率上的“s”和“u”字母是什么意思?

在带有 -V 的 iperf3 命令中,CPU 利用率上的“s”和“u”字母是什么意思?

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

相关内容