DPDK编程指导——编写高效代码(翻译)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了DPDK编程指导——编写高效代码(翻译),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1725字,纯文字阅读大概需要3分钟。
内容图文
34 writing efficient code 编写有效的代码
34.1 Memory 内存
34.1.1 Memory Copy: Do not Use libc in the Data Plane 内存拷贝:不要再数据面使用lic
数据面数据操作使用rte_memcpy()
34.1.2 Memory Allocation 内存申请
数据面动态分配内存使用rte_malloc()
34.1.3 Concurrent Access to the Same Memory Area 并发访问同一内存区域
多核对同一内存区域的读写会产生很多数据缓存miss,性能消耗非常高。可以使用每核变量,例如,在统计的时候。
·使用RTE_PER_LCORE
·使用表结构(每个核一个,即每核的),这种情况,每个结构必须是cache-aligned(缓存对齐)
读为主的变量可以被多核共享,而没有性能损耗,如果没有读写变量在同一个cache line。
34.1.4 NUMA 非统一内存访问
访问本地内存,访问远地内存慢。
memzone、ring、rte_malloc 和 mempool 提供了在指定的socket上创建池的接口。
34.1.5 Distribution Across Memory Channels 分散访问内存通道
34.2 Communication Between lcores 核间通信
建议使用DPDK的ring,无锁环形队列。
支持批量bulk和突发burst访问。
34.3 PMD Driver
PMD可以工作在批量bulk/突发burst模式。
PCI设备通过DMA写入系统存储时,如果写操作在完整的cache line上,而非部分cache line,那消耗很少。PMD中的代码,已采取行动避免部分写入。
34.3.1 Lower Packet Latency 低数据包延迟
传统上,吞吐和延迟间存在一个权衡。提高吞吐,导致延迟增大;相反降低延迟,导致吞吐变低。
为了实现更高的吞吐,DPDK通过批量处理,来聚合单独处理每个包的消耗。
数据包不会被发送,直到tail指针被网卡相应的发送队列更新。
为了始终保持低延迟,即使在高负载情况下,应用程序开发者也应该避免批量处理。把burst值调整为1,这样可以保证一次只处理一个包,但是会降低吞吐。
34.4 Locks and Atomic Operations 锁和原子操作
原子操作意味着在指令之前暗含着lock前缀,这会引起处理器的LOCK信号被断言在执行后续指令期间。这在多核环境下对性能有很大的影响。通过在数据平面避免锁机制,让性能得到提升。使用每核变量,使用RCU代替rwlock。
34.5 Coding Considerations 编码注意事项
34.5.1 Inline Functions 内联函数
使用 static inline ,小的函数可以在头文件中声明为静态内联。
34.5.2 Branch Prediction 分支预测
使用 likely()、unlikely()
34.6 Setting the Target CPU Type 设置目标CPU类型
编译优化 -O3
35 PROFILE YOUR APPLICATION 分析应用程序
英特尔处理器提供的性能计数器来监控事件。由英特尔提供的一些工具可以用来分析和基准测试应用程序。请参阅从英特尔按VTune性能分析器必备出版物以获取更多信息。
对于DPDK的应用程序,这可以在Linux应用程序只的环境中进行。
应通过事件计数器进行监控的主要情况是:
·Cache misses 高速缓存未命中
·Branch mis-predicts 分支误预测
·DTLB misses
·Long latency instructions and exceptions 长延迟指令和异常
请参阅英特尔性能分析指南,了解应用程序分析的详细信息。
原文:http://www.cnblogs.com/yilipika/p/5019958.html
内容总结
以上是互联网集市为您收集整理的DPDK编程指导——编写高效代码(翻译)全部内容,希望文章能够帮你解决DPDK编程指导——编写高效代码(翻译)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。