Сетевой пакет вышел из строя / дубликаты ACK

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

Датацентр имеет управляемую сеть, к которой у меня нет доступа, но мы отвечаем за управление нашими хостами в нем.

Основная информация

  • У нас есть одиннадцать хостов (все Debian Squeeze) в среде DataCenter (Dell R210s и R710s).
  • Каждый хост имеет два активных интерфейса, которые настраиваются в активной / пассивной настройке bond0 (eth0 и eth1).
  • Сетевой стек на хостах в основном соответствует настройке Debian по умолчанию, мы не работаем с попытками оптимизации производительности или подобными.
  • Проблема идентична / реплицируется на любом из одиннадцати хостов, однако относится только к трафику, который пересекает границу сети (то есть не относится к трафику между самими внутренними хостами).
  • Служба поддержки DataCenter подключила ноутбук к тому же коммутатору, что и остальные хосты, и не может воссоздать проблему; и, следовательно, сказал, что это должно быть проблема конфигурации с самими внутренними хостами, а не проблема с сетью.

Эта проблема

При исходящих передачах передача начинается быстро с большим размером окна, но на удаленном сервере пакеты принимаются не по порядку, что, в свою очередь, приводит к отправке дублированных ACK. В коротком порядке размер окна значительно сократился (он стабилизируется от 40000 до 60000 байт), и скорость передачи увеличилась с мегабайт в секунду до ~200-300 КБ / с.

На входящих передачах все в порядке (где "штраф" определяется как устойчивые скорости передачи 2 МБ / с).

Таким образом, передача SCP 20 МБ файла OUT центра обработки данных начнется с ~ 2,2 МБ / с, но снизится до ~275 КБ / с и займет в общей сложности 01m14 с, в то время как передача SCP того же 20 МБ файла в ЦОД начнется. на уровне ~ 2,2 МБ / с, оставайтесь стабильными между ~ 2,0-2,2 МБ / с и заканчивайте в 00m09 с.

Что я попробовал

  • Я убедился, что между хостами и сетевым оборудованием нет путаницы в переговорах - все каналы рассматриваются как полнодуплексный 1GbE всеми сторонами.
  • Я пытался отключить масштабирование окна.
  • Я попытался сжать net.ipv4.tcp_rmem и net.ipv4.tcp_wmem из их значений по умолчанию в Debian.
  • Я попытался отключить bond0 и просто передать файлы через интерфейс eth0 простой Джейн.
  • Я пытался перенести на несколько удаленных внешних конечных точек; у всех одна и та же проблема (т. е. я уверен, что проблема на стороне центра обработки данных, а не на другом конце).
  • Я запустил mtr проверки маршрутов к нескольким внешним конечным точкам (на всех из которых я могу воспроизвести проблему) - маршруты разнородны (совсем не похожи после нескольких прыжков), и хотя некоторые из них показывают некоторый уровень потери пакетов; тот факт, что поведение одинаково во всех конечных точках (которые имеют разные маршруты и разные уровни потери пакетов), заставляет меня полагать, что проблема заключается не в чем-то большем, чем три или четыре прыжка от внутреннего DC (поскольку они являются общими прыжками для каждого маршрута - и эти переходы не показывают каких-либо значительных уровней потери пакетов).

Ниже приведен анализ трафика входящего / исходящего трафика (с точки зрения хоста в DC). Как вы можете видеть, есть (очень) регулярные дубликаты ACK, которые поддерживают скорость передачи намного ниже, чем она должна быть. Также обратите внимание, что при входящем переводе такой же проблемы не возникает.

tshark -r outbound-bond0.pcap -q -z io,stat,1,\
  "COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission",\
  "COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack",\
  "COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment",\
  "COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission"
===================================================================
IO Statistics
Interval: 1.000 secs
Column #0: COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission
Column #1: COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack
Column #2: COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment
Column #3: COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission
                |   Column #0    |   Column #1    |   Column #2    |   Column #3    
Time            |          COUNT |          COUNT |          COUNT |          COUNT 
000.000-001.000                 8               22                0                2 
001.000-002.000                 4               28                0                3 
002.000-003.000                 4               33                0                4 
003.000-004.000                 4               25                0                3 
004.000-005.000                 3               28                0                3 
005.000-006.000                 4               38                0                4 
006.000-007.000                 6               22                0                4 
007.000-008.000                 4               14                0                2 
008.000-009.000                 5               33                0                4 
009.000-010.000                 1               10                0                1 
010.000-011.000                 4               25                0                2 
011.000-012.000                 2               25                0                2 
012.000-013.000                 3               35                0                3 
013.000-014.000                 2               23                0                2 
014.000-015.000                 4               50                0                4 
015.000-016.000                 3               22                0                2 
016.000-017.000                 5               28                0                3 
017.000-018.000                 3               29                0                3 
018.000-019.000                 3               31                0                3 
019.000-020.000                 5               17                0                2 
020.000-021.000                 4               40                0                4 
021.000-022.000                 7               27                0                3 
022.000-023.000                 5               37                0                4 
023.000-024.000                10               17                0                1 
024.000-025.000                 3               10                0                1 
025.000-026.000                 4                9                0                2 
026.000-027.000                 3               10                0                1 
027.000-028.000                 4               47                0                4 
028.000-029.000                 5               35                0                4 
029.000-030.000                 3               14                0                2 
030.000-031.000                 9               24                0                3 
031.000-032.000                 4               20                0                3 
032.000-033.000                 6               37                0                5 
033.000-034.000                 3               19                0                3 
034.000-035.000                 3               17                0                1 
035.000-036.000                 3               42                0                3 
036.000-037.000                 6               49                0                5 
037.000-038.000                 1                7                0                1 
038.000-039.000                 9               59                0                6 
039.000-040.000                 3               23                0                3 
040.000-041.000                 1               12                0                1 
041.000-042.000                 4               39                0                2 
042.000-043.000                 6               15                0                0 
043.000-044.000                 2               25                0                2 
044.000-045.000                 3               41                0                3 
045.000-046.000                 1                8                0                1 
===================================================================

tshark -r inbound-bond0.pcap -q -z io,stat,1,\
  "COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission",\
  "COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack",\
  "COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment",\
  "COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission"
===================================================================
IO Statistics
Interval: 1.000 secs
Column #0: COUNT(tcp.analysis.retransmission) tcp.analysis.retransmission
Column #1: COUNT(tcp.analysis.duplicate_ack)tcp.analysis.duplicate_ack
Column #2: COUNT(tcp.analysis.lost_segment) tcp.analysis.lost_segment
Column #3: COUNT(tcp.analysis.fast_retransmission) tcp.analysis.fast_retransmission
                |   Column #0    |   Column #1    |   Column #2    |   Column #3    
Time            |          COUNT |          COUNT |          COUNT |          COUNT 
000.000-001.000                 0                0                0                0 
001.000-002.000                 0                0                0                0 
002.000-003.000                 0                0                0                0 
003.000-004.000                 0                0                0                0 
004.000-005.000                 0                0                0                0 
005.000-006.000                 0                0                0                0 
006.000-007.000                 0                0                0                0 
007.000-008.000                 1               26                1                0 
008.000-009.000                 1               70                0                1 
009.000-010.000                21              184                5                4 
010.000-011.000                 4               42                4                2 
011.000-012.000                 9               48                3                2 
012.000-013.000                 0                0                0                0 
013.000-014.000                 0                0                0                0 
014.000-015.000                 1               29                1                1 
===================================================================

Честно говоря, я в полной растерянности. Предложения о том, что попробовать дальше, очень приветствуются.

1 ответ

Если вы уверены, что проблема вызвана неупорядоченными пакетами, то я легко могу вспомнить одну вещь, которая может привести к тому, что ваши пакеты выйдут из строя: многоканальный etherchannel где-то между вами и границей DC настроен для пакетной циклической балансировки нагрузки. попросите вашего провайдера найти именно это.

Другие вопросы по тегам