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

作者:张华  发表于:2016-04-22版权声明:能够随意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 组成模块 rte_timer,包装提供内核的Time-Stamp Couter(TSC)时间服务.让异步运行函数成为可能 rte_malloc, 从memzones中分配大页,相较于4K heap pages.页表项更少,TLB命中率更高. rte_ring, 固定大小的环形缓存区.lockless mu…
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99) Perf Flame Graph sudo perf record -F 99 -g -- sleep 30 $(pidof qemu-system-x86_64) sudo perf report -n --stdio sudo perf script | gzip > out.perf01.gz git clone https://github.…
转载:http://blog.csdn.net/quqi99/article/details/47321023 X86体系早期没有在硬件设计上对虚拟化提供支持,因此虚拟化完全通过软件实现.一个典型的做法是通过优先级压缩(Ring Compression)和二进制代码翻译(Binary Translation)相结合,VMM在特权级ring 0, Guest操作系统在非特权级ring 1, Guest应用程序在ring 3.由于Guest操作系统工作在非特权级ring 1中,这样当它执行特权指令时…
作者:张华  发表于:2016-04-07版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 硬件要求 网卡得支持DPDK,见:http://dpdk.org/doc/nics CPU得支持DPDK, 测试命令:cat  /proc/cpuinfo |grep pdpe1gb 不一定非要支持DPDK硬件的网卡才能做实验,因为DPDK也支持virtio dpdk driver. 打开大页支持 hua…
Intel 推出 DPDK 开发包的意义是什么? http://www.zhihu.com/question/27413080?sort=created 基于intel dpdk的包处理器,相较于基于内核网络协议栈的包处理器,优势和价值在哪里?基于dpdk的包处理性能,是否会比基于内核协议栈高,如果高会高多少,内核网络协议栈的瓶颈又主要在哪里? 市场一句话:Intel推出dpdk,就是为了让自己的硬件产品卖得更好.功能多了,灵活度高了,性能又不赖,谁不愿意买哟?dpdk只适合在x86平台下使用,…
返回总目录 本篇目录 Ajax Notification Message UI block和busy 事件总线 Logging 其他工具功能 说在前面的话 不知不觉,我们送走了2015,同时迎来了2016.我相信,每一个人,都会在过去的一年有所失,但我更相信,我们所得到的更多.过去的就过去了,不要再计较了,但要从过去的各种不顺中汲取经验,这样,在全新的2016年里继续留下2015年遗憾的概率才会大大降低!祝大家在新的一年里,代码bug越来越少! 本来给这个ABP理论学习系列的预算时间是2016年…
接续前节:[dpdk] 熟悉SDK与初步使用 (三)(IP Fragmentation源码分析) 前文中的最后一个问题,搁置,并没有找到答案.所以继续阅读其他例子的代码,想必定能在其他位置看到答案. 使用,大致过了一般文档和代码,试运行一下: 绑定2,3,6,7四颗CPU核心.使用port1,port2. port0/queue0/core2映射在一起.port0/queue1/core3映射在一起.port1/queue0/core6映射在一起.port1/queue1/core7映射在一起.…
搭建实验环境: troubleshoot 第一步加载驱动 第二步切换驱动 使用了所有qemu支持的卡 [tong@T7:~/VM/dpdk] % cat start.sh sudo qemu-system-x86_64 -nographic -vnc -enable-kvm \ -m 2G -cpu Nehalem -smp cores=,threads=,sockets= \ -numa node,mem=1G,cpus=-,nodeid= \ -numa node,mem=1G,cpus=-…
接续前节:[dpdk] 熟悉SDK与初步使用 (一)(qemu搭建实验环境) 程序逻辑: 运行参数: 关键API: 入口函数: int rte_eal_init(int argc, char **argv) 内存池函数: rte_pktmbuf_pool_create.  它是函数 rte_mempool_create 的一个封装. struct rte_mempool * rte_pktmbuf_pool_create(const char *name, unsigned n, unsigne…
对例子IP Fragmentation的熟悉,使用,以及源码分析. 功能: 该例子的功能有二: 一: 将IP分片? 二: 根据路由表,做包转发. 路由表如下: IP_FRAG: Socket : adding route (port ) IP_FRAG: Socket : adding route (port ) IP_FRAG: Socket : adding route (port ) IP_FRAG: Socket : adding route (port ) IP_FRAG: Socke…
大页内存分配:  NUMA系统(现在的linux一般都是) echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages [root@localhost dpdk-dst]# lscpu Architecture: x86_64…
1 前言 DPDK将利用hugepage预留的物理内存统一的组织管理起来,然后以库的方式对外提供使用的接口.下图展示了DPDK中内存有关的模块的相互关系. rte_eal            是统一的组织管理者(当然rte_eal不只是做内存的工作) rte_malloc       对外提供分配释放内存的API,分配的内存都是rte_eal中管理的内存 rte_ring          提供无锁队列,他之间使用了rte_eal管理的内存 rte_mempool  利用rte_eal中的内存…
1.知识百科 返回值 操作函数 函数功能 RTE_DECLARE_PER_LCORE (unsigned, _lcore_id) RTE_DECLARE_PER_LCORE (rte_cpuset_t, _cpuset) static unsigned rte_lcore_id (void) 返回当前运行的lcore ID static unsigned rte_get_master_lcore (void) 返回管理lcore的ID static unsigned rte_lcore_coun…
作者:张华  发表于:2014-12-09版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) VPC(virtual private cloud,虚拟私有云)是一个公共云计算资源的动态配置池,相当于企业用户通过VPN访问它们在公有云中托管的私有局域网.公有云是多租户架构各租户之间资源是隔离的,而局域网中可以是定义了很多网段但这些网段之间是可以互通的也就是说它是单租户架构.所以一个VPC基本上把云提…
1.前言 记得刚开始工作的时,老大将我安排到数据面组,当时第一次听说”数据面“这个概念,感觉挺新鲜的.误打误撞就开始搞了,刚开始接触的时候,由于不懂其中的原理,觉得很神奇,因为报文的转发是在应用层,通过一个进程进行转发.而传统的报文转发是基于内核的,要想控制报文,需要写驱动程序.后面接触了一段时间,发现原来报文转发是基于intel开源的DPDK开发的,分为控制面和数据面.这就是当前比较火热的软件定义网路SDN的一种应用场景.DPDK应用程序是运行在用户空间上利用自身提供的数据平面库来收发数据包,…
目录 1. 所用系统与软件版本 2. 虚拟机配置 3. Ubuntu 12.04上的配置 3.1 准备 3.2 通过setup脚本进行配置 3.3 通过命令配置 4. CentOS 7.0上的配置 4.1 准备 正文 DPDK介绍见:www.dpdk.org 本文介绍的步骤基本适用于dpdk 1.7.0 - dpdk 2.0.0 各版本.只是setup.sh显示的菜单有一些小的不同: 同样的,也适用于ubuntu更高版本(已在ubuntu 12.04+及14.04上验证过) 回到顶部 1. 所用…
这次主要是测试在dpdk方案下,ineedle的处理包的性能. 发包工具: 使用立永当时写的一个发包工具:linux_pcap 做法:大概是从网上抓取了一些数据包,将源ip替换为随即ip,sip替换为要监控的ip地址.然后用pcap工具进行发包 设备:这次发包工具运行在测试机上,也就是这次跑ineedle的DELLR430设备,用em2端口发包,用p1p4接口来接收包. 注意:要打开网卡的混杂模式. 说明:这个设备性能比较好,发包正常的包最大速度能够达到:75M/s.单包发送(排除IO干扰)情况…
dpdk.org What it is Intel® DPDK is a set of libraries and drivers for fast packet processing on x86 platforms. It runs mostly in Linux userland. This project tracks the Intel® DPDK and includes all major public contributions. The most recent patches…
DPDK介绍见:www.dpdk.org 本文介绍的步骤基本适用于dpdk 1.7.0 - dpdk 2.0.0 各版本.只是setup.sh显示的菜单有一些小的不同:同样的,也适用于ubuntu更高版本(已在ubuntu 12.04+及14.04上验证过) 1. 所用系统与软件版本 系统:Ubuntu 12.04.3 LTS 64位, CentOS Linux release 7.0.1406 64位dpdk: 1.7.0 (下载页) dpdk 1.7.1 经过试验,发现在这两个系统上都有问题…
参考:dpdk getting started 系统: Ubuntu 14.04 内核信息: 执行 uname -a Linux chen-VirtualBox 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux Using the Data Plane Development Kit 预准备 三种安装途径: (1) wget www.dpdk.org/brows…
接续前节. 7 PMD (Poll Mode Driver) A Poll Mode Driver (PMD) consists of APIs, provided through the BSD driver running in user space, to configure the devices and their respective queues. In addition, a PMD accesses the RX and TX descriptors directly with…
该文档是随着对于文档的阅读进度,不断增加的阅读笔记.主要内容以大纲为主,以及记录帮助记忆的内容. 在之后的实际应用中,也不随着不断的深入理解,逐渐丰富各大纲下面的内容. 1. 前期准备:设置两个环境变量. export RTE_SDK=/home/user/DPDK export RTE_TARGET=x86_64-native-linuxapp-gcc 2. dpdk提供的环境抽象层: DPDK loading and launching                        DPDK…
续前节, 测试小程序 1. 想编译测试程序首先需要设置两个环境变量,为什么呢,因为测试程序的Makefile里用了... rpm装了打包好的devel包,这个rpm也会自带这两个环境变量.就是说写第三方程序的时候,习惯上,约定了这两个环境变量. [root@dpdk tools]# cat ~/env.sh export RTE_SDK=/root/dpdk-16.07 export RTE_TARGET=x86_64-native-linuxapp-gcc [root@dpdk tools]#…
续前节.切好继续: 一,文档里提到uio_pci_generic, igb_uio, vfio_pci三个内核模块,完全搞不懂,以及dpdk-devbind.py用来查看网卡状态,我得到了下边的输出: [root@dpdk tools]# ./dpdk-devbind.py --status Network devices using DPDK-compatible driver ============================================ <none> Netwo…
前提:已读了这本书<<深入浅出dpdk(朱清河等著)>>. 目标:读官方文档,同时跟着文档进行安装编译等工作. http://dpdk.org/doc/guides/index.html 环境:thinkpadT450 + archlinux + kvm + CentOS 7(逐层自下而上的关系) KVM参数: sudo qemu-system-x86_64 -nographic -enable-kvm -numa node -numa node -drive file=disk.…
DPDK通过在线程中使用epoll模型,监听UIO设备的事件,来模拟操作系统的中断处理. 一.中断初始化 在rte_eal_intr_init()函数中初始化中断.具体如下: 1.首先初始化intr_sources链表.所有UIO设备的中断都挂在这个链表上,中断处理线程通过遍历这个链表,来执行设备的中断. 2.创建intr_pipe管道,用于epoll模型的消息通知. 3.创建线程intr_thread,线程的执行体是eal_intr_thread_main()函数,创建epoll模型,遍历in…
DPDK通过在多核设备上,创建多个线程,每个线程绑定到单独的核上,减少线程调度的开销,以提高性能. DPDK的线程分为控制线程和数据线程,控制线程一般绑定到MASTER核上,主要是接受用户配置,并传递配置参数给数据线程等:数据线程主要是处理数据包. 一.初始化 1.rte_eal_cpu_init()函数中,通过读取/sys/devices/system/cpu/cpuX/下的相关信息,确定当前系统有哪些CPU核,已经每个核属于哪个CPU Socket. 2.eal_parse_args()函数…
DPDK以两种方式对外提供内存管理方法,一个是rte_mempool,主要用于网卡数据包的收发:一个是rte_malloc,主要为应用程序提供内存使用接口.本文讨论rte_mempool.rte_mempool由函数rte_mempool_create()负责创建,从rte_config.mem_config->free_memseg[]中取出合适大小的内存,放到rte_config.mem_config->memzone[]中. 本文中,以l2fwd为例,说明rte_mempool的创建及使…
1 前言 DPDK通过使用hugetlbfs,减少CPU TLB表的Miss次数,提高性能. 2 初始化 DPDK的内存初始化工作,主要是将hugetlbfs的配置的大内存页,根据其映射的物理地址是否连续.属于哪个Socket等,有效的组织起来,为后续管理提供便利. 2.1 eal_hugepage_info_init() eal_hugepage_info_init()主要是获取配置好的Hugetlbfs的相关信息,并将其保存在struct internal_config数据结构中. 主要工作…
常用查询scripts /*bom*/ select p_item.segment1,c_item.segment1,bic.COMPONENT_QUANTITY,bic.COMPONENT_YIELD_FACTOR from bom_bill_of_materials bbom, bom_inventory_components bic, mtl_system_items_b p_item, mtl_system_items_b c_item where bbom.BILL_SEQUENCE_…