Представляем библиотеку-ОС (library operating system, LibOS) для Linux.
Наша задача состоит в создании сетевого стека ядра как внешней разделяемой библиотеки, которую можно выполнять в пространстве пользователя, чтобы предоставить персонализированные варианты сетевого стека и средства тестирования. У разработчиков появится инструмент, чтобы упростить симуляцию сложных сетевых топологий из маршрутизаторов/хостов Linux.
Хотя архитектура сама по себе способна виртуализировать многие вещи, нынешний дизайн сосредоточен только на сетевом стеке. Вы можете пользоваться такими функциями сетевого стека как TCP, UDP, SCTP, DCCP (IPv4 и IPv6), Mobie IPv6, Multipath TCP (IPv4/IPv6, пока не включен в основную ветку) и netlink в различных приложениях пользовательского пространства (quagga, iproute2, iperf, wget, thttpd).
Что такое LibOS
Обращение к библиотеке осуществляется через API (lib_init()
), чтобы подключить приложения пользовательского пространства к userspace-версии сетевого стека ядра. Работа генератора тактовых импульсов, виртуальной структуры net_device
и планировщика обеспечивается за счёт вызывающего объекта, а ресурсы ядра вроде системных вызовов обеспечиваются вызываемым объектом.
Как только LibOS инициализирована через API, приложения пользовательского пространства с сокетом POSIX могут использовать системные вызовы, определённые в LibOS, заменив оригинальные символы из сокета на специфичные для LibOS. Таким образом, приложение задействует сетевой стек LibOS, не вовлекая сетевой стек хоста.
В данный момент существует два пользователя LibOS: это Network Stack in Userspace
(NUSE) и симулятор сети ns-3 с Direct Code Execution (DCE). Они вынесены во внешний репозиторий.
Как использовать
Чтобы собрать библиотеку,
% make {defconfig,menuconfig} ARCH=lib
затем, собираем.
% make library ARCH=lib
Вы увидите liblinux-$(KERNELVERSION).so
в папке верхнего уровня.
Дополнительная информация
Главное отличие от UML (user-mode linux) состоит в том, что LibOS допускает запуск нескольких инстансов с сетевым стеком в рамках одного процесса с dlmopen(3)
, в том числе для простоты дебаггинга.
Эти патчи доступны в указанной ветке:
git://github.com/libos-nuse/net-next-nuse.git for-asm-upstream
Для дополнительной информации, см. презентацию с последней конференции Netdev0.1.
Автор: alizar