【问题标题】:What path does network data take between two LXC containers on the same physical host?同一物理主机上的两个 LXC 容器之间的网络数据采用什么路径?
【发布时间】:2015-02-24 00:07:26
【问题描述】:

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

【问题讨论】:

    标签: linux performance networking virtualization lxc


    【解决方案1】:

    如你所知:

    Linux 内核包含用于资源隔离的 cgroup(CPU、 内存、块 I/O、网络等),不需要启动任何 虚拟机。 Cgroups 还提供命名空间隔离 完全隔离应用程序对运行环境的看法, 包括进程树、网络、用户 ID 和挂载的文件系统。

    LXC 结合了 cgroups 和命名空间支持来提供一个独立的 应用环境。 你问: 这让我很好奇如何处理同一服务器上的 LXC 容器之间的网络数据。

    这就像 linux mashine 上的一个进程与同一 mashine 上的另一个/相同进程通信,但如果他会使用一个或两个 linux 网桥(容器内的 LXC 网络)+ 不同 cgroup/命名空间内的那些网桥。

    如果我将数据从一个发送到另一个,它会一直通过吗 内核TCP堆栈多次?如果是这样,这有多少延迟 add 与共享内存之类的东西相比(如果我可能会使用它 没有使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 2016-07-02
      • 2018-09-25
      • 2023-02-11
      • 1970-01-01
      相关资源
      最近更新 更多