Комментарий DavidPostill правильна: они стоят ˙U сер и ей 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
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 - это общее использование.