Что означают буквы 's' и 'u' при загрузке процессора в команде iperf3 с -V?
У меня очень простой вопрос: когда я использую Iperf3 с моим сервером и на клиенте, я добавляю параметр -V, что означает, что он будет отображать более подробную информацию, он отображает информацию об использовании процессора на сервере и клиенте. Пример отображаемой информации:
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 верен: они означают u ser и sy stem, соответственно. Чтобы доказать это, давайте посмотрим на код.
Мы находим строку "Загрузка процессора" в 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 - это общее использование.