參考的是這個大牛的文章:http://blog.csdn.net/fan_hai_ping/article/details/6705170
node
系統環境:centos6.5 開發版vim
PF_RING版本:PF_RING-5.6.2centos
0. 卸載系統自帶的網卡驅動網絡
編譯安裝PF_RING以前須要卸載原來的網卡驅動,卸載以前使用ethtool命令查看當前網卡的類型和驅動版本。ssh
# ifconfig //查看網卡的名稱,若是是單網卡通常是eth0,雙網卡的話,找到你要使用pf_ring的網卡名字替換下面的eth0
# ethtool -i eth0 //查看網卡的驅動名稱
# lsmod | grep e1000e //查看網卡驅動是否存在
# rmmod e1000e //卸載電腦自動安裝的網卡驅動 此處爲e1000e驅動
注:若是使用ssh遠程卸載驅動會形成網絡不能鏈接,務必現場操做。tcp
1. 首先安裝:numactl-2.0.3性能
2. 編譯安裝PF_RING內核模塊測試
解壓縮PF_RING安裝包,進入到Kernel目錄下編譯和安裝內核補丁。ui
# tar -zxf PF_RING.4.7.0.tar.gz # cd PF_RING.4.7.0/ # make //直接在跟目錄下面make,進行所有編譯
# cd PF_RING.4.7.0/kernel # make # sudo make install //內核安裝須要root用戶權限
insmod <PF_RINGPATH>/kernel/pf_ring.ko [transparent_mode=0|1|2] [min_num_slots=x][enable_tx_capture=1|0][enable_ip_defrag=1|0][quick_mode=1|0]
加載pf_ring內核模塊,進入/lib/modules/<redhat-version>/kernel/net目錄,能夠看到有pf_ring目錄,進入到該目錄下進行PF_RING模塊的安裝。spa
# sodu insmod pf_ring.ko transparent_mode=1 //最好設置一下,官方解釋是2的性能最好,可是有大神測試後發現差異並非很大
具體的mode取值的測試能夠參考這個連接:
http://jaseywang.me/2015/02/28/%E9%80%9A%E8%BF%87-tcpcopypf_ring-%E5%AF%B9-bcm-5719-%E5%B0%8F%E5%8C%85%E5%81%9A%E7%9A%84%E5%A4%9A%E7%BB%84-benchmark/
當PF_RING激活時,會建立/proc/net/pf_ring目錄,使用cat命令查看pf_ring的屬性信息:
# cat /proc/net/pf_ring/info
注:爲了編譯PF_RING內核模塊,你須要安裝Linux內核的頭文件(或者內核源代碼)。
3. 編譯安裝PF_RING所需依賴庫
進入到用戶空間庫userland/lib下,編譯和安裝。
# cd ../userland/lib # ./configure # make # sodu make install
若是須要使用libpcap抓包分析,請卸載以前安裝的libpcap,而後進入/userland/libpcap-xxx-ring/目錄下配置、編譯和安裝驅動。
卸載原來的libpcap:
# rpm -qa libpcap //查看安裝的libpcap,若是有libpcap則強制卸載
# rpm --nodeps -e libpcap //按照原文的報錯,沒有--nodefs選項,使用的是--nodeps,不驗證包依賴性, –e 選項,意思是擦除erase
安裝pf_ring的libpcap:
# cd ../libpcap # ./configure # make # sudo make install
注:爲了使用PF_RING的優勢,請使用PF_RING使能的libpcap.a從新編譯應用。
4. 編譯網卡的驅動
進入到drivers目錄下,根據ethtool -i ethx命令查看的網卡類型和驅動進入指定的目錄進行編譯和安裝。
# cd /root/soft/PF_RING/PF_RING-5.6.2/drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src # make # sodu make install
安裝網卡驅動,進入到目錄lib/modules/<redhat-version>/kernel/drivers/net下進行網卡驅動安裝。
//網卡所在目錄: /root/soft/PF_RING/PF_RING-5.6.2/drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src
# sodu insmod e1000e.ko //安裝pf_ring網卡驅動
# sodu modprobe e1000e //只能載入/lib/modules/<kernel ver>/中模塊
安裝完畢,使用dmesg命令查看驅動信息:
# dmesg | grep Ethernet
5. 測試網絡的接收的包數
進入到userland/examples目錄編譯例子程序。
# cd <PF_RING PATH>/userland/examples # make # ./pfcount -i eth0 //捕獲eth0網口的數據報文
注:使用drivers/intel/ixgbe下的驅動(支持DNA的ixgbe驅動的網卡)+DNA驅動技術能夠達到線速採集,PF_RING模塊必須在DNA驅動以前加載。
6. 常見錯誤及解決方法
1. 編譯網卡模塊驅動錯誤
驅動所在目錄:/root/soft/PF_RING/PF_RING-5.6.2/drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src
錯誤信息:/root/soft/PF_RING/PF_RING-5.6.2/drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src/kcompat.h:3039: error: conflicting types for ‘netdev_features_t’
解決方法:vim kcompat.h +3039 // 註釋掉第3039行
2. 網卡驅動模塊所在目錄:/root/soft/PF_RING/PF_RING-5.6.2/drivers/PF_RING_aware/intel/e1000e/e1000e-2.0.0.1/src
加載網卡驅動模塊:insmod e1000e.ko