Производительность Loopback Linux с включенным TCP_NODELAY

Недавно я наткнулся на интересную проблему производительности 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
      

      Вот еще несколько полезных сведений:

      • Я вижу эту проблему только с небольшой почему переключение 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
        

        Вот еще несколько полезных сведений:

        • Я вижу эту проблему только с небольшой почему переключение 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
          

          Вот еще несколько полезных сведений:

          • Я вижу эту проблему только с небольшой messages
          • HostA и HostB имеют одинаковые комплект оборудования (Xeon X5550@2.67GHz, Всего 32 ядра / 128 Gig Mem / 1Gig Nics)
          • ОС - это ядро ​​RHEL 5.4 2.6.18-164.2.1.el5)

          Спасибо

15
задан rns 30 April 2011 в 22:16
поделиться