- 博客(13)
- 资源 (6)
- 收藏
- 关注
原创 DPDK-利用DPDK开发项目应该注意的性能点
0x01 缘由 最近也在尝试写一个DPDK应用程序,也是对之前的学习做一下检验。然而在编写过程中,发现自己陷入到一个码API的思路中,完全没有考虑到DPDK的设计思想,于是放开编程指南,学习下。0x02 写高效的代码 Intel® 64 and IA-32 指导手册。 1.内存 内存拷贝:建议不要使用libc中的memcpy函数,而用rte_memcpy
2017-11-28 15:44:31 5612
原创 DPDK-__attribute__((constructor))
0x01 缘由 在DPDK库开发过程中,遇到的问题。做个简短小结。#include__attribute__((constructor)) void before_main() { printf("Before main\n");}__attribute__((destructor)) void after_main() { printf("After main\n")
2017-11-20 10:36:19 900
原创 DPDK-同步互斥机制
0x01 缘由 继续学习DPDK设计思想。0x02 概念 原子操作:多个线程执行一个操作时,其中任何一个线程要么完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就是原子的。原子操作操作系统中:“不能被进一步分割的最小粒子”。 原子保证操作:一些基础的内存事务操作,如对一个字节的读和写,它们总是原子的。对于边界对齐的字节、字、双字和四字节都可
2017-11-15 15:02:51 1566
原创 DPDK-并行计算
0x01 缘由 继续学习DPDK在并行计算上的优化。对于DPDK的主要应用领域--数据包处理。资源局部优化、避免跨核共享、减少临界区碰撞、加快临界区皖苏完成速率,都不同程度地降低了不可并行部分和并发干扰部分的占比。0x02 慨念 多核处理器:在一个处理器中集成两个或者多个完整的内核(及计算引擎)。 超线程(Hyper-Threading):在一个处理器中提供两个逻
2017-11-14 16:33:44 682
原创 DPDK-Cache和内存优化点
0x01 缘由 在一篇博文中看到false-sharing问题(多核编程中伪共享问题),引发了我对DPDK内存和Cache的思考和学习。看看这些知识点,大部分都是计算机组成原理和操作系统的知识点,如果做系统编程,这些知识点不能还给大学老师。0x02 概念 南桥:系统I/O芯片(SI/O):主要管理中低速外部设备;集成了中断控制器、DMA控制器、PCI网卡等。 北
2017-11-13 15:49:51 1550
原创 DPDK-工具脚本网卡与驱动绑定
0x01 缘由 dpdk_nic_bind.py脚本功能,将网卡名称同dpdk支持的驱动进行绑定,直接修改相关参数来达到此目的。此脚本处理流程:解析参数、检测网卡、将对应的网卡与对应驱动绑定。 脚本做了异常处理:防止断开ssh连接,避免将DPDK驱动绑定到管理网口上。0x02 源码注释 直接上源码目的,复习python和看如何手动绑定驱动。import sys
2017-11-09 13:19:24 7951
原创 API设计--性能
0x01 缘由 前面学习了一些API编写的原则,作为后期的指导作用。今天关注一些API性能细节和分析方法。0x02 API考虑的性能指标和原则 1.编译时速度。 2.运行时速度。 3.运行时内存开销。 4.库的大小。 5.启动时间。 一个重要的性能优化经验是:绝不应该相信你的“哪些部分会比较慢”直觉,而是应该在实际环境中测量
2017-11-08 10:16:18 463
原创 设计模式-包装模式(代理模式、适配器模式、外观模式)
0x01 缘由 编写基于另一组类的包装器接口是一项常见的API设计任务。例如,你的工作可能是维护一个大型的遗留代码库,相比重构所有代码,你更愿意设计一个新的、更简洁的API,以隐藏所有的底层遗留代码;或者你可能已经编写了一个C++ API,后来需要给特定客户提供纯C接口;或者你的API用到了一个第三方依赖库,你想让客户直接使用此库,但是又不想将此库直接暴露给客户。 以上就是包装
2017-11-06 15:47:07 1527
原创 DPDK-UIO 驱动认识
0x01 缘由 前期学习了一些DPDK的demo,了解了一些基础DPDK的应用。对dpdk的一些底层原理没做过多分析,今天主要学习用户态驱动程序的实现情况。0x02 用户态驱动程序UIO UIO(Userspace I/O)是运行在用户空间的I/O技术。Linux系统中一般的驱动设备都是运行在内核空间,而在用户空间用应用程序调用即可。 UIO的内核部分和用户空间的
2017-11-06 14:52:02 9134 1
原创 DPDK-KNI学习和利用(DNS服务)
0x01 缘由 看到这个例子,不禁想起前期我们做的一个项目,我们通过pfring捕获数据包,想让这个数据包再回到linux协议栈,然后访问我们的服务。我记得我们采用的方式是将两个物理网卡相连,然后数据包转发到另外一个普通网卡,让其进Linux协议栈处理流程。 同样KNI也是一种方式,用DPDK捕获数据包让其走linux协议栈去处理。0x02 KNI是咋回事? KN
2017-11-03 16:43:24 7812
原创 设计模式--工厂模式
0x01 缘由 继续学习相关设计模式,在编程中得到进一步利用,在目前的产品开发过程中,有很多地方都用到了工厂模式。0x02 工厂模式 “工厂”现实中的意义是按照某种工艺制造产品。那么为什么要使用工厂模式了?有什么好处? 工厂模式是一个创建型的设计模式。他允许创造对象时不指定要创建的对象的具体类型(可能就某个参数)。本质上,工厂方法是构造函数的一般化。在C++中,构
2017-11-03 14:08:07 232
转载 C++11特性
转载理由:最近在找一些高性能开源库,结果都需要支持C++11特性,然而公司产品开发编译器版本又比较低,所以看看C++11到底啥特性。转载于:http://blog.csdn.net/linchaolong/article/details/46336501auto自动推导类型。 auto i = 10; std::cout std::endl;
2017-11-01 14:08:08 192
原创 设计模式--Pimpl(pointer to implementation 指向实现的指针)
0x01 缘由 以前学习了一些设计模式,但是实践中使用得较少。用得比较多的是单列模式、代理模式等,这些模式我在其他博文中也有讲解。为什么这些模式没有使用,难道是真的用不到? 我应该不是。现在重新学习设计模式:设计模式是针对软件设计问题的通用解决方案。从基本的原理、优缺点、什么场景下使用等方面考虑和思考。 设计模式是前辈们提炼和总结的一些设计思路,所以掌握它有利无弊。0x02
2017-11-01 11:50:44 1483
Stack 的建立,删除及相关操作
2010-12-24
Stack 的建立,删除及相关操作
2010-12-24
数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT数据结构PPT
2010-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人