网络数据在同一物理主机上的两个LXC容器之间采用什么路径?

时间:2014-12-26 19:37:00

标签: linux performance networking virtualization lxc

我最近一直在阅读OpenOnload,它在某些网络操作期间绕过Linux内核以提高性能。这让我对如何处理同一服务器上的LXC容器之间的网络数据感到好奇。如果我将数据从一个发送到另一个,它是否会多次通过内核TCP堆栈?如果是这样,与共享内存相比,这会增加多少延迟(如果我没有使用LXC,我可能会使用它)? LXC-LXC通信是否可以使用某种内核旁路?

1 个答案:

答案 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