Я недавно читал об OpenOnload, который обходит ядро Linux во время определенных сетевых операций, чтобы повысить производительность. Это заставило меня узнать, как обрабатываются сетевые данные между контейнерами LXC на одном сервере. Если я отправляю данные от одного к другому, он будет проходить через стек TCP TCP несколько раз? Если да, то сколько латентности это добавляет по сравнению с чем-то вроде общей памяти (которую я мог бы использовать, если бы я не использовал LXC)? Возможно ли какое-то переполнение ядра для LXC-LXC-связи?Каков путь сетевых данных между двумя контейнерами LXC на одном физическом узле?
ответ
Как вы знаете:
Ядро Linux включает в себя контрольные группы для выделения ресурсов (CPU, памяти, блок ввода-вывода, сети/и т.д.), которая не требует запуска каких-либо виртуальных машин. Cgroups также обеспечивает изоляцию пространства имен до , полностью изолируя вид приложений операционной среды, , включая деревья процессов, сети, идентификаторы пользователей и смонтированные файловые системы.
LXC объединяет группы и пространство имен для обеспечения изолированной среды для приложений. Вы спросили: Мне стало интересно, как обрабатываются сетевые данные между контейнерами LXC на одном сервере.
Это как один процесс на Linux машине общаться с другим/же процессом на одной и ту же машину, но если он будет использовать один или два (LXC сеть внутри контейнера) Linux моста + те мосты внутри различных контрольных групп/имен.
Если я отправляю данные от одного к другому, он проходит весь путь через стек TCP TCP несколько раз? Если да, то сколько латентности делает это , добавьте по сравнению с чем-то вроде общей памяти (которую я мог бы использовать, если я не использовал LXC)? Является ли какой-то способ обхода ядра для LXC-LXC ?
Это не большой задержкой, но когда я использовал PHP-FPM, как демон, который слушают в 127.0.0.1:8888 и изменил его слушать Сокет был рост RPS (страниц в секунду). Performance of unix sockets vs TCP ports
PS: Вы можете использовать гнезда unix на своих контейнерах LXC. Например, я использую для создания общего каталога между всеми контейнерами (например: /tmp/mysql.sock):
mount --bind /lxc/shared /lxc/shared
mount --make-unbindable /lxc/shared