OvS, DPDK і Intel HT: 12-кратне прискорення віртуального комутатора

Сьогодні розповімо про Open vSwitch, інтегрованому з Data Plane Development Kit (OvS-DPDK). Це – високопродуктивний віртуальний багаторівневий комутатор з відкритим вихідним кодом, доступний за ліцензією Apache 2.0. Інтеграція OvS з DPDK дозволяє значно підвищити швидкість обробки мережевих пакетів.
image
Open vSwitch знайшов практичне застосування в безлічі проектів. Комутатор підтримує протокол OpenFlow, підходить для роботи в програмно-визначаються мережах (Software Defined Network, SDN). OvS можна конфігурувати за допомогою протоколу управління OVSDB.

Високорівнева архітектура OvS-DPDK
Звичайний Open vSwitch займається передачею мережевих пакетів через простір ядра Linux (це показано на рисунку нижче). В каналі передачі даних ядра, «швидкий шлях» («fastpath») обробки даних реалізується завдяки простій таблиці потоків, що містить правила пересилання і обробки прийнятих пакетів. Якщо перший пакет у потоці не відповідає жодній з існуючих записів у таблиці ядра, його відправляють для обробки демону, який працює у просторі користувача. Це – так званий «повільний шлях» («slow path»). Після того, як у просторі користувача цей пакет буде оброблений, демон оновлює таблицю потоків у просторі ядра, в результаті наступні пакети в потоці можуть пройти по швидкому шляху», їх не потрібно передавати в простір користувача. Слідуючи цьому підходу, звичайний Open vSwitch дозволяє позбутися від ресурсномісткою операції перемикання контексту між просторами ядра і користувача для великого відсотка отриманих пакетів. Однак, досяжна пропускна здатність обмежена смугою пропускання мережевого стека Linux, який не підходить для варіантів використання, в яких необхідна висока швидкість обробки пакетів. Наприклад – в телекомунікаційних компаніях.

DPDK – це набір бібліотек, які працюють у просторі користувача Linux, які дозволяють створювати високопродуктивні програми для обробки мережевих пакетів. Фактично, він пропонує набір драйверів опитуваного режиму (Poll Mode Driver, PMD) для різних фізичних і віртуальних пристроїв, які дозволяють здійснювати пряму передачу пакетів між простором користувача і мережевим інтерфейсом, минаючи мережевий стек ядра. Це дає значне зростання продуктивності в порівнянні з передачею даних через ядро. Подібне відбувається завдяки позбавленню від необхідності обробки переривань і від необхідності користуватися мережевим стеком ядра. При інтеграції OvS з DPDK, «швидкий шлях» комутації проходить через простір користувача, а «шлях першого пакету» — це той же шлях у просторі користувача, за яким проходять пакети в звичайному OvS, коли «швидкий шлях» пролягає через ядро.

Ось загальна схема інтеграції DPDK з OvS:


Інтеграція площині передачі даних DPDK з звичайним Open vSwitch

На малюнку нижче показана високорівнева архітектура OvS-DPDK. Порти комутації OvS представлені мережевими пристроями (netdevs). Netdev-dpdk – це мережевий пристрій, користується можливостями DPDK, воно здійснює обмін мережевими даними через три різних інтерфейсу. Перший – фізичний інтерфейс (робота з ним здійснюється за допомогою бібліотеки librte_eth в DPDK), далі – два віртуальних інтерфейсу (librte_vhost і librte_ring). Це – інтерфейси з фізичними та віртуальними пристроями, підключеними до віртуального комутатора.


Високорівнева архітектура Open vSwitch з DPDK

Інші архітектурні рівні OvS дають додаткову функціональність і організацію взаємодії, наприклад, з SDN-контролером. Dpif-netdev надає послуги передачі даних в просторі користувача, ofproto – це бібліотека OvS, яка реалізує комутатор стандарту OpenFlow. Вона взаємодіє з OpenFlow-контролерами по мережі і з програмним або апаратним забезпеченням комутатора через провайдера ofproto. Сервер ovsdb підтримує актуальну інформацію в таблицях комутації для даного екземпляра OvS і взаємодіє з SDN-контролером.

Подробиці про архітектуру OvS можна знайти на openvswitch.org.

Тепер поговоримо про таблиці комутації OvS-DPDK.

Таблиці комутації OvS-DPDK
Пакет, що надходить у OvS-DPDK з фізичного або віртуального інтерфейсу, отримує унікальний ідентифікатор, або хеш, заснований на полях заголовка, який потім порівнюють із записами, які є в трьох основних таблиць комутації. Це – таблиця точного збігу (Exact Match Cache, EMC), таблиця класифікатора маршруту передачі даних (Data Path Classifier, dpcls), і таблиця класифікатора ofproto (Ofrproto Класифікатор).

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


Ієрархія таблиць комутації в Open vSwitch з DPDK

У цих трьох таблиць різні характеристики пропускної спроможності та затримок. Таблиця EMC пропонує саму швидку обробку для обмеженого числа записів. Ідентифікатор пакету повинен точно збігатися з записом в таблиці. Серед порівнюваних даних є точний IP-адреса джерела і порт, адреса і порт призначення, протокол. Збіг із записом в EMC дасть саму високу швидкість обробки. В іншому випадку збіг знайдено не буде і почнеться пошук в таблиці dpcls.

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

Якщо ж правило для ідентифікатора пакету не знайдено і в dpcls, починається перевірка з таблиці класифікатора ofproto, в результаті контролер OpenFlow може вирішити, як саме обробляти пакет. Це – самий повільний шлях проходження даних, він більш ніж у 10 разів повільніше, ніж у випадку, коли збіг знайдено в таблиці EMC. Коли збіг знаходять у класифікаторі ofproto, це веде до створення нових записів у більш швидких таблицях комутації, в результаті наступні пакети того ж потоку можна обробити швидше.

Про можливості і продуктивності OvS-DPDK
В той момент, коли був написаний цей матеріал, в гілці master проекту OvS-DPDK були доступні наступні високорівневі функції:

  • Підтримка DPDK 16.07 (при виході нових релізів DPDK оновлюється і підтримується OvS версія)
  • Підтримка портів vHost-user.
  • Підтримка відновлення з'єднання vHost.
  • Підтримка декількох черг vHost.
  • Вбудована підтримка тунелювання: VxLAN, GRE, Geneve
  • Підтримка VLAN
  • Підтримка MPLS
  • Підтримка QOS-політик Ingress/egress
  • Підтримка jumbo-кадрів
  • Відстеження з'єднань
  • Статистичні відомості: дані DPDK vHost і розширена статистика DPDK
  • Налагодження: підтримка DPDK pdump
  • Агрегування каналів
  • Відомості про стан каналів
  • Підтримка VFIO
  • Виявлення ODL/OpenStack портів DPDK
  • Облік особливостей NUMA при роботі з портами vHost-user
На малюнку нижче дані свіжі результати тестування продуктивності звичайного OvS і OvS-DPDK. Тут показана пропускна здатність (пакетів в секунду) для сценарію використання, коли дані надходять у OvS з фізичного порту, обробляються і передаються на інший фізичний порт (Phy-OvS-Phy). Можна бачити, що OvS-DPDK працює приблизно в 10 разів швидше, ніж звичайний OvS. При цьому, якщо на сервері включений режим Intel Hyper-Threading, OvS-DPDK виявляється приблизно в 12 разів швидше звичайного OvS. На діаграмі цей варіант позначений як «1С2Т», що означає одне фізичне ядро з двома потоками.


Порівняння продуктивності звичайного OvS і OvS-DPDK

Схожі результати отримані в більш складному сценарії використання: (Phy-OvS-VM-OvS-Phy), коли дані з фізичного інтерфейсу надходять в OvS, потім йдуть у віртуальну машину, далі – повертаються в OvS, і, в підсумку, знову передаються на фізичний інтерфейс. А саме, тут OvS-DPDK дозволяє досягти приблизно 9-кратного зростання продуктивності.

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

Де взяти OvS-DPDK
OvS-DPDK можна знайти в upstream-гілки репозиторію openvswitch.org, він є в різних дистрибутивах Linux. Останній стабільний реліз – OvS 2.6. Він випущений у вересні 2016-го року. Подібні релізи виходять раз на півроку.

Зверніть увагу на те, що ви можете завантажити ZIP-файл з гілкою master OVS, або гілку версії 2.6. Так само є інструкції по установці для гілки master і версії 2.6. Пакети OvS з SPDK доступні в наступних репозиторіях:

Звичайний Open vSwitch можна завантажити на openvswitch.org, GitHub, його можна знайти і в дистрибутивах Linux.

Підсумки і додаткові матеріали
Ми представили короткий огляд OvS-DPDK – віртуального комутатора, який відрізняється високою продуктивністю і надійністю. Інтеграція з DPDK дозволяє значно прискорити звичайний Open vSwitch. Якщо ви хочете більше дізнатися про OvS, ось список корисних матеріалів англійською.

Керівництва для користувачів:

Посібника для розробників:

Стаття

Вебінари по стабільним релізом OvS з DPDK:

Матеріали університету INB:

Технічна документація:

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.