我最近一直在阅读OpenOnload,它在某些网络操作期间绕过Linux内核以提高性能。这让我对如何处理同一服务器上的LXC容器之间的网络数据感到好奇。如果我将数据从一个发送到另一个,它是否会多次通过内核TCP堆栈?如果是这样,与共享内存相比,这会增加多少延迟(如果我没有使用LXC,我可能会使用它)? LXC-LXC通信是否可以使用某种内核旁路?
答案 0 :(得分:2)
如你所知:
Linux内核包含用于资源隔离的cgroup(CPU, 内存,块I / O,网络等),不需要启动任何内存 虚拟机。 Cgroups还提供名称空间隔离 完全隔离应用程序对操作环境的看法, 包括进程树,网络,用户ID和已安装的文件系统。
LXC结合了cgroup和名称空间支持来提供隔离 应用环境。 您询问: 这使我对如何处理同一服务器上的LXC容器之间的网络数据感到好奇。
这就像linux mashine上的一个进程在同一个mashine上与另一个/同一个进程进行通信,但是如果他使用一个或两个linux bridge(容器内的LXC网络)+不同cgroups / namespace中的那些桥接。
如果我将数据从一个发送到另一个,它是否会一直进行 内核TCP堆栈多次?如果是这样,这会有多少延迟 与共享内存(如果我可以使用的话)相比 没有使用LXC)? LXC-LXC是否可以使用某种内核旁路 通信?
这不是很好的延迟但是当我使用php-fpm作为守护进程,在127.0.0.1:8888监听并更改它以监听unix套接字时,rps(每秒页数)增加了。 Performance of unix sockets vs TCP ports
PS: 您可以在LXC容器上使用unix套接字。例如,我用来在所有容器之间创建共享目录(例如:/tmp/mysql.sock):
mount --bind /lxc/shared /lxc/shared
mount --make-unbindable /lxc/shared