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安装完成。
009.CentOS 6.7安装运行netmap的更多相关文章
- MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记
MonoDevelop 4.2.2/Mono 3.4.0 in CentOS 6.5 安装笔记 说明 以root账户登录Linux操作系统,注意:本文中的所有命令行前面的 #> 表示命令行提示符 ...
- Centos、Ubuntu 安装 Mono、Jexus
Mono是.NET的跨平台实现 在众多关于语言的争论中,.NET一直被以不能跨平台而诟病,Mono改变了这一现状. 有人当心Mono会涉及版权啥的问题.高深的偶不懂,不过我觉得Unity3D都能用,为 ...
- Centos 7.0 安装Mono 3.4 和 Jexus 5.6
2013-07-26 写过一篇<CentOS 6.3下 安装 Mono 3.2 和Jexus 5.4>,CentOS 7在CentOS 6的基础上有很大的调整,本文是这篇文章的更新,主要介 ...
- 在CentOS 7上安装.NET Core R2跑Hello World
前言 在上个月.NET Core出了最新版本预览版,只是在Window系统上试验了一下.原本想等发布正式版的时候在linux系统上试试,可能还需要一段时间,刚好有空可以折腾一下. 由于之前安装的Ubu ...
- CentOS 7.0安装配置Vsftp服务器
一.配置防火墙,开启FTP服务器需要的端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...
- 在Centos中部署redis运行状态图形化监控工具 — RedisLive
写在前面 前两天看到张善友老师的一篇文章<先定个小目标, 使用C# 开发的千万级应用>,里面给出了一张腾讯OA基础服务中redis运行情况的一张监控图,然后想到自己的项目中前不久也上了re ...
- centos下编译安装lnmp
centos下编译安装lnmp 本文以centos为背景在其中编译安装nginx搭建lnmp环境. 编译安装nginx时,需要事先安装 开发包组"Development Tools" ...
- CentOS 6.6安装配置LAMP服务器(Apache+PHP5+MySQL)
准备篇: CentOS 6.6系统安装配置图解教程 http://www.osyunwei.com/archives/8398.html 1.配置防火墙,开启80端口.3306端口 vi /etc/s ...
- Centos 6.5安装oracle 11g
(添加host)一.Centos 6.5 安装图形界面 gnome # yum groupinstall "Desktop" # yum groupinstall "X ...
随机推荐
- 通过“回文字算法”复习C++语言。
一.什么是回文字 给定一个字符串,从前往后读和从后往前读,字符串序列不变.例如,河北省农村信用社的客服电话是“96369”,无论从后往前读,还是从前后往后读,各个字符出现的位置不变. 二.功能实现 ( ...
- python 实时遍历日志文件
首先尝试使用 python open 遍历一个大日志文件, 使用 readlines() 还是 readline() ? 总体上 readlines() 不慢于python 一次次调用 readlin ...
- MyEclipse10 中的两种FreeMarker插件的安装与配置
第一个插件是: freemarker-ide MyEclipce10.0中安装FreeMarker插件,这绝对是最简单的方法 ...
- Intercooler.js – 让 AJAX 像锚标签一样简单
使用 Intercooler,你可以添加 Ajax 到你的应用程序,而无需使用客户端模式的路由,认证,渲染,工厂或依赖注入.事实上,你不需要写任何的 JavaScript 代码.Intercooler ...
- 微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题
以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx ...
- listview复用机制研究
Listview在第一次的时候会先把屏幕上绘制的item都new出来,为了讲解方便我把new出来的item都用红色背景,复用的则用绿色背景. 可以看到这个list种有三种item.在第一次展示的时候, ...
- [Android]解决ClickableSpan中点击后ListView中item的长按冲突的问题
以下内容为原创,转载请注明: 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3823429.html 项目中碰到一个问题,情景是这样的: 有一个Lis ...
- 操作系统开发系列—10.内核HelloWorld ●
a.我们先来体验一下在Linux下用汇编编程的感觉,见代码 [section .data] ; 数据在此 strHello db "Hello, world!", 0Ah STRL ...
- Cordoval在iOS中的运用整理
一:关于Cordoval理论知识 1:PhoneGap是手机平台上流行的一款中间件.它构建在各种手机平台所提供的WebView(浏览器内核)组件的基础之上,使用javascript语言对应用开发者提供 ...
- [原] Android 自定义View步骤
例子如下:Android 自定义View 密码框 例子 1 良好的自定义View 易用,标准,开放. 一个设计良好的自定义view和其他设计良好的类很像.封装了某个具有易用性接口的功能组合,这些功能能 ...