009.CentOS 6.7安裝運行netmap


一.netmap簡介:

    1.netmap是一個高性能收發原始數據包的框架,由Luigi Rizzo等人開發完成,其包含了內核模塊以及用戶態庫函數。其目標是,不修改現有操作系統軟件以及不需要特殊硬件支持,實現用戶態和網卡之間數據包的高性能傳遞。(照搬的!)

    2.netmap通過自帶的網卡驅動直接接管網卡,運行時申請一塊固定的內存池,用於接受網卡上到來的數據包以及需要發送給網卡的數據包。

    3.netmap目前只支持幾種網卡的驅動,官網上介紹的Intel ixgbe (10G),ixl (10/40G), e1000/e1000e/igb (1G), Realtek 8169 (1G) and Nvidia (1G).

 

二.安裝說明

    1.使用ubuntu安裝netmap,只需要內核源代碼,不需要編譯內核。而centos上就需要編譯並使用新內核了(若有不編譯內核的方法,希望指正!)。

    2.netmap上支持的網卡驅動有限,所以本次實驗使用實在虛擬機(vmware)下面操作,虛擬的e1000網卡。

    3.所有操作均在root權限下進行,沒有管那些權限問題啦!

 

三.安裝新的內核

    centos升級內核的教程網上很多,但對於netmap而言,需要選取正確的linux內核源代碼,本次安裝使用的是linux-4.1.14.tar.xz的linux內核(使用3.10.94版本的內核編譯過一次,不能運行netmap。)Linux內核下載地址:https://www.kernel.org/

本次實驗參考的內核升級教程:http://www.linuxidc.com/Linux/2014-01/95511.htm

1.1 下載新的內核,並解壓:

[root@huh ~]# cd /usr/local/src
[root@huh src]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.1.14.tar.xz
[root@huh src]# tar -Jxvf linux-4.1.14.tar.xz 
[root@huh src]# mv linux-4.1.14 /usr/src/
[root@huh src]# cd /usr/src/

1.2 更新當前系統:

[root@huh src]# yum update
[root@huh src]# yum upgrade

1.3 安裝必要軟件:

[root@huh src]# yum groupinstall "Development Tools" # 一口氣安裝編譯時所需的一切工具
[root@huh src]# yum install ncurses-devel            #必須這樣才能讓 make *config 這個指令正確地執行。
[root@huh src]# yum install qt-devel                 #如果你沒有 X 環境,這一條可以不用
[root@huh src]# yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel #創建 CentOS-6 內核時需要它們

2.1 查看當前系統的內核:

[root@huh src]# uname -r
2.6.32-573.el6.i686

2.2 將當前系統的配置文件拷貝到當前目錄

[root@huh src]# cd linux-4.1.14/
[root@huh linux-4.1.14]# cp /boot/config-2.6.32-573.el6.i686 .config

2.3 使用舊內核配置,並自動接受每個新增選項的默認設置

[root@huh linux-4.1.14]# sh -c 'yes "" | make oldconfig'

make oldconfig會讀取當前目錄下.config文件,在.config文件里沒有找到的選項則提示用戶填寫,然后備份.config文件為.config.old,並生成新的.config文件

3.編譯

[root@huh linux-4.1.14]# make -j4 bzImage              #生成內核文件,大概需要十幾分鍾
[root@huh linux-4.1.14]# make -j4 modules              #編譯模塊,大概需要半小時
[root@huh linux-4.1.14]# make -j4 modules_install      #編譯安裝模塊,比較快

要嚴格按照這個先后順序進行編譯,不能一起執行。

-j后面的數字是線程數,用於加快編譯速度,一般的經驗是,有多少G內存,就填寫那個數字,例如有8G內存,則為-j8

4.安裝

[root@huh linux-4.1.14]# make install

如果出現了 ERROR: modinfo: could not find module xxx,數量少的話,可以忽略。

5.修改grub引導順序,讓新安裝的內核作為默認內核

[root@huh linux-4.1.14]# vim /boot/grub/grub.conf

將default=1配置行改為default=0(數一下剛剛新安裝的內核在哪個位置,從0開始,然后設置default為那個數字,一般新安裝的內核在第一個位置,所以設置default=0。)

6.關機

 

四.修改虛擬CentOS的網卡類型

找到虛擬機存儲路徑,找到.vmx為后綴的配置文件(本人使用的vmware虛擬機),使用編輯工具打開,添加或修改如下配置(位置無所謂):

ethernet0.virtualDev = "e1000"

注意:改的是eth0的網卡配置

 

五.使用netmap收發數據包

1.開啟虛擬機,查看當前內核版本:

[root@huh src]# uname -r
4.1.14

2.查看當前網卡類型:

[root@huh ~]# lsmod |grep e1000
e1000                 118376  0 

3.下載netmap

[root@huh ~]# git clone https://github.com/luigirizzo/netmap.git

netmap官網:http://info.iet.unipi.it/~luigi/netmap/

netmap的githab網址:https://github.com/luigirizzo/netmap 

netmap手冊:man /root/netmap/share/man/man4/netmap.4 

4.編譯netmap,生成網卡驅動程序以及測試程序

[root@huh ~]# cd netmap/LINUX/
[root@huh LINUX]# make KSRC=/usr/src/linux-4.1.14/
[root@huh LINUX]# cd build-apps/
[root@huh build-apps]# vim Makefile 

將Mackfile中"CFLAGS += -Werror -Wall -Wunused-function"配置行的-Werror參數刪掉,不然生成測試程序會報錯,保存退出!

[root@huh build-apps]# cd ..
[root@huh LINUX]# make KSRC=/usr/src/linux-4.1.14/ apps

沒報錯的話,生成的測試接收包的可執行文件都在build-apps目錄下面。

5.替換網卡驅動(寫成了一個小腳本,方便每次替換)

[root@huh LINUX]# cd
[root@huh ~]# cat mount_netmap.sh
#!/bin/bash
rmmod e1000
insmod /root/netmap/LINUX/netmap.ko
insmod /root/netmap/LINUX/e1000/e1000.ko
lsmod |grep e1000

6.運行測試程序

[root@huh ~]# cd netmap/LINUX/build-apps/
[root@huh build-apps]# ./pkt-gen -i eth0 -f tx
843.803242 main [1930] interface is eth0
843.806747 main [2050] running on 1 cpus (have 2)
843.808433 extract_ip_range [367] range is 10.0.0.1:0 to 10.0.0.1:0
843.808493 extract_ip_range [367] range is 10.1.0.1:0 to 10.1.0.1:0
843.813622 main [2148] mapped 334980KB at 0xa3080000
Sending on netmap:eth0: 1 queues, 1 threads and 1 cpus.
10.0.0.1 -> 10.1.0.1 (00:00:00:00:00:00 -> ff:ff:ff:ff:ff:ff)
843.813828 main [2233] Sending 512 packets every  0.000000000 s
843.813851 main [2235] Wait 2 secs for phy reset
845.814327 main [2237] Ready...
845.816526 sender_body [1211] start, fd 3 main_fd 3
846.816691 main_thread [1720] 69.345 Kpps (69.424 Kpkts 33.324 Mbps in 1001145 usec) 14.98 avg_batch 0 min_space
847.268327 sender_body [1293] drop copy
847.817915 main_thread [1720] 69.176 Kpps (69.261 Kpkts 33.245 Mbps in 1001229 usec) 14.98 avg_batch 99999 min_space
848.819100 main_thread [1720] 65.934 Kpps (66.012 Kpkts 31.686 Mbps in 1001183 usec) 14.99 avg_batch 99999 min_space
849.820296 main_thread [1720] 67.257 Kpps (67.337 Kpkts 32.322 Mbps in 1001192 usec) 14.99 avg_batch 99999 min_space
850.821500 main_thread [1720] 67.220 Kpps (67.301 Kpkts 32.304 Mbps in 1001207 usec) 14.98 avg_batch 99999 min_space
851.822731 main_thread [1720] 68.520 Kpps (68.602 Kpkts 32.929 Mbps in 1001202 usec) 14.99 avg_batch 99999 min_space
852.823912 main_thread [1720] 65.321 Kpps (65.400 Kpkts 31.392 Mbps in 1001217 usec) 14.99 avg_batch 99999 min_space
853.825202 main_thread [1720] 61.373 Kpps (61.452 Kpkts 29.497 Mbps in 1001291 usec) 14.99 avg_batch 99999 min_space
^C854.321161 sigint_h [404] received control-C on thread 0xb77a2b30
854.321204 main_thread [1720] 60.650 Kpps (30.082 Kpkts 14.439 Mbps in 495996 usec) 14.98 avg_batch 99999 min_space
854.321370 sender_body [1326] flush tail 6 head 6 on thread 0xa307fb70
854.321472 sender_body [1334] pending tx tail 6 head 6 on ring 0
854.321849 sender_body [1334] pending tx tail 6 head 6 on ring 0
855.322625 main_thread [1720] 15.000 pps (15.000 pkts 7.200 Kbps in 1001404 usec) 15.00 avg_batch 99999 min_space
Sent 564886 packets 33893160 bytes 37695 events 60 bytes each in 8.50 seconds.
Speed: 66.419 Kpps Bandwidth: 31.881 Mbps (raw 44.634 Mbps). Average batch: 14.99 pkts
[root@huh build-apps]# 

 

六,到此,netmap安裝完成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM