Я подозреваю, что это не то, что вы хотите. То, что у вас есть, даст вам информацию, но, возможно, не о том, как ее улучшить.
Обычно меня беспокоит измерение задержки при подключении к сокету при отправке / записи. Обычно это связано с измерением того, сколько времени я провожу между send () или сколько я жду в какой-либо форме recv ().
Есть пара вещей, за которыми обычно следят. Вы полагаетесь на сетевой уровень, чтобы собирать и буферизовать ваши посылки, или вы буферизуете и делаете отправку только тогда, когда хотите, чтобы данные вышли? Если в последнем случае вы обычно хотите отключить буферизацию nagle (см. Setsockopt и TCP_NODELAY) - но будьте осторожны, код не регрессирует.
Далее идет буферизация. Вы, вероятно, измеряете время, за которое данные попадают в буферизацию сокета, что будет практически мгновенным. Если вы используете потоковую передачу с подтверждением / согласованием ответных пакетов, это будет в среднем нормально в течение длительного периода. Вы можете связываться с буферизацией с помощью setsockopt () и SO_RCVBUF / SO_SNDBUF.
Я собираюсь добраться немного дальше. Если вы измеряете код, а не физическую сеть для perf, и отправляете и получаете пакеты в максимально больших блоках, есть еще две вещи, которые я обычно проверяю.
У вас есть протокол типа ACK. Код отправляет / recv в шаблон в принципе. Если так, то задержка, вероятно, будет самой большой проблемой. Существует множество способов решения этой проблемы: от разрешения нескольких ожидающих запросов, которые передаются независимо друг от друга, до реализации скользящих окон . Основная идея заключается в том, чтобы не прерывать поток данных.
Наконец, если вы имеете дело с recv (), вы обычно не хотите блокировать в recv, если вы на самом деле просто не хотите обрабатывать одно отношение сокетов на поток / процесс. Старое школьное решение было выбрано (), и оно все еще жизнеспособно для разумной масштабируемости. Для более масштабных решений вы можете обратиться к epoll (linux), kevents (osx) или IOCP (windows). Это позволяет вам перемещать бухгалтерию и (иногда) пул потоков обратно в ОС. Это то место, где вы хотите быть, если ваша проблема действительно в том, сколько данных я могу выкачать с этого NIC; но редко требуется, если вы не обрабатываете несколько соединений.
Извините, если я пропустил то, что вы действительно просили, но я попытался осветить общие проблемы.