Маршрутизатор ограничивает производительность сети, но ее загрузка ЦП не составляет 100%

Я использую ПК Механизмы устройство APU под управлением FreeBSD как маршрутизатор NAT. Установка очень обычна: одно соединение WAN и одно соединение LAN.

Теоретически, соединение WAN составляет 800/40 Мбит/с и LAN, каждый - 1/1 Гбит в сек. На практике маршрутизатор подключен через Gigabit Ethernet и к модему (WAN) и к переключателю Netgear (LAN).

Если я включаю быстрый ПК прямо к соединению WAN (модем), я могу достигнуть фактических скоростей загрузки приблизительно 700 Мбит/с. Но если маршрутизатор является промежуточным, существуют серьезные скорости хита и загрузки производительности, никогда не добираются выше 350 Мбит/с.

Который мог быть легко объяснен маршрутизатором, не являющимся достаточно мощным.

Вещь, я пытался видеть то, что продолжалось, и при попытке истратить соединение (фактическая пропускная способность, измеряемая, будучи 350 Мбит/с), центральные процессоры маршрутизатора, оба бездельничают 30% времени.

Я понимаю, что это означает, что ЦП не является узким местом. Но затем, что? Существует ли способ диагностировать то, что маршрутизатор на самом деле делает более точно и почему он только работает на половине способности?

Для создания моего вопроса более ясным, вот некоторые дополнительные детали.

Во-первых, визуальное представление проблемы:

Visual representation

Затем и для ссылки, вывода top -S -C -H -P -s1 -ocpu

Когда существует очень мало трафика в маршрутизаторе:

last pid: 14077;  load averages:  0.00,  0.00,  0.00    up 0+18:13:58  12:02:53
118 processes: 3 running, 98 sleeping, 17 waiting
CPU 0:  0.0% user,  0.0% nice,  0.8% system,  0.0% interrupt, 99.2% idle
CPU 1:  0.0% user,  0.0% nice,  0.8% system,  0.0% interrupt, 99.2% idle
Mem: 16M Active, 89M Inact, 130M Wired, 497M Buf, 3678M Free
Swap: 8192M Total, 8192M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME     CPU COMMAND
   11 root     155 ki31     0K    32K CPU1    1  18.0H 100.00% idle{idle: cpu1}
   11 root     155 ki31     0K    32K RUN     0  18.0H 100.00% idle{idle: cpu0}
14077 root      20    0 21996K  3120K CPU0    0   0:00   0.10% top
   12 root     -92    -     0K   272K WAIT    1   5:22   0.00% intr{irq259: re0
   12 root     -92    -     0K   272K WAIT    0   4:21   0.00% intr{irq260: re1
    9 root     -16 ki-1     0K    16K pollid  0   1:51   0.00% idlepoll
   12 root     -60    -     0K   272K WAIT    0   1:40   0.00% intr{swi4: clock
    0 root     -16    0     0K   160K swapin  1   0:37   0.00% kernel{swapper}
    5 root     -16    -     0K    16K pftm    0   0:31   0.00% pf purge
24147 root      20    0 12464K  2176K select  0   0:25   0.00% apinger
11846 root      52   20 17144K  2692K wait    1   0:12   0.00% sh
52774 root      20    0 28172K 18060K select  1   0:10   0.00% ntpd{ntpd}
   15 root     -16    -     0K    16K -       0   0:09   0.00% rand_harvestq
87531 dhcpd     20    0 24820K 13576K select  1   0:08   0.00% dhcpd
44974 unbound   20    0 47020K 19840K kqread  0   0:08   0.00% unbound{unbound}
   20 root      16    -     0K    16K syncer  0   0:05   0.00% syncer

И когда я пытаюсь истратить соединение WAN (и только получил 318 Мбит/с в этом случае):

last pid: 41402;  load averages:  0.02,  0.01,  0.00    up 0+18:15:40  12:04:35
118 processes: 4 running, 98 sleeping, 16 waiting
CPU 0:  0.0% user,  0.0% nice,  0.7% system, 34.3% interrupt, 64.9% idle
CPU 1:  0.0% user,  0.0% nice,  0.0% system, 68.7% interrupt, 31.3% idle
Mem: 16M Active, 89M Inact, 130M Wired, 497M Buf, 3678M Free
Swap: 8192M Total, 8192M Free

  PID USERNAME PRI NICE   SIZE    RES STATE   C   TIME     CPU COMMAND
   11 root     155 ki31     0K    32K CPU0    0  18.0H  82.86% idle{idle: cpu0}
   11 root     155 ki31     0K    32K RUN     1  18.1H  69.87% idle{idle: cpu1}
   12 root     -92    -     0K   272K WAIT    1   5:27  32.86% intr{irq259: re0
   12 root     -92    -     0K   272K CPU0    0   4:23  17.19% intr{irq260: re1
14077 root      20    0 21996K  3232K CPU0    0   0:01   0.10% top
    9 root     -16 ki-1     0K    16K pollid  0   1:51   0.00% idlepoll
   12 root     -60    -     0K   272K WAIT    0   1:40   0.00% intr{swi4: clock
    0 root     -16    0     0K   160K swapin  0   0:37   0.00% kernel{swapper}
    5 root     -16    -     0K    16K pftm    1   0:31   0.00% pf purge
24147 root      20    0 12464K  2176K select  0   0:25   0.00% apinger
11846 root      52   20 17144K  2692K wait    0   0:12   0.00% sh
52774 root      20    0 28172K 18060K select  1   0:10   0.00% ntpd{ntpd}
   15 root     -16    -     0K    16K -       0   0:09   0.00% rand_harvestq
87531 dhcpd     20    0 24820K 13576K select  1   0:08   0.00% dhcpd
44974 unbound   20    0 47020K 19840K kqread  1   0:08   0.00% unbound{unbound}
   20 root      16    -     0K    16K syncer  0   0:05   0.00% syncer
3
задан 4 February 2015 в 12:40
6 ответов

Я разработал плату на физическом чипе Realtek RTL8211E и могу вас заверить, что она способна работать на гигабитной скорости :) (на самом деле 10/100/1000). Единственная проблема с этим физическим чипом была бы в том, если бы он не был подключен к процессору через гигабитный интерфейс (например, RGMII). Мне не удалось найти в Интернете схему печатной платы вашего маршрутизатора, чтобы проверить ее.

Однако, как я уже писал ранее, это скорее похоже на несоответствие дуплексного режима.

2
ответ дан 3 December 2019 в 05:25

Это могло быть что-то, связанное с сетевыми картами и путём между ними и ядром / процессором (включая обработку прерываний). Вам следует взглянуть на проверку различных настроек «разгрузки» (извините, я недостаточно знаком с FreeBSD, чтобы предложить правильный инструмент). Также поищите любые другие настройки драйвера сетевой карты, которые можно изменить, и поэкспериментируйте с ними.

1
ответ дан 3 December 2019 в 05:25

ЦП вообще не простаивает, одно ядро ​​68,7%, другое 34,3% занято, обработка прерываний не простаивает. Простаивает пользовательское пространство, а не ядро.

Не знаком с openbsd, можете ли вы установить привязку процессора, чтобы одно ядро ​​обрабатывало irq259, а другое - irq260. Затем посмотрите, насколько занято каждое ядро.

1
ответ дан 3 December 2019 в 05:25

Учитывая, что ЦП используется не на 100%, возникает вопрос, что еще в системе ограничивает производительность.

Могу поспорить, что у Ethernet-чипов просто нет заряда. Согласно ссылке в вопросе, ваша плата использует чип Realtek RTL8111E. Я не знаю ничего конкретного об этом чипе, но я знаю, что не все карты / чипы Ethernet созданы равными. Краткий поиск в Google предполагает, что Realtek не особо уважаемый бренд.

В моем собственном тестировании несколько лет назад я обнаружил, что «серверные» карты Intel PCIE могут легко работать на линейной скорости даже при отключенных всех функциях разгрузки, но «клиентские» карты Intel PCIE не могут. Серверная карта стоила 120 долларов,карта клиента 30 долларов. Иди разберись.

Одна вещь, которая может улучшить пропускную способность, но может снизить задержку, - это посмотреть, включено ли объединение прерываний (термин Linux - не уверен, как настроить на freeBSD).

0
ответ дан 3 December 2019 в 05:25

Как насчет «средней нагрузки» после некоторого время делать спидтест? Достигается ли когда-нибудь 1?

Если это не процессор, может быть, что-то не так с некоторыми нижними уровнями? Я предлагаю проверить, показывает ли ethtool или mii-tool 1000FD в обоих случаях (с маршрутизатором посередине и без него). Может быть, ваша плата маршрутизатора принудительно устанавливает какие-то параметры соединения и, возможно, у вас проблема несоответствия дуплексного режима?

Не могли бы вы запустить «iperf -s» на своем маршрутизаторе, чтобы проверить, как происходит соединение между вашим клиентом и маршрутизатором?

С уважением

1
ответ дан 3 December 2019 в 05:25

Это довольно старая тема, но я думал, что все равно внесу свой вклад. Узким местом в вашем случае является ЦП . Этот ЦП имеет 4 ядра, вы, вероятно, исчерпываете одно из ядер, и openBSD предположительно использует один поток для маршрутизации.

Я проводил тестирование пропускной способности системы APU в нескольких операционных системах. Результаты для BSD и Linux различаются.

Операционные системы на основе BSD (OpenBSD, pfSense и т. Д.) Работают со скоростью 622 Мбит / с на APU, в то время как системы на базе Linux (IPFire, DD-wrt и т. легкость.

Вот более подробная информация о выполненном тесте: https://teklager.se/en/knowledge-base/apu2c0-ipfire-throughput-test-much-faster-pfsense/

И вот тест пропускной способности для BSD: https://teklager.se/en/knowledge-base/apu2c0-pfsense-network-throughput-test/

Если вы не привержены OpenBSD, попробуйте IPFire. Это даст вам полную гигабитную пропускную способность.

1
ответ дан 3 December 2019 в 05:25

Теги

Похожие вопросы