Недавно я наткнулся на интересную проблему производительности TCP при выполнении некоторых тестов производительности, которые сравнивали производительность сети с производительностью loopback. В моем случае производительность сети превысила производительность loopback (сеть 1Gig, та же подсеть). В случае, когда я имею дело, задержки имеют решающее значение, поэтому TCP_NODELAY включен. Лучшая теория, которую мы придумали, заключается в том, что контроль перегрузки TCP задерживает пакеты. Мы провели некоторый анализ пакетов, и мы определенно видим, что пакеты задерживаются, но причина не очевидна. Теперь вопросы ...
1) В каких случаях и почему обмен данными по шлейфу будет медленнее, чем по сети?
2) При максимальной скорости отправки, почему при переключении TCP_NODELAY гораздо больше влияние на максимальную пропускную способность по шлейфу, чем по сети?
3) Как мы можем обнаружить и проанализировать контроль перегрузки TCP в качестве потенциального объяснения низкой производительности?
4) Есть ли у кого-нибудь другие теории относительно причины за это явление? Если да, какой метод доказательства теории?
Вот несколько примеров данных, сгенерированных простым приложением C ++ точка-точка:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130
Вот еще несколько полезных сведений:
1) В каких случаях и почему обмен данными по шлейфу будет медленнее, чем по сети?
2) При максимальной скорости отправки, почему переключение TCP_NODELAY имеет гораздо больше возможностей влияние на максимальную пропускную способность по шлейфу, чем по сети?
3) Как мы можем обнаружить и проанализировать контроль перегрузки TCP в качестве потенциального объяснения низкой производительности?
4) Есть ли у кого-нибудь другие теории относительно причины за это явление? Если да, какой метод доказательства теории?
Вот несколько примеров данных, сгенерированных простым приложением C ++ точка-точка:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130
Вот еще несколько полезных сведений:
1) В каких случаях и почему обмен данными по шлейфу будет медленнее, чем по сети?
2) При максимальной скорости отправки, почему переключение TCP_NODELAY имеет гораздо больше возможностей влияние на максимальную пропускную способность по шлейфу, чем по сети?
3) Как мы можем обнаружить и проанализировать контроль перегрузки TCP в качестве потенциального объяснения низкой производительности?
4) Есть ли у кого-нибудь другие теории относительно причины за это явление? Если да, какой метод доказательства теории?
Вот несколько примеров данных, сгенерированных простым приложением C ++ точка-точка:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130
Вот еще несколько полезных сведений:
3) Как мы можем обнаружить и проанализировать контроль перегрузки TCP в качестве потенциального объяснения низкой производительности?
4) Есть ли у кого-нибудь есть другие теории относительно причины этого явления? Если да, какой метод доказательства теории?
Вот несколько примеров данных, сгенерированных простым приложением C ++ точка-точка:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130
Вот еще несколько полезных сведений:
3) Как мы можем обнаружить и проанализировать контроль перегрузки TCP в качестве потенциального объяснения низкой производительности?
4) Есть ли у кого-нибудь есть другие теории относительно причины этого явления? Если да, какой метод доказательства теории?
Вот несколько примеров данных, сгенерированных простым приложением C ++ точка-точка:
Transport Message Size (bytes) TCP NoDelay Send Buffer (bytes) Sender Host Receiver Host Throughput (bytes/sec) Message Rate (msgs/sec) TCP 128 On 16777216 HostA HostB 118085994 922546 TCP 128 Off 16777216 HostA HostB 118072006 922437 TCP 128 On 4096 HostA HostB 11097417 86698 TCP 128 Off 4096 HostA HostB 62441935 487827 TCP 128 On 16777216 HostA HostA 20606417 160987 TCP 128 Off 16777216 HostA HostA 239580949 1871726 TCP 128 On 4096 HostA HostA 18053364 141041 TCP 128 Off 4096 HostA HostA 214148304 1673033 UnixStream 128 - 16777216 HostA HostA 89215454 696995 UnixDatagram 128 - 16777216 HostA HostA 41275468 322464 NamedPipe 128 - - HostA HostA 73488749 574130
Вот еще несколько полезных сведений:
Спасибо