DPDK L2 fwd代码走读报告(代码流程分析).docxVIP

DPDK L2 fwd代码走读报告(代码流程分析).docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
****DPDK 学习L2 fwd代码走读报告导师:***学生:***2016-2-18目录一、对于DPDK的认识:2二、对L2 fwd的认识:32.1运行配置32.2运行环境搭建42.3功能分析:62.4详细流程图(调用关系)如下:62.5运行截图82.6详细代码注释分析:8 一、对于DPDK的认识:主要应用x86通用平台,转发处理网络数据包,定位在不需要专用网络处理器,但通用网络处理器对数据处理性能又不能满足需求的客户。DPDK,搭载x86服务器,成本变化不大,但对数据的处理性能又有非常显著的提高,对传统linux技术做一定的优化,特别之处在于:hugepage,uio,zero copy, cpu affinity等。关于hugetlbpage(在这块大页面上做自己的内存管理系统),之前讲过,它的主要好处当然是通过利用大内存页提高内存使用效率,。由于DPDK是应用层平台,所以与此紧密相连的网卡驱动程序(当然,主要是intel自身的千兆igb与万兆ixgbe驱动程序)都通过uio(用户层驱动、轮询、0拷贝)机制运行在用户态下。cpu affinity(多核架构,核线程绑定物理核)机制是多核cpu发展的结果,,在越来越多核心的cpu机器上,如何提高外设以及程序工作效率的最直观想法就是让各个cpu核心各自干专门的事情,比如两个网卡eth0和eth1都收包,可以让cpu0专心处理eth0,cpu1专心处理eth1,没必要cpu0一下处理eth0,一下又处理eth1,还有一个网卡多队列的情况也是类似,等等,DPDK利用cpu affinity主要是将控制面线程以及各个数据面线程绑定到不同的cpu,省却了来回反复调度的性能消耗,各个线程一个while死循环,专心致志的做事,互不干扰(当然还是有通信的,比如控制面接收用户配置,转而传递给数据面的参数设置等)。 总结如下:1、 使用大页缓存支持来提高内存访问效率。2、 利用UIO支持,提供应用空间下驱动程序的支持,也就是说网卡驱动是运行在用户空间 的,减下了报文在用户空间和应用空间的多次拷贝。 3、 利用LINUX亲和性支持,把控制面线程及各个数据面线程绑定到不同的CPU核,节省了 线程在各个CPU核来回调度。 4、 提供内存池和无锁环形缓存管理,加快内存访问效率。在x86服务器,1G/10G/40G网卡包转发,64Byte小包,基本能做到70%以上的转发,而传统linux系统只能达5%左右,在网络大数据流时代,DPDK加码,优势明显。二、对L2 fwd的认识:2.1运行配置虚拟机软件:VMWare WorkStation?12.0.0 build-2985596CPU: 2个CPU, 每个CPU 2个核心内存: 1GB+网卡:intel网卡*2, 用于dpdk试验;另一块网卡用于和宿主系统进行通信2.2运行环境搭建在root权限下:1)编译dpdk进入dpdk主目录dpdk,输入make install T=x86_64-native-linuxapp-gcc进行编译2)配置大页内存(非NUMA)echo 128 /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepagesmkdir /mnt/hugemount -t hugetlbfs nodev /mnt/huge可以用以下命令查看大页内存状态:cat /proc/meminfo | grep Huge3)安装igb_uio驱动modprobe uioinsmod x86_64-native-linuxapp-gcc/kmod/igb_uio.ko4)绑定网卡先看一下当前网卡的状态./tools/dpdk_nic_bind.py --status图1 网卡已经绑定好进行绑定:./tools/dpdk_nic_bind.py -b igb_uio 0000:02:06.0./tools/dpdk_nic_bind.py -b igb_uio 0000:02:05.0如果网卡有接口名,如eth1, eth2, 也可以在-b igb_uio后面使用接口名, 而不使用pci地址。5 ) 设置环境变量:export RTE_SDK=/home/lv/dpdk/dpdk-1.7.0export RTE_TARGET=x86_64-native-linuxapp-gcc之后进入dpdk/examples/l2,运行make,成功会生成build目录,其中有编译好的l2fwd程序。6 ) 运行程序?./build/l2fwd?-c?f?-n?2?--?-q?1?-p?0x3??2.3功能分析:DPDK搭建环境完成后,网卡绑定到相应IGB_UIO驱动接口上,所有的网络数据包都会到DPDK,网卡接收网

文档评论(0)

有一二三 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档