Чому апаратний маршрутизатор працює краще, ніж маршрутизатор Linux з кращими характеристиками (оперативна пам'ять та процесор)?


44

У мене мінімальний CentOS 6.3, 64-бітний функціонує як шлюз із 4 NIC (1 Гбіт / с), кожен пов'язаний разом один для публічного трафіку та інший для приватного, який виконує NATING. Він має 6 ГБ оперативної пам’яті та 4 логічних ядра. Ми використовуємо це останні два роки без проблем.

У мене немає досвіду роботи з апаратними маршрутизаторами, але я чув, що у них менше оперативної пам’яті та процесора та використовують флеш-диски. Як ящик із низькою апаратною конфігурацією може працювати краще (наприклад, обробляти більше одночасних з'єднань), ніж машина з більшою кількістю оперативної пам'яті та процесора?

Які є обмежувальні фактори, крім IOS, що використовують різні методи для вирішення цього питання?


5
Реалізація апаратних засобів швидша, ніж прошивка швидша, ніж програмне забезпечення для того ж рішення.
mdpc

3
"Кращі характеристики", які ви згадуєте, не мають значення для роботи. Є й інші властивості, які насправді мають значення.
ndim

Гаразд, так ... з того, що ви написали, чи слід вважати, що ваш Centos - це віртуальна машина? Окрім спеціальних оптимізацій мережі для віртуальних машин, як на гіпервізорній, так і на гостьовій сторонах, як правило, віртуальні машини не є хорошими в цій ролі ... Для використання в якості маршрутизатора / брандмауера завжди рекомендується голий метал !
Каменювали

Ви насправді маршрутизуєте 1Gbps трафіку, як це запропоновано вашою конфігурацією? Можливо, ви використовуєте смітник, щоб перемістити лопату, повну піску. 6 Гб оперативної пам’яті та 4 ядра в основному ніколи не торкаються маршрутизатора, ви можете заощадити електроенергію та простору, використовуючи невелику машину Intel Atom для виконання цієї роботи.
Берт

Відповіді:


64

ASIC .

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

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


1
хоча я погоджуюся з Шеном, я б обирала iptables, що працюють на загальному сервері через пристрій будь-який день. в моїй компанії iptables, які працюють на Fedora, швидше, гнучкіше, простіше в налаштуванні, менше оподаткування процесора та пам’яті, швидше завантажуватися та значно дешевше, ніж наша cisco asa.
rvh

@rvh: для брандмауера або просто маршрутизації?
mveroone

2
і загалом, «швидкість» - тут досить вільний термін. Я впевнений, що існує багато ситуацій, коли ПК все ще може зробити операцію «так швидко», як HW, або, можливо, має деяку постійну тривалість, яка займає більше часу, ніж HW. Але це насправді зводиться до стабільності та "баг за ваш долар" - ви все одно купуєте менше оперативної пам’яті / процесора з приладом, але він отримує більше від нього, і робить лише те, що потрібно, щоб отримати стабільність
Колін Годсей

Ця відповідь є помилковою через упущення. Просто кричати "ASIC" - це також трохи наївно, оскільки більшість маршрутизаторів, які NAT використовують центральні процесори загального призначення, якщо тільки ми не будемо вкрай продуктивними. Також фактично апаратно-NAT-роутери мають більш сильні обмеження щодо кількості одночасних підключень. Операція з ОП - це неправильне налаштування та використання операційної системи, яка не відповідає задачі.
прострочено

@daaled most routers that do NAT use general purpose CPUsТак, це правдиве твердження, але не зважаючи на те, що багато хто з цих пристроїв завантажують конкретні операції на виділені мікросхеми (як видно з мого повного відповіді вище). Не думайте, що NAT і відстеження з'єднання (що, я згоден, не відбувається в ASIC в сучасних пристроях), подумайте про таблицю маршрутизації та переключення вимикання.
Шейн Мадден

12

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

Це та сама причина, що комутатор гігабітного Ethernet в розмірі 60 доларів може перевершити ПК на $ 2000 з 4 двопортовими GigE-картами, які діють як комутатор Ethernet. Вимикач побудований з нуля, щоб бути вимикачем.


3
А оскільки виділений маршрутизатор працює на флеш-диску, є менше рухомих деталей, щоб вийти з ладу в невідповідний час.
cpt_fink

3
Я не дуже впевнений, що ти маєш рацію. Я створив дуже базовий анти-DDOS захист для компанії, над якою працював на основі netmap ( info.iet.unipi.it/~luigi/netmap ), і він працював дуже добре навіть на звичайному апаратному забезпеченні (дійсно повний 1Gb / s або 11M пакети / сек). На цьому сайті також є версія openwitch для netmap, яка може пересилати 3M пакети / сек на "звичайному" апаратному забезпеченні, я не знаю жодного дешевого (500 $) комутатора, який може це зробити, але я можу помилятися.
XzKto

2
@XzKto Типовий дешевий ($ 60) 5-портовий комутатор GigE може пересилати пакети між усіма комбінаціями портів на повній швидкості проводів. Зазвичай вони використовують повну неблокуючу поперечину.
Девід Шварц

@XzKto Що мав на увазі Девід, це на відміну від ПК, який буде працювати з швидкістю "до власних інтерфейсів", комутатор робить, якщо для кожної комбінації порт-порт. Ви можете мати хост1, розмовляючи з хостом2 і 3 до 4, і кожен з’єднань з повним дуплексним і максимальною пропускною здатністю . Ви не можете цього перемогти. (а за більше грошей, більше портів, ще простіше зрозуміти, чому це швидше). А для маршрутизатора це щось подібне: апаратне забезпечення зможе перенаправлятись швидше, ніж програмне забезпечення, оскільки воно може перенаправлятись, як тільки у нього буде достатньо інформації (ваш Linux-роутер буде робити це на кожному шарі, але потрапляння туди вже буде повільніше)
Олів'є Дулак

11

"За винятком IOS"?

IOS робить майже всю різницю. CentOS - це операційна система загального призначення. Він розроблений для достатньої ефективності в дуже широкому діапазоні сценаріїв, використовуючи широкий набір різних конфігурацій обладнання. З іншого боку, IOS надзвичайно тонко налаштований на обробку лише тих навантажень, яких можна було б очікувати від частини мережевого обладнання, використовуючи дуже специфічні типи обладнання, які ви знайдете в передачі Cisco.

Точно знаючи , які апаратні засоби, для яких ви програмуєте, пройдуть вам дуже довгий шлях щодо продуктивності та сумісності.


3
+1. Додайте до цього той факт, що Cisco має інженерні ресурси та ноу-хау, щоб замінити програмне забезпечення апаратним забезпеченням у разі потреби. Це означає, що якщо певна операція проходить повільніше, ніж їм хотілося б у програмному забезпеченні, вони можуть докласти зусиль для розробки ASIC, додавши інструкції до існуючих процесорних підрозділів або створити апаратний модуль, який допоможе прискорити її. Таблиці в основному на користь продуктивності, коли ви маєте розкіш контролювати як програмне забезпечення, так і апаратне забезпечення.
Джастін ᚅᚔᚈᚄᚒᚔ

Це працює і в обох напрямках. Апаратне забезпечення також не має потребу в рідкісних, складних випадках. Це просто кидає їх на програмне забезпечення. Маршрутизація петель? Не намагайтеся розібратися в апаратному забезпеченні, як з ними боротися.
MSalters

4

І програмне забезпечення, і апаратне забезпечення мають що сказати. У мене є порівняння Intel та TP-Link NIC (який в основі лежить на основі чіпа 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

Подальше читання:


2

Зазвичай це відбувається через відсутність конфігурації стека / пристроїв, що не існують, у Linux. Майже в 90% випадків ваш мережевий трафік обробляється CPU0, а інші не працюють. Якщо ви вирішите цю проблему, різниця з апаратними маршрутизаторами не буде настільки різкою, як вам здається. Вам слід налаштувати принаймні RSS або RPS (розподіл пакетної обробки на основі драйвера / стека серед процесорів).

Якщо ви дійсно піклуєтесь про продуктивність свого маршрутизатора Linux і маєте достатньо часу, рекомендую прочитати цю статтю в блозі packagecloud (також є стаття про передачу пакетів).

Якщо вам потрібно буде поглянути на розповсюдження, і ви вважаєте, що перегляд while sleep 1; do cat $some_file_in_procfs; done, оцінка маски процесора та smp_affinityнаписання вручну є нудним, ви, напевно, вважаєте мій проект для домашніх улюбленців netutils-linux надзвичайно корисним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.