作者:张华  发表于: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. python __slots__ 详解(上篇)

    转自:http://blog.csdn.net/sxingming/article/details/52892640 python中的new-style class要求继承Python中的一个内建类型 ...

  2. DeepCloneObjects 和 DeepClone

    ARX AcDbDatabase 中的方法 deepCloneObjects() 和 wblock() 区别以及和 AcDbObject 方法 clone() 和 deepClone() 的关系 Ac ...

  3. CAD利用Select2得到所有实体(网页版)

    主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...

  4. CAD得到所有实体2

    主要用到函数说明: IMxDrawSelectionSet::Select2 构造选择集.详细说明如下: 参数 说明 [in] MCAD_McSelect Mode 构造选择集方式 [in] VARI ...

  5. RabbitMQ系列(三)--Java API

    基于java使用RabbitMQ 框架:SpringBoot1.5.14.RELEASE maven依赖: <dependency> <groupId>com.rabbitmq ...

  6. 2018最新Python小白入门教程,30天学会Python

    随着Python的技术的流行,Python在为人们带来工作与生活上带来了很多的便捷,因为Python简单,学起来快,也是不少新手程序员入门的首选语言.作为一名Python爱好者,我也想跟大家分享分享我 ...

  7. Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986

    Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证. 具体来说,就是添加了些规则去限制HTTP头的规范性 参考这里 具体来说: org.apache.tom ...

  8. Manjaro安装配置美化字体模糊发虚解决记录

    Manjaro安装记录 前言: ​ 记录自己Manjaro18安装的一些坑,避免下次满互联网找解决方法.在此之前试过Manjaro.Ubuntu.Fedora.linux Mint系统的pac.yum ...

  9. Mybatis中collection和association的使用区别

    1. 关联-association2. 集合-collection 比如同时有User.java和Card.java两个类 User.java如下: public class User{ privat ...

  10. java解析从接口获取的json内容并写到excle(只写与标题匹配的值,并非把所有的接口返回值都写进去)

    需求:从接口中获取的一个json数组中有多个对象,每个对象中的值并非都需要,只需查出标题中的几项对应的值即可.且还需要按某个字段排序后依次写到excel 实现方法如下: package jansonD ...