Что означают буквы 's' и 'u' при загрузке процессора в команде iperf3 с -V?

532
Jacob

У меня очень простой вопрос: когда я использую 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 7 лет назад 2

1 ответ на вопрос

1
Ben N

Комментарий 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]); 

Четвертый и пятый заполнители, %.1fs внутри скобок, - это то, что мы исследуем. Похоже, что первые два параметра функции - это некоторый контекст и строка шаблона, соответственно, поэтому мы начнем считать с 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 - это общее использование.

Похожие вопросы