2014-12-26 36 views
1

我最近一直在閱讀關於OpenOnload,它在某些網絡操作期間繞過Linux內核來提高性能。這讓我很好奇如何處理同一臺服務器上的LXC容器之間的網絡數據。如果我將數據從一個發送到另一個,它是否會多次通過內核TCP堆棧?如果是這樣,與共享內存(如果我不使用LXC,我可能會使用它)相比,這會增加多少延遲?對於LXC-LXC通信是否有某種內核旁路可行?網絡數據在同一臺物理主機上的兩個LXC容器之間有什麼路徑?

回答

2

如你所知:

Linux內核包括用於隔離資源(CPU,內存 ,塊I/O,網絡等),不需要啓動任何 虛擬機的cgroup。 Cgroups還提供名稱空間隔離至 ,完全隔離應用程序對操作環境的看法,包括進程樹,網絡,用戶ID和已安裝的文件系統在內的 。

LXC結合了cgroups和名稱空間支持,爲應用程序提供了一個獨立的 環境。 您問: 這讓我很好奇如何處理同一臺服務器上的LXC容器之間的網絡數據。

這就像在Linux上mashine一個進程進行通信在同一mashine另一/相同的過程,但如果他將使用一個或兩個Linux的橋樑(內部容器LXC網絡)+不同的cgroup /命名空間中的橋樑。

如果我將數據從一個發送到另一個,是否通過 多次內核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 
相關問題