This talk (in Russian) is about RUNOS OpenFlow controller publicly available at https://github.com/ARCCN/runos. Feel free to contact me if you have questions.
Alexander ShalimovLead Programmer-Researcher at Applied Research Center for Computer Networks
1. RUNOS OpenFlow контроллер
Александр Шалимов
ЦПИКС, МГУ http://arccn.ru/
ashalimov@arccn.ru
@alex_shali
@arccnnews
2. Что такое SDN/OpenFlow?
SDN = Software Defined Networking
Основные принципы
• Физическое разделение уровня передачи данных от уровня
управления сетевых устройств.
• Логически централизованное управление.
• Программируемость.
• Открытый единый интерфейс управления.
Преимущества
• Упрощение управления
сетью (OPEX)
• Удешевление
оборудования (CAPEX)
• Разработка ранее
недоступных сервисов
Внедрения
. . .
“SDN means thinking differently about networking”
3. Основы ПКС (SDN/OpenFlow)
A
B
• Неизвестный пакет отправляется на контроллер (OF_PACKET_IN).
• Контроллер вычисляет лучший маршрут через всю сеть (с наименьшей
стоимостью и удовлетворяющий политикам маршрутизации).
• Соответствующие правила OpenFlow устанавливаются на коммутаторы + сразу
и обратный маршрут (OF_PACKET_OUT/FLOW_MOD).
A
B
A -> B
OpenFlow
контроллер
хост/клиент
хост/клиент
коммутатор 1 коммутатор 2
коммутатор 3 коммутатор 4
4. Основы ПКС (SDN/OpenFlow)
A
B
A
• Неизвестный пакет отправляется на контроллер (OF_PACKET_IN).
• Контроллер вычисляет лучший маршрут через всю сеть (с наименьшей
стоимостью и удовлетворяющий политикам маршрутизации).
• Соответствующие правила OpenFlow устанавливаются на коммутаторы + сразу
и обратный маршрут (OF_PACKET_OUT/FLOW_MOD).
• Динамическая переконфигурация в случае ошибки сети.
B
OpenFlow
контроллер
хост/клиент
хост/клиент
коммутатор 1 коммутатор 2
коммутатор 3 коммутатор 4
5. Методология сравнения контроллеров [1]
• Производительность
– максимальное количество
запросов на обработку
– время обработки запроса при
заданной нагрузке
• Масштабируемость
– изменение показателей
производительности при
увеличении числа соединений с
коммутаторами и при
увеличении числа ядер
процессора
• Надежность, Безопасность
[1] A. Shalimov, D. Zuikov, D. Zimarina, V. Pashkov, R. Smeliansky, "Advanced Study of SDN/OpenFlow controllers",
Proceedings of the CEE-SECR '13: Central & Eastern European Software Engineering Conference in Russia, ACM SIGSOFT,
October 23-25, 2013,
6. Результаты сравнения (2013)
• Максимальная производительность 7 000 000 потоков в
секунду.
• Минимальное время задержки от 50 до 75 мкс.
• Недостатки:
– Надежность контроллеров вызывала вопросы
– Производительность была не достаточна (DC >10M fps)
8. Повышение производительности
Самые ресурсоемкие задачи:
• Взаимодействие с OpenFlow коммутаторами:
– использование многопоточности;
– учет загрузки нитей и перебалансировка.
• Получение OpenFlow пакетов из канала:
– чтение пакетов из памяти сетевой карты, минуя
сетевой стек OS Linux;
– переключение контекста;
– виртуальные адреса.
9. In-kernel контроллер
Контроллер был реализован в ядре ОС Linux [2]
• Супер производительный
– нет переключений контекста при сетевом
взаимодействии
– меньше времени на работу с виртуальной памятью
• Но очень сложно разрабатывать свои приложения
– Низкоуровневый язык программирования
– Ограниченное число библиотек и средств отладки
– Высокий риск “положить” всю систему
[2] P. Ivashchenko, A. Shalimov, R. Smeliansky "High performance in-kernel SDN/OpenFlow controller", Proceedings of
the 2014 Open Networking Summit Research Track, USENIX, March 3-5, 2014 Santa Clara, USA
11. Программный интерфейс к In-kernel controller
User space
Kernel space
Applications
Services
OpenFlow
Applications
Services
OpenFlow
NOX, Pox, Floodlight,
OpenDaylight, MUL,
etc
Applications
Services
OpenFlow
ARCCN
+: wide range
of applications
-: low
performance
+: fast performance
-: no applications
What is in the middle?
Offload architecture:
• Apps are in userspace
• Frequently used services
is in kernel (e.g., topo)
• Communication interface
+: wide range of
applications
+: fast performance
[3] Shalimov A., Ivashchenko P. In‐kernel
offloading of an SDN/OpenFlow Controller
Proceedings of the Modern Networking
Technologies (MoNeTec), IEEE, место издания
Moscow, Russia, с. 27-29
12. Производительность (offload)
I/O throughput (cbench + l2learning), fps Response time, us
• Производительность равна 15M fps.
• Задержка равна 50us.
13. Интерфейс программирования
Memory API to the kernel:
• /dev/ctrl – open kernel
• ioctl() – subscribe to events
• mmap() – get access to shared
memory
• poll() – read info from the
kernel
– POLLIN, POOLRDNORM,
POLLRDBAND, POLLOUT
• write() – flush output buffers
l2 learning example code
Интерфейс все равно сложный:
• Низкоуровневый С
• Приложения требуют явной
синхронизации между собой
• Даже не смотря на то, что теперь
можно использовать стандартные
библиотеки
14. RUNOS
RUNOS = RUssian Network Operating System
• Название
– RuNOS [рунос] – акцент на российский
– RunOS [ранос] – акцент на быстроту
• Цель проекта
– “Could an OpenFlow controller be both easy to develop
applications for and also high performance?”
– Разработать систему, которая будет удобна для
разработки новых сетевых приложений
– Помнить о быстроте, интеграция с решениями ЦПИКС
– Объединить все внутренние разработки по
приложениям, контроллерам и т.п.
15. Параметры запуска
• Задается количество нитей
контроллера
– для взаимодействия со свитчами
– для работы приложений
• Список приложений
– их параметры (poll-interval)
– зафиксировать нить выполнения
или выделить в монопольное
пользование (pin-to-thread, own-thread)
Config (json):
“controller”: {
“threads”: 4
},
“loader”: {
“threads”: 3
},
“link discovery”: {
“poll-interval” : 10,
“pin-to-thread” : 2
},
“learning switch”: {
}
…
16. Архитектура
Controller
Trace Tree
Workers
Thread pool
Инициализация контроллера:
1. Запуск нужного количества нитей
2. Запуск служебных компонент
3. Запуск приложений и
распределение их по нитям
4. Определение порядка обработки
событий приложениями
Apps
Logical pipelines
17. Особенности
• Подписка на события
– явно - packet_in
– неявно – switch up/down, port_description, stats.
• Два конвейра исполнения
– run-to-completion
• сортировка приложений при запуске на основе зависимостией
– т.н. отложенное выполнение
• Система разрешения конфликтов (генерация
правил)
– Расстановка приоритетов правил, объединение правил
– LOAD, MATCH, READ абстракции
18. Реализация
Ключевые слова: C++11, QT
Основные сторонние компоненты:
• libfluid project (_base, _msg)
– для взаимодействия со свитчами и разбор OpenFlow 1.3 сообщений
• libtins
– разбор пакетов внутри OpenFlow сообщений
• glog (google log)
– логирование, многопоточное
• tcmalloc (google performance tools)
– альтернативная более быстрая реализация malloc/free
• json11
– разбор конфигурационного файла
• boost graph
– Хранение топологии, поиск маршрута
19. Производительность
• Не фокус данной реализации
• Производительность libfluid равно 5M fps
на 4-х нитях.
• В будущем будет переход на in-kernel
версию контроллера, как backend для
взаимодействия с сетью
20. Описания релизов
• Сейчас версия 0.2
– ядро контроллера
– построение топологии
– построение маршрута через всю сеть
– первая версия системы генерации правил
• Следующая версия 0.3
– Rest API
– WebUI
• 0.4
– Приложения ARP, DHCP
– Оптимизация производительности
…
• 1.0
– Система управления корпоративной сетью EasyWay [4]
• 2.0
– Интеграция с inkernel версией (прозрачно для приложений)
[4] A. Shalimov, D. Morkovnik, S. Nizovtsev, R. Smeliansky EasyWay: Simplifying and automating enterprise network
management with SDN/OpenFlow// 10th Central and Eastern European Software Engineering Conference in Russia,
CEE-SECR 2014б, ACM SIGSOFT, Moscow, Russia.
21. Что осталось за кадром
• Какие приложения востребованы
– интеграция с традиционной сетью (MPLS)
– интеграция с WiFi сетями
– Динамическая маршрутизация с учетом QoS
• Распределенный уровень управления
• Варианты развертывания OpenFlow сетей
• Большой список приложений для разработки
– L2/L3 forwarding, QoS, multipath forwarding, network
virtualization, anti-DDOS, monitoring, load balancer, ACL,
firewall, authentication, SPAN,NAT, ARP, DNS, DHCP, BGP,
verification and troubleshooting, WiFi, OpenStack
• How to start? Документации по разработке первого
приложения для RUNOS есть в репозитории.
22. Заключение
• Линейка OpenFlow контроллеров:
– От быстрых до программируемых
• Проект RUNOS находится в открытом
доступе
– OpenFlow контроллер arccn.github.io/runos.
• Приглашаем всех желающих
присоединиться к разработке!
23. Видео об SDN
• Немного юмора
– SDN c разных точек зрения
– http://www.youtube.com/watch?v=GRVygzcXrM0