vpp+dpdk 安裝與運行

參考:http://blog.csdn.net/icebluechao/article/details/51208560  (感謝 VPP&DPDK 417538415的羣主,歡迎加入此羣共同學習)


vpp主頁:https://wiki.fd.io/view/VPP


一、獲取vpp:

1、Git方式(https://wiki.fd.io/view/VPP/Pulling,_Building,_Running,_Hacking_and_Pushing_VPP_Code

    gitclone https://gerrit.fd.io/r/vpp,獲取簡單,也是最新的代碼,不是release版本

2、yum方式(https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages         

 Add fd.io repo

 [Collapse

CentOS 7.2 - VPP Release RPMs (VPP 16.09)

Create a file /etc/yum.repos.d/fdio-release.repo with contents:

[fdio-release]
name=fd.io release branch latest merge
baseurl=https://nexus.fd.io/content/repositories/fd.io.centos7/
enabled=1
gpgcheck=0

這種方式獲取的事rpm,對於研發來說不太方便

3、發行版壓縮包方式(https://git.fd.io/cgit/vpp/)

 開發建議使用這種方式,不用每天對比vpp代碼,因爲vpp代碼每天都在更新!vpp主頁->Getting the Current Release (16.xx)->Download a vpp tarball vpp。主頁版本更新有點慢,外面顯示的是16.09,其實裏面是16.06。06.09改動還有點大,最大的區別就是09把插件獨立出來了,最好獲取16.09以後的代碼。
備註:發行版壓縮包方式原來可以直接下載tar包,現在找不到了
二、編譯安裝
參考icebluechao的專欄

VPP目前安裝主要支持debian和redhat系,本人在CentOS7(64)上驗證。編譯機一定要聯網!
1、  根據上面獲取源碼
2、  進入目錄並且安裝: cd vpp; make install-dep;這一步的主要作用就是下載vpp環境所需的依賴包,這一步相當重要,一定要仔細查看執行情況,若有問題,一定要一一解決,不然在後面編譯問題多,基本就是在環境搭建的第一次執行。
3、  生成Makefile: cd vpp/build-root; make distclean && /bootstrap.sh;  腳本/bootstrap.sh執行要完全無錯誤
4、  執行make,如下圖所示

        開發一般編譯測試版,執行make build編譯vpp主程序,執行make plugins編譯插件,make wipe清除,帶有release的就是髮型版本了。dpdk不用專門下載,在執行make build的時候會自動下載dpdk到vpp/dpdk目錄下。
只要執行make build和make plugins後,vpp基本就編譯成功了

編譯成功後vpp位置: vpp/build-root/install-vpp-native/vpp/bin/vpp 
編譯成功後插件位置:vpp/build-root/install-vpp-native/plugins/lib64/vpp_plugins/
igb_uio.ko位置:vpp/build-root/install-vpp-native/dpdk/build/lib/librte_eal/linuxapp/igb_uio/igb_uio.ko
                        vpp/build-root/install-vpp-native/dpdk/kmod/igb_uio.ko

igb_uio.ko可以說是dpdk編譯後生成的網卡驅動,vpp好像不能自動加載igb_uio.ko,需要自己手動加載 insmod igb_uio.ko

vpp運行加載插件默認位置是/usr/lib/vpp_plugins/ ,沒有yum安裝過vpp的話需要自己手動創建這個目錄

三、配置文件

vpp默認配置文件位置在/etc/vpp/startup.conf, -c 參數可以指定startup.conf配置文件。

配置文件參考:http://blog.csdn.net/icebluechao/article/details/51615503
                        https://wiki.fd.io/view/VPP/Command-line_Arguments

配置文件startup.conf示例:

cpu {
 main-core 18   #vpp主進程綁定到第18核上
}

#interactive加上的作用就是你在啓動vpp時,直接進入交互界面
unix {
  interactive cli-listen 127.0.0.1:5002 #vpp交互設置,可以telnet 127.0.0.1 5002進行登錄
  log /tmp/vpp.log
  full-coredump
}

dpdk {
    uio-driver igb_uio #這裏只是說vpp使用igb_uio作爲網卡的驅動,但不會自己加載igb_uioigb_uio需要自己加載insmod igb_uio.ko
    dev 0000:02:05.0  #將網卡和上面的igb_uio 進行綁定,0000:02:05.0這是網卡的pci編號(lspci | grep Ethernet 查看網卡對應的pci編號)
    dev 0000:02:06.0
    dev 0000:02:07.0
    vdev eth_bond0,mode=2,slave=0000:02:06.0,slave=0000:02:07.0,xmit_policy=l34 #這個設置是將2個物理網卡綁定成一個使用
    socket-mem 512,512  #有numa的設置2個,沒有numa的只設置一個就行了,設置的大小 <= free大頁的大小,不然啓動不了
}

api-trace {
  on
}

注意:要綁定的網卡一定要down掉

四、運行vpp

vpp運行環境:
1、加載 igb_uio.ko(也可是其他的,例如vfio-pci),
2、 設置物理機支持大頁(參考https://software.intel.com/zh-cn/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications?utm_source=CSDN.com&utm_medium=Syndication&utm_campaign=MC_PRC_Q4-15_syndication)。
      手動設置(不推薦)
              echo 10 > /sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages (10G)
              echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages    (2G)

運行:vpp/build-root/install-vpp-native/vpp/bin/vpp -c /etc/vpp/startup.conf


五、測試環境
A:vpp基本測試


基本測試按照這個拓撲就可以了。
簡單轉發:vpp轉發從port0進,port1出,
虛擬機和外部機器測試:vm->vhost->vpp->port0->外部網絡

vhost創建:
vpp#create vhost socket /tmp/sock2.sock server
vpp#set interface state VirtualEthernet0/0/0

啓動qemu虛擬機時綁定這個vhost口(參考https://software.intel.com/zh-cn/articles/using-open-vswitch-with-dpdk-for-inter-vm-nfv-applications?utm_source=CSDN.com&utm_medium=Syndication&utm_campaign=MC_PRC_Q4-15_syndication關於vhost的接口使用)

vpp支持vrf(l3fib,l2fib),這裏的vrf意思是獨立的路由表,及其vrf下加入的接口,可以模擬vrouter功能,二層道理一樣,可以模擬vswitch

B:VPP多vrf實驗

關鍵配置如下(我現在只發現vrf間用veth進行連接,還沒發現其他方法)
參考:https://wiki.fd.io/view/VPP/Tutorial_Routing_and_Switching

將port0和port2接口分配給vrouter0的fib
vpp#set int ip table GigabitEthernet0/0/0 0
vpp#set int ip table GigabitEthernet0/0/2 0

將port1和port3接口分配給vrouter1的fib
vpp#set int ip table GigabitEthernet0/0/1 1
vpp#set int ip table GigabitEthernet0/0/3 1

在物理機上創建vethA,vethB(必須先於下步vpp添加loopback接口的操作)
Linux#ip link add vethA type veth peer name vethB

在vpp創建對應vethA,vethB的接口,分別分給不同的vrf
vpp#create host-interface name vethA
vpp#set int ip table vethA 0
vpp#set interface ip address host-vethA 192.168.1.1/24
vpp#set int state host-vethA up

vpp#create host-interface name vethB
vpp#set int ip table vethB 0
vpp#set interface ip address host-vethB 192.168.1.1/24
vpp#set int state host-vethB up

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章