docker中部署dpdk功能驗證

2021-08-10 18:48:41 字數 3253 閱讀 6656

參考dpdk pktgen+docker搭建vnf環境及驗證一文中的部署方法,在實際環境中進行驗證;本文記錄驗證過程中遇到的坑以及解決方法,另外,還驗證了另外一種部署方式。

同理,啟動docker1和testpmd,命令如下:

docker run -it

--privileged --name=dpdk-docker1

-v /mnt/huge:/mnt/huge -v /tmp/virtio/:/tmp/virtio/ dpdk-docker:17.05

testpmd -l0-

1-n1--socket-mem

1024,1024

\--vdev 'eth_vhost2,iface=/tmp/virtio/sock2'

--vdev 'eth_vhost3,iface=/tmp/virtio/sock3'

\--file-prefix

=dpdk2 --no-pci\--

-i--forward-mode

=io --auto-start

# 以下命令在主機中執行

# dpdk的引數同上,--vdev在這裡用來連線到socket檔案

# pktgen的引數

# -p 在所有埠啟用混雜模式

# -m 定義cpu核到埠的繫結,在這裡core5繫結到prot0,core6繫結到port1

pktgen -l 2-6 -n 3 --socket-mem 1024,1024 --vdev='virtio_user0,path=/tmp/virtio/sock0' --vdev='virtio_user1,path=/tmp/virtio/sock1' \

--vdev='virtio_user2,path=/tmp/virtio/sock2' --vdev='virtio_user3,path=/tmp/virtio/sock3' --no-pci -- -p -m "3.0,4.1,5.2,6.3"

在pktgen中發包:

# 在pktgen中設定速率為10%,更具體的速率設定可以通過tx_cycles設定

# 埠0共傳送50個包,埠1傳送100個,埠2傳送150個,埠3傳送200個

pktgen

:/>set all rate 10

pktgen

:/>set

0 count 50

pktgen

:/>set

1 count 100

pktgen

:/>set

2 count 150

pktgen

:/>set

3 count 200

pktgen

:/>str

host端:

01 口對發,23口對發

docker0端:

docker1端:

在方案一的驗證過程中遇到的坑和解決方案如下:

host端啟動pktgen時埠無法up,需要新增在啟動pktgen軟體時指定–no-pci選項。

方案一種是在docker中建立vhost口,在host端使用virtio口,這種使用方式並不常見;更多的使用方法是在host上啟動vhost後端驅動,在docker中啟動virtio驅動。

下面就按照這種思路再驗證一次。

建立兩個虛擬口eth_vhost0, eth_vhost1, 並分別繫結3核和4核,兩個口互相對發

pktgen -l2-

6-n3--socket-mem

1024,1024

--vdev=

'eth_vhost0,iface=/tmp/virtio/sock0'

--vdev=

'eth_vhost1,iface=/tmp/virtio/sock1'

--no-pci

---p

-m"3.0,4.1"

docker run -it

--privileged --name=dpdk-docker0

-v /mnt/huge:/mnt/huge -v /tmp/virtio/:/tmp/virtio/ dpdk-docker:17.05

testpmd -l0-

1-n1--socket-mem

1024,1024

--vdev 'virtio_user0,path=/tmp/virtio/sock0'

--vdev 'virtio_user1,path=/tmp/virtio/sock1'

--file-prefix

=dpdk --no-pci

---i

--txqflags=

0xf00

--disable-hw

-vlan

後面用和方案一相同的驗證方式即可。

Docker中部署Golang專案

參考 1.安裝docker 參考 2.預設你已經有乙個可以正常執行的golang專案了 比如叫project 啟動方式 go run main.go 參考 3.cd project touch dockerfile 4.dockerfile寫入 from golang 1.13 maintainer...

在docker中部署gitlab

docker pull gitlab gitlab ce 12.5.4 ce.0 2.在docker建立容器,讓gitlab跑起來 docker run d publish 8443 443 publish 10080 80 publish 1022 22 name gitlab restart a...

docker中部署django專案

docker pull ubuntu 15.10docker run itd name vth django v etc apt mnt vths v1.1 bin bash v的意思是把本地的目錄掛載到docker上。冒號之前是宿主機的目錄,冒號之後是docker的目錄。進入容器之後,把 mnt ...