netmap分析(1)

来源:互联网 发布:佳能ip3600清零软件 编辑:程序博客网 时间:2024/05/21 15:02

文章版权归属yynote.com.转载请标明出处.

原文发表在 YYNOTE.COM 本文地址: http://yynote.com/blog/detail/networking/netmap-study-1


在工作中用到netmap这个高性能IO框架,觉得不错,就整理了一些分析笔记,和大家共享,欢迎交流.

  1. 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
  2. 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 +0100

    2.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


0 0
原创粉丝点击