文章版权归属yynote.com.转载请标明出处.
原文发表在 YYNOTE.COM 本文地址: http://yynote.com/blog/detail/networking/netmap-study-1
在工作中用到netmap这个高性能IO框架,觉得不错,就整理了一些分析笔记,和大家共享,欢迎交流.
-
Netmap简介
Netmap是一款高性能网络IO框架,由意大利比萨大学信息工程系副教授Luigi Rizzo编写,其官方网址为:http://info.iet.unipi.it/~luigi/netmap. 源代码网址: https://code.google.com/p/netmap/ .
Netmap 使用多种技术比如:内存映射、环形队列、批量处理等来减少内核空间以及用户空间内存申请和释放、避免内存在内核空间和用户空间的拷贝以及减少系统调用。
目前支持linux/FreeBsd, FreeBSD系统从9.0开始已经包含了netmap所有的源代码; 而linux上需要自行下载netmap源码,目前支持大于linux 2.6.32的版本.
Netmap支持大多数的网卡型号:
Intel ixgbe (10G)
e1000/e1000e/igb (1G)
Realtek 8169 (1G)
Nvidia (1G)Netmap目前的性能测试如下:
ixgbe 12.5Mpps
e1000/e1000e 1.15~1.32Mpps -
netmap驱动在linux上的编译、安装
2.1 源码下载
首先从https://code.google.com/p/netmap/ 获得源代码:
cd ~/workspace
git clone https://code.google.com/p/netmap说明: 本文档的netmap代码版本基于https://code.google.com/p/netmap/.
commit be60f844ceb135f4fe63c16897b3882399326d5f
Author : Vincenzo Maffione <v.maffione@gmail.com>
Date : Sun Mar 23 18:55:49 2014 +01002.2 编译
假如系统运行的linux的源代码目录树在目录/a/b/linux-A.B.C
进入netmap源码目录:
cd ~/workspace/netmap/LINUX
make KSRC=/a/b/linux-A.B.C这样将在目录~/workspace/netmap/LINUX/ 目录下生成netmap_lin.ko 的文件,该文件为netmap模块文件。同时会在网卡类型对应的文件夹下生成相应的驱动文件。
以e1000网卡为例,会在LINUX/e1000下生成e1000.ko文件。
2.3 安装
以e1000网卡为例,我们首先要将系统已经加载的原生e1000.ko 模块卸载下来,再加载打了netmap补丁的e1000.ko,同时还要加载netmap_lin.ko模块。
rmmod e1000
insmod netmap_lin.ko
insmod ~/workspace/netmap/LINUX/e1000.ko到此,安装完成。用户层代码未激活netmap时,e1000驱动表现和原生驱动一样。只有当netmap被激活后,netmap_lin.ko 将接替e1000网卡驱动工作。
2.4 测试
在example目录下有bridge和pkt-gen两个实例。
bridge 程序可以将不同的网卡接口桥接在一起,如果是在同一个网卡上,则是支持系统协议栈。如果程序能成功运行并且能完成桥接功能,则netmap安装成功。详见帮助:bridge -h
Pkt-gen 是用于测试接收发送报文速率。详见帮助:pkt-gen -h
今天就写到这,后面会分析netmap的实现原理.
文章版权归属yynote.com.转载请标明出处.
本文地址: http://yynote.com/blog/detail/networking/netmap-study-1