Як процесор може обробляти швидкість передачі даних 10 гігабіт в секунду або більше?


11

Я не знаю, чи це правильне запитання. Це може бути дуже дурним питанням. Я припускаю, що деякому процесору доводиться обробляти кадри даних для комутації / маршрутизації. Сучасні процесори мають швидкість в кілька ГГц. Як вони обробляють дані, які надходять швидкості швидше, ніж вони працюють?

Відповіді:


16

Ви абсолютно правильні, якщо нам доведеться використовувати цикл інструкцій за біт, то 10 Гбіт / с було б недосяжно. Тож перше, що слід зазначити, це те, що ми обробляємо слово за інструкцією CPU - 64 біти.

Навіть тоді найгірше, що ми можемо зробити для продуктивності - це мати доступ до процесора до всіх слів пакету. Таким чином, зосередження уваги на "нульовій копії" обробки пакетів. Деякі з цих хитрощів є в самих інтерфейсах: вони мають DMA ("прямий доступ до пам'яті"), щоб мікросхема контролера Ethernet копіювала дані в оперативну пам'ять; вони обчислюють контрольні суми, щоб CPU не мав доступу до всіх слів у пакеті для цього. Деякі з них є в структурі даних даних: ми обережно вирівнюємо буфери пакетів, щоб ми могли переміщувати їх, змінюючи право власності на запис таблиці сторінок. Деякі з них - це лише ретельне програмування, щоб забезпечити доступ до пакетних даних якнайменше кількість разів, і бажано взагалі не отримувати доступ до отримання додаткової програми.

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

Нарешті, у нас є спеціальні ярлики, такі як виклик sendfile () ядра, який є експрес-шляхом від диска до мережі з використанням мінімальної кількості роботи.

Ми можемо навіть маршрутизувати спеціальні випадки (пересилання пакетів з одного інтерфейсу в інший), використовуючи апаратні функції мережевих інтерфейсних карт та розглядаючи шину PCI як шину між картками, а не залучаючи процесор. Це неможливо зробити в операційних системах загального призначення, але такі постачальники, як Intel, надають бібліотекам програмного забезпечення для реалізації таких функцій на своїх контролерах Ethernet.

Відійшовши від центральних процесорів, ми навіть можемо створити маршрутизатори спеціального призначення, де всі завдання переадресації відбуваються апаратно. Оскільки шина PCI тоді була б обмеженням, вони виконують кілька паралельних шин; або навіть безліч паралельних шин для декількох вузлів паралельних поперечних перемикачів. На одному кінці ринку невеликим прикладом Ethernet-комутатора на основі TCAM був би один приклад; на іншому кінці ринку Juniper M40 був би канонічним дизайном.

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

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


Чудова відповідь. Чи можете ви детальніше розглянути the packet will then be exploded into cells to reduce latency?
Едді

У дизайні маршрутизатора ви можете просто надіслати пакет від однієї лінійної картки до іншої за допомогою перемикання між поперечними смугами (або іншої міжвидової шини). Але тоді затримка пов'язана з довжиною пакету - у вас буде ще одна повна затримка передачі пакета, коли пакет надсилається через комутацію перекладини. Щоб уникнути того, що ми можемо мати кілька паралельних зв’язків у перемиканні перекладини та розділити пакет на ці ланки. Тоді затримка для великих пакетів значно скорочується. Частина пакета, що розбивається, називається "комірка".
vk5tu

Я знаю, що ця відповідь є з двох років тому, але ДЯКУЙТЕ ТАКОЖ МНОГО. У мене було те саме питання, що і в оригінальному плакаті, і я знайшов вашу відповідь у моєму пошуку. Це ДУЖЕ добре написано і ретельно. Дякую!
самотній човен

0

Сьогодні майже вся комутація та велика частина маршрутизації обробляються апаратно, тому швидкість процесора стає винятковою для винятків. Для таких речей, як сервери, можливо, що процесор недостатньо швидкий. Так було і раніше. Коли вперше вийшла ефірна мережа 1 Гбіт / с, шина, яка використовується на ПК та серверах, могла обробляти лише 400 Мбіт / с.

Що відбувається, коли процесор недостатньо швидкий - трафік падає. У будь-якому випадку багато трафіку може бути скинуто, оскільки саме так обробляються затори, якщо це зробити правильно. RED (Random Early Detection) - метод, який використовується для випадкового скидання пакетів у черги, щоб запобігти заповненню та випадання пакетів. Це може допомогти запобігти синхронізацію TCP. Дуже багато крапель відбувається на комутаторах, де кілька портів швидкості, можливо, знадобиться відправити на інший порт з однаковою швидкістю.


1
Це плутає відкидання входу з краплями виходу. Відмови зазвичай трапляються, коли буфер дзвінка інтерфейсу Ethernet переповнений - як це відбувається, коли ЦП не може йти в ногу зі швидкістю приходу даних. Цей буфер кільця є занадто малим, щоб його можна було реалізувати.
vk5tu

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