Почему аппаратный маршрутизатор работает лучше, чем маршрутизатор Linux с лучшими характеристиками (RAM и CPU)?

44

У меня есть минимальный CentOS 6.3, 64-битный, выступающий в качестве шлюза с 4 сетевыми картами (1 Гбит / с), каждый из которых связан один для общего трафика и другой для частного, который выполняет NAT. Он имеет 6 ГБ оперативной памяти и 4 логических ядра. Мы использовали это в течение последних двух лет без каких-либо проблем.

У меня нет опыта работы с аппаратными маршрутизаторами, но я слышал, что у них меньше ОЗУ и ЦП, и они используют флэш-диски. Как может блок с низкой аппаратной конфигурацией работать лучше (например, обрабатывать больше одновременных соединений), чем машина с большим количеством оперативной памяти и процессора?

Каковы ограничивающие факторы, кроме IOS, использующего разные методы для этого?

Blue Gene
источник
5
Реализации в оборудовании быстрее, чем прошивка быстрее, чем программное обеспечение для того же решения.
MDPC
3
Упоминаемые вами «лучшие характеристики» не имеют отношения к работе под рукой. Есть и другие свойства, которые действительно имеют значение.
ndim
Хорошо, так ... из того, что вы написали, я должен предположить, что ваш Centos является виртуальной машиной? Помимо специальных оптимизаций сети для виртуальных машин, как на гипервизоре, так и на гостевой стороне, виртуальные машины, как известно, не годятся для такой роли ... для использования в качестве маршрутизатора / брандмауэра всегда рекомендуется использовать голое железо !
забил камнями
Вы на самом деле маршрутизируете 1 Гбит / с трафика в соответствии с вашей конфигурацией? Вы можете использовать самосвал, чтобы переместить лопату, полную песка. 6 ГБ ОЗУ и 4 ядра в основном не требуются для маршрутизатора, вы можете сэкономить электроэнергию и место в стойке, используя для этого небольшую машину Intel Atom.
Берт

Ответы:

64

Асики .

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

Высокопроизводительное сетевое оборудование использует ASIC вместо программного обеспечения для сложных в вычислительном отношении (но относительно логически простых) задач, таких как сравнение IP-адреса с огромной таблицей интернет-маршрутизации, проверка таблицы CAM для принятия решения о переключении или проверка пакета по ACL , Это имеет огромное значение для скорости этих чувствительных ко времени операций, обеспечивая существенное преимущество перед процессором общего назначения.

Шейн Мэдден
источник
1
Хотя я согласен с Шейном, я бы выбрал iptables, работающий на универсальном сервере, поверх устройства в любой день. в моей компании iptables, работающий на fedora, работает быстрее, более гибок, проще в настройке, требует меньших затрат на процессор и память, быстрее загружается и намного дешевле, чем наша cisco asa.
rvh
@rvh: для межсетевого экрана или просто маршрутизации?
mveroone
2
и в целом, «скорость» здесь довольно слабый термин. Я уверен, что есть много ситуаций, когда ПК все еще может выполнить операцию «так быстро», как HW, или может иметь некоторую постоянную продолжительность, более длительную, чем HW. Но это действительно сводится к стабильности и «ударе по карману» - вы по-прежнему покупаете меньше ОЗУ / ЦП с устройством, но оно получает больше от него и делает только то, что нужно для достижения стабильности
Колин Годси
Этот ответ неверен по причине упущения. Просто выкрикивать «ASICs» также немного наивно, так как большинство маршрутизаторов, которые используют NAT, используют процессоры общего назначения, если только мы не собираемся достичь максимальной производительности. Также на самом деле аппаратные NAT-маршрутизаторы имеют более жесткие ограничения на количество одновременных подключений. ОП сталкивается с неправильной настройкой и использованием операционной системы, которая не подходит для этой задачи.
сдал экзамен
@ dualed most routers that do NAT use general purpose CPUsДа, это верное утверждение, но он не знает о том, что многие из этих устройств переносят определенные операции на выделенные микросхемы (как ясно из моего полного ответа выше). Не думайте, что NAT и отслеживание соединений (что, я согласен, не встречается в ASIC в современных устройствах), думайте о таблице маршрутизации и выключении разгрузки.
Шейн Мэдден
12

Высококачественный выделенный маршрутизатор может превзойти ПК с более быстрым процессором и большим объемом оперативной памяти, поскольку он может выполнять большую часть маршрутизации на аппаратном уровне.

По той же причине коммутатор Gigabit Ethernet стоимостью 60 долларов может превзойти ПК стоимостью 2000 долларов с 4 двухпортовыми картами GigE, выступающими в качестве коммутатора Ethernet. Переключатель построен с нуля, чтобы быть переключателем.

Дэвид Шварц
источник
3
А поскольку выделенный маршрутизатор работает на флэш-диске, в неподходящее время появляется меньше движущихся частей.
cpt_fink
3
Я не совсем уверен, что ты прав. Я создал очень простую защиту от DDOS для компании, в которой я работал, на основе netmap ( info.iet.unipi.it/~luigi/netmap ), и она работала очень хорошо даже на обычном оборудовании (на самом деле полный 1Gb / s или 11M) пакетов / сек). На этом сайте также имеется версия openswitch для netmap, которая может пересылать 3M пакетов в секунду на «обычном» оборудовании, я не знаю дешевого (500 $) коммутатора, который мог бы это сделать, но я могу ошибаться.
XzKto
2
@XzKto Типичный дешевый ($ 60) 5-портовый коммутатор GigE может пересылать пакеты между всеми комбинациями портов на полной скорости передачи данных. Обычно они используют полную неблокирующую перекладину.
Дэвид Шварц
@XzKto То, что имел в виду Дэвид, в отличие от ПК, который будет обрабатывать скорость «до своих собственных интерфейсов», коммутатор работает, если для каждой комбинации порт-порт. Вы можете иметь host1, говорящий с host2, и 3-4, и каждое соединение в дуплексном режиме и максимальной пропускной способности . Вы не можете победить это. (и за больше денег, больше портов, еще проще понять, почему это быстрее). А для маршрутизатора это похоже: аппаратное обеспечение сможет перенаправлять маршрут быстрее, чем программное обеспечение, так как оно может перенаправлять маршрутизатор, как только у него будет достаточно информации (ваш маршрутизатор linux сделает это на каждом уровне, но добраться туда уже будет медленнее)
Оливье Дюлак
11

"Кроме IOS"?

IOS имеет почти все значение. CentOS - операционная система общего назначения. Он спроектирован так, чтобы работать достаточно хорошо в очень широком диапазоне сценариев, используя широкий спектр различных аппаратных конфигураций. С другой стороны, IOS чрезвычайно хорошо настроен для обработки только тех рабочих нагрузок, которые вы ожидаете от части сетевого оборудования, используя очень специфические типы оборудования, которые вы найдете в оборудовании Cisco.

Точное знание того , на какие аппаратные средства вы программируете, значительно повысит производительность и совместимость.

Райан Райс
источник
3
+1. Добавьте к этому тот факт, что у Cisco есть технические ресурсы и ноу-хау для замены программного обеспечения аппаратным обеспечением при необходимости. Это означает, что если конкретная операция выполняется медленнее, чем хотелось бы в программном обеспечении, они могут приложить усилия для разработки ASIC, добавления инструкций к существующим процессорам или построения аппаратного модуля, чтобы ускорить его. Таблицы в подавляющем большинстве склоняются в пользу производительности, когда вы можете позволить себе роскошь управлять как программным, так и аппаратным обеспечением.
Джастин ᚅᚔᚈᚄᚒᚔ
Это работает в обе стороны тоже. Аппаратные средства не должны иметь дело с редкими и сложными случаями. Это просто бросает их в программное обеспечение. Маршрутные петли? Не пытайтесь понять, как с этим справиться.
MSalters
4

И программному, и аппаратному обеспечению есть, что сказать. У меня есть сравнение Intel и NIC TP-Link (которая использует чип Realtek в своей основе) на аппаратном обеспечении общего сервера, а также специализированное и универсальное программное обеспечение для маршрутизации.

С аппаратной стороны, если встроенная плата ASIC может выполнять некоторую обработку IP-трафика, загрузка процессора может быть ниже и, следовательно, быстрее. Я заметил, что два встроенных чипа INtel NIC обмениваются данными напрямую через DMA, минуя основной процессор при обработке пересылки пакетов; тем временем чип Realtek прерывает всякий раз, когда приходит пакет.

Со стороны программного обеспечения, если программное обеспечение предназначено для использования в маршрутизации, оно может быть сделано более эффективным. Я использовал как pfSense + PF (модифицированный FreeBSD, предназначенный для использования в качестве маршрутизатора), так и универсальный Ubuntu 12.04 + iptables в качестве программного обеспечения для маршрутизации, и первый явно переключал трафик намного быстрее. (Ubuntu 14.04 теперь почти такой же быстрый благодаря новым nftables в ядре Linux 3.13.)

Однако у выделенного маршрутизатора есть один существенный недостаток: он не может выполнять ничего, кроме переключения трафика, и его нельзя виртуализировать. Мой текущий пограничный маршрутизатор - это виртуальная машина внутри моего кластера ESXi, на которой работает Ubuntu 14.04, и он также действует как система обнаружения вторжений и балансировщик нагрузки.


источник
3

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

Сказав это, есть многообещающие новые технологии «растяжимости», растущие в популярности и выполнимости, которые могут создать более грозного конкурента из систем Linux как в этом, так и в других отношениях; т.е. InfiniBand

Посмотрите на следующие вопросы и ответы по StackOverflow: как реализован обход ядра TCP

Дальнейшее чтение:

ILMostro_7
источник
2

Обычно это происходит из-за отсутствия готовой конфигурации сетевого стека / устройств в Linux. Почти в 90% случаев ваш сетевой трафик обрабатывается CPU0, в то время как другие находятся в режиме ожидания. Если вы решите эту проблему, разница с аппаратными маршрутизаторами не будет такой существенной, как вы думаете. Вы должны настроить как минимум RSS или RPS (распределение обработки пакетов на основе драйвера / стека между процессорами).

Если вы действительно заботитесь о производительности своего роутера Linux и у вас достаточно времени, я рекомендую вам прочитать эту статью в блоге packagecloud (там также есть статья о передаче пакетов).

Если вам нужно взглянуть на дистрибутив, и вы считаете, что смотреть while sleep 1; do cat $some_file_in_procfs; done, оценивать маску процессора и smp_affinityписать вручную скучно, вы, вероятно, сочтете мой pet-project netutils-linux чрезвычайно полезным.

strizhechenko
источник