У меня есть минимальный CentOS 6.3, 64-битный, выступающий в качестве шлюза с 4 сетевыми картами (1 Гбит / с), каждый из которых связан один для общего трафика и другой для частного, который выполняет NAT. Он имеет 6 ГБ оперативной памяти и 4 логических ядра. Мы использовали это в течение последних двух лет без каких-либо проблем.
У меня нет опыта работы с аппаратными маршрутизаторами, но я слышал, что у них меньше ОЗУ и ЦП, и они используют флэш-диски. Как может блок с низкой аппаратной конфигурацией работать лучше (например, обрабатывать больше одновременных соединений), чем машина с большим количеством оперативной памяти и процессора?
Каковы ограничивающие факторы, кроме IOS, использующего разные методы для этого?
linux
router
packetloss
Blue Gene
источник
источник
Ответы:
Асики .
Вместо того, чтобы использовать процессор общего назначения и программное обеспечение для конкретной задачи, вы можете пропустить программное обеспечение и просто заставить кремний справиться с задачей напрямую.
Высокопроизводительное сетевое оборудование использует ASIC вместо программного обеспечения для сложных в вычислительном отношении (но относительно логически простых) задач, таких как сравнение IP-адреса с огромной таблицей интернет-маршрутизации, проверка таблицы CAM для принятия решения о переключении или проверка пакета по ACL , Это имеет огромное значение для скорости этих чувствительных ко времени операций, обеспечивая существенное преимущество перед процессором общего назначения.
источник
most routers that do NAT use general purpose CPUs
Да, это верное утверждение, но он не знает о том, что многие из этих устройств переносят определенные операции на выделенные микросхемы (как ясно из моего полного ответа выше). Не думайте, что NAT и отслеживание соединений (что, я согласен, не встречается в ASIC в современных устройствах), думайте о таблице маршрутизации и выключении разгрузки.Высококачественный выделенный маршрутизатор может превзойти ПК с более быстрым процессором и большим объемом оперативной памяти, поскольку он может выполнять большую часть маршрутизации на аппаратном уровне.
По той же причине коммутатор Gigabit Ethernet стоимостью 60 долларов может превзойти ПК стоимостью 2000 долларов с 4 двухпортовыми картами GigE, выступающими в качестве коммутатора Ethernet. Переключатель построен с нуля, чтобы быть переключателем.
источник
"Кроме IOS"?
IOS имеет почти все значение. CentOS - операционная система общего назначения. Он спроектирован так, чтобы работать достаточно хорошо в очень широком диапазоне сценариев, используя широкий спектр различных аппаратных конфигураций. С другой стороны, IOS чрезвычайно хорошо настроен для обработки только тех рабочих нагрузок, которые вы ожидаете от части сетевого оборудования, используя очень специфические типы оборудования, которые вы найдете в оборудовании Cisco.
Точное знание того , на какие аппаратные средства вы программируете, значительно повысит производительность и совместимость.
источник
И программному, и аппаратному обеспечению есть, что сказать. У меня есть сравнение 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, и он также действует как система обнаружения вторжений и балансировщик нагрузки.
источник
AFAIK, это накладные расходы операционной системы общего назначения; независимо от того, насколько быстры ваши соединения, пакеты обрабатываются по принципу пакет за пакетом в контексте ядра, что увеличивает задержку и нагрузку на систему. Я полагаю, что это уже объяснено в других Ответах лучше, чем я мог сделать.
Сказав это, есть многообещающие новые технологии «растяжимости», растущие в популярности и выполнимости, которые могут создать более грозного конкурента из систем Linux как в этом, так и в других отношениях; т.е. InfiniBand
Посмотрите на следующие вопросы и ответы по StackOverflow: как реализован обход ядра TCP
Дальнейшее чтение:
источник
Обычно это происходит из-за отсутствия готовой конфигурации сетевого стека / устройств в Linux. Почти в 90% случаев ваш сетевой трафик обрабатывается CPU0, в то время как другие находятся в режиме ожидания. Если вы решите эту проблему, разница с аппаратными маршрутизаторами не будет такой существенной, как вы думаете. Вы должны настроить как минимум RSS или RPS (распределение обработки пакетов на основе драйвера / стека между процессорами).
Если вы действительно заботитесь о производительности своего роутера Linux и у вас достаточно времени, я рекомендую вам прочитать эту статью в блоге packagecloud (там также есть статья о передаче пакетов).
Если вам нужно взглянуть на дистрибутив, и вы считаете, что смотреть
while sleep 1; do cat $some_file_in_procfs; done
, оценивать маску процессора иsmp_affinity
писать вручную скучно, вы, вероятно, сочтете мой pet-project netutils-linux чрезвычайно полезным.источник