Комментарий DavidPostill правильна: они стоят для и сер и ей ystem соответственно. Чтобы доказать это, давайте посмотрим на код.
Мы находим строку "Загрузка ЦП" в iperf_locale.c
. Этот файл содержит все строки, зависящие от языка, а переменная для строки, которая сообщает об использовании процессора, называется 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
внутри скобок - это то, что мы исследуем. Похоже, что первые два параметра функции - это некоторый контекст и строка шаблона, соответственно, поэтому мы начнем считать с параметра 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 - это общее использование.