Увеличение производительности при использовании одного сокета - PullRequest
0 голосов
/ 27 мая 2019

Я написал тесты игрушек, чтобы получить некоторый опыт работы с сетевыми сокетами Unix. Когда я использую один сокет для трафика TX и RX, он показывает большую производительность по сравнению с раздельными сокетами для RX и TX.

Я хочу понять причину такого поведения. Я могу объяснить этот результат для TCP из-за использования ACK, но я вижу похожие результаты для протокола UDP (~ + 20% производительности). В чем причина?

1 Ответ

0 голосов
/ 29 мая 2019

Нет причин для заключения.

По сути, код ядра не возражает, если вы отправляете данные по одному соединению или по двум.Единственные дополнительные задержки могут быть из-за дополнительной работы по открытию второго сокета тому же месту назначения, но никогда из-за использования ACK (ACK не является особым видом пакета, он просто включается в all пакеты, следующие за первым, и он представляет только порядковый номер и бит в сегменте tcp) или внутреннюю работу TCP (разница в том, что вы всегда выбираете один и тот же дескриптор сокета или другой)

Между прочим, как рекомендуется в некоторых комментариях, лучше, если вы покажете код, поскольку вы предполагаете, что ваш код правильный, и он на самом деле точно измеряет результаты, которые вы получаете, и, скорее всего, это неправильно, а вы нетрассмотрите дополнительную работу трехстороннего рукопожатия, которое вы должны установить второе соединение перед отправкой / приемом по второму соединению.

Установление соединения TCP включает в себя обмен тремя пакетами до того, как какие-либо фактические данные могут быть переданы и это включает в себя одну поездку туда и обратноВ половине случаев, чтобы установить, и то же самое, чтобы закрыть соединение, это означает, что ваше второе соединение добавит три полных обхода на другой конец (и больше, если вы соединяете оба сокета последовательно, один сначала, затем другой), так что в случае, если вынаходясь в локальной сети (например, 100 Мбит / с, с передачей туда и обратно 0,1 мс), вы добавите 0,3 мс ко времени второго случая (два соединения) только потому, что вам нужно установить и затем отключить соединения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...