容器中的網路延遲相較於宿主機到底高多少?

2021-10-21 15:41:01 字數 1877 閱讀 3864

今天乙個從來沒有用過docker容器的同事問了我乙個網路延遲的問題,很簡單,但我確沒有準確回答出來。經過簡單的驗證,現在我把過程及結果分享給各位粉絲。

容器中的網路延遲相較於宿主機有多高啊?

我不假思索的回答可以忽略不計吧

同事帶著疑惑的的說了句,那你說說docker網路橋接的實現

在容器啟動時,docker引擎將veth pair裝置的一端放在新建立的容器中,並命名為eth0,另一端放在宿主機中;docker0子網中分配乙個ip給容器使用,並設定docker0的ip位址為容器的預設閘道器;這樣它們就組成了乙個資料的通道,資料從乙個裝置進入,就會從另乙個裝置出來。相當於多了一層網路,就少不了網路解封包開銷,看來是有影響的。

影響到底有多大呢?沒有做過這方面的測試......

本次驗證工具我使用了netperf,netperf是一種網路效能的測量工具,可以測試基於tcp或udp吞吐、響應速率。netperf包括clien和server端。server端主要用來實現監聽工作,client端進行測試。根據流量傳輸方式可分為以下三種:

總共兩台機器,一台機器啟動了netperf服務端;另外一台機器分別在容器內和宿主機上執行netperf客戶端。

2.安裝rpm -ivh netperf-2.7.0-1.el7.lux.x86_64.rpm

3.啟動netserver

宿主機驗證

首先直接在宿主機上安裝netperf,然後進行網路效能測試,如下所示:

容器中驗證

在同一臺客戶端機器上,啟動docker服務,並安裝netperf進行驗證,命令如下所示[root@test ~]# docker run -d --name test -v /home/net/:/home/net/ docker.harbor.com/centos:7.8 sleep 36000

我這裡相當於是把netperf掛載到容器內部,然後執行:docker exec -it test bash進入容器內部安裝netperf。

從資料上看容器中比宿主機少了773次。773/20221= 4%也就是容器中網路處理速度下降了4%,後來在網上找到了一些*****,有人得出結論是10%上下

容器中共享宿主機網路執行

網路延遲的原因也不難想象,因為每次網路資料傳輸都要經過veth介面,然後向外傳送。這個虛擬的網路裝置除了沒有硬中斷,只有軟中斷處理過程,其它跟網絡卡傳送資料邏輯基本相似,雖然傳送速度很快。但即便如此也帶來了一定的網路開銷,從而造成了網路延遲。

聊聊oracle分割槽的使用心得

講一講加密資料如何進行模糊查詢

kubernetes入門培訓(內含ppt)

原創不易,隨手關注或者」在看「,誠摯感謝

Docker 從容器中拷貝檔案到宿主機中

現在公司用docker,有時候需要從容器中拷貝檔案出來。先上語法 docker cp options container id src path dest path 語法是這麼個寫法,在實際的操作中,在寫容器內的路徑的時候並不能自動補全,所以實際上還需要還要先進入到容器才行。下面就拿個例項來講下 1...

宿主機網路中其它機器與Docker容器網路互通配置

在docker 宿主機執行如下命令 docker network create d macvlan subnet 192.168.1.0 16 gateway 192.168.1.1 o parent eth33 macvlan10 通過以下命令查詢docker網路命令如下 docker netwo...

在容器中操作宿主機的Docker

儘管該操作方式不合理,違背了docker的初衷,但有些場景仍然可以使用。docker run d name docker v var run docker.sock var run docker.sock v usr bin docker usr bin docker v usr lib x86 6...