作者:张华  发表于:2016-04-22
版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明

( http://blog.csdn.net/quqi99 )

组成模块

  • rte_timer,包装提供内核的Time-Stamp Couter(TSC)时间服务。让异步运行函数成为可能
  • rte_malloc, 从memzones中分配大页,相较于4K heap pages。页表项更少,TLB命中率更高。
  • rte_ring, 固定大小的环形缓存区。lockless multi-producer, multi-consumer, bulk/burst-enqueue/dequeue的FIFO队列管理API. 当中per-lcore变量通过Thread Local Storage(TLS)提供per-thread local storage.
  • rte_mempool, 分区pool,pool使用name标记并使用ring分配objects.
  • rte_mbuf, 用于提供对mbuf(ctrlmbuf + pktmbuf)的管理。mbuf存储在mempool中
  • rte_eal + libc, EAL(Environment Abstration Layer)提供对上述的接口。隐藏App和Lib之间的环境细节。如:Alarm操作、中断处理、CPU特性识别(rte_cpu_get_feature)、Trace和Debug功能、PCI总线訪问、原子锁操作、内存分配、Core亲和性、多进程&多线程、librte_hash(包转发算法), librte_lpm (Longest Prefix Match,包转发算法),librte_net)。EAL通过/sys向用户空间呈现PCI信息(/sys/bug/pci)与address space,EAL用igb_uio模块用户空间提供/dev/uidX设备文件,应用就能够使用mmap /dev/uidX到PCI address space。

    用户空间採用了pthread库。DPDK包含1G和10G的PMDs(Poll Mode Drivers), 及没有异步和中断信息机制的virtio控制器。

初始化

内存管理

一个连续的内存块通过rte_memseg来描写叙述,再通过memzone的概念来聚集(可使用rte_eal_get_configuration()来訪问)。使用aligh參数来对齐数据(2的指数倍但不大于64 bytes)。

memzone能够保留2MB或1G的大页。

CONFIG_RTE_MALLOC_DEBUG參数能够帮助调试缓存区溢出错误。
librte_malloc用于分配随意大小的内存,在NUMA中,是分配该core所在的NUMA socket还是其他socket上的内存由參数显然决定。常见两个数据结构:

  • malloc_heap, 管理per-socket上的free内存(每一个NUMA node上有一个heap结构), numa_socket, mz_count, lock, free_head.
  • malloc_elem, memzone中各种管理对象的通用头部描写叙述,heap, prev, next_free, state, padding, size.

KNI接口

DPDK提供了两种方法与linux kernel协议栈交互: TAP和KNI。KNI(Intel DPDK Kernel NIC Interface)同意用户应用訪问Linux控制平面。能够让TUN/TAP设备省去系统调用和数据拷贝(copy_to_user()/copy_from_user())的时间。也能够同意应用使用kernel tcp/ip栈及使用标准的的管理工具如ethtool, ifconfig,tcpdump等(/dev/kni)。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

參考

[1] http://www.cnblogs.com/chanwai1219/p/3680239.html
[3] Intel® Data Plane Development Kit (Intel® DPDK)

(WIP) DPDK理论学习(by quqi99)的更多相关文章

  1. WIP - Study Perf (by quqi99)

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99) Perf Flame Graph sudo perf ...

  2. DPDK support for vhost-user

    转载:http://blog.csdn.net/quqi99/article/details/47321023 X86体系早期没有在硬件设计上对虚拟化提供支持,因此虚拟化完全通过软件实现.一个典型的做 ...

  3. openvswitch dpdk

    作者:张华  发表于:2016-04-07版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 硬件要 ...

  4. Intel 推出 DPDK 开发包的意义是什么?

    Intel 推出 DPDK 开发包的意义是什么? http://www.zhihu.com/question/27413080?sort=created 基于intel dpdk的包处理器,相较于基于 ...

  5. ABP理论学习之Javascript API(理论完结篇)

    返回总目录 本篇目录 Ajax Notification Message UI block和busy 事件总线 Logging 其他工具功能 说在前面的话 不知不觉,我们送走了2015,同时迎来了20 ...

  6. [dpdk] 熟悉SDK与初步使用 (四)(L3 Forwarding源码分析)

    接续前节:[dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析) 前文中的最后一个问题,搁置,并没有找到答案.所以继续阅读其他例子的代码,想必定能在其他位置看到答案. ...

  7. [dpdk] 熟悉SDK与初步使用 (一)(qemu搭建实验环境)

    搭建实验环境: troubleshoot 第一步加载驱动 第二步切换驱动 使用了所有qemu支持的卡 [tong@T7:~/VM/dpdk] % cat start.sh sudo qemu-syst ...

  8. [dpdk] 熟悉SDK与初步使用 (二)(skeleton源码分析)

    接续前节:[dpdk] 熟悉SDK与初步使用 (一)(qemu搭建实验环境) 程序逻辑: 运行参数: 关键API: 入口函数: int rte_eal_init(int argc, char **ar ...

  9. [dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析)

    对例子IP Fragmentation的熟悉,使用,以及源码分析. 功能: 该例子的功能有二: 一: 将IP分片? 二: 根据路由表,做包转发. 路由表如下: IP_FRAG: Socket : ad ...

随机推荐

  1. 《CSS世界》学习笔记(一)

    <CSS世界>,张鑫旭著,人民邮电出版社,2017年12月第一版. 1.P9二维码链接文章的demo值得一看,可以实现有关“某些区域颜色始终保持一致”的效果. P9二维码所链接文章的一个d ...

  2. Spark学习之编程进阶——累加器与广播(5)

    Spark学习之编程进阶--累加器与广播(5) 1. Spark中两种类型的共享变量:累加器(accumulator)与广播变量(broadcast variable).累加器对信息进行聚合,而广播变 ...

  3. Android基础TOP6_3:Gally和ImageSwitcher实现画廊

    结构: Activity: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  4. url-safe base64 && base64

    1: 为什么需要base64? ASCII码一共规定了128个字符的编码,这128个符号,范围在[0,127]之间. 其中,[0,31],及127, 33个属于不可打印的控制字符. 在电子邮件传输信息 ...

  5. tomcat日志详释

    1.tomcat的日志分类: 一是运行中的日志,它主要记录运行的一些信息,尤其是一些异常错误日志信息 . 二是访问日志信息,它记录的访问的时间,IP ,访问的资料等相关信息. 2.tomcat的日志目 ...

  6. 如何创建C# Closure?

    JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure.下面就介绍一下如何在C#中创建神奇的闭包. 在这之前,我们必须先知道 ...

  7. js数组的处理

    //重写Array中的indexOf方法,获取数组中指定值的元素的索引 Array.prototype.indexOf = function (val) { for (var i = 0; i < ...

  8. vue+webpack+npm搭建的纯前端项目

    转载来源:https://www.cnblogs.com/shenyf/p/8341641.html 搭建node环境 下载 1.进入node.js官方网站下载页,点击下图中框出位置,进行下载即可,当 ...

  9. kubeadmin 安装k8s集群

    系统设置 CentOS Linux release 7.6.1810 (Core) 修改主机名 vim /etc/hostname k8s-master hostname -F /etc/hostna ...

  10. case when里的like功能 ////// 截取(substr)

    case when里的like功能 假如要用到case when又要用到like这样的功能,即如果字符串包含‘语文’就怎么怎么样,包含‘数学’就怎么怎么样,包含‘英语’就怎么怎么样,like是用于wh ...