DPDK中的memcpy性能优化及思考

本文探讨了简单memcpy实现的性能,并指出不存在适用于所有场景的最优memcpy。DPDK中的rte_memcpy优化旨在适应特定应用,通过内存带宽最大化、地址对齐等方式提升性能。文章列举了优化memcpy的常见方法,强调了针对具体应用和硬件平台的性能评估的重要性,以OvS-DPDK为例展示了优化的实际效果。
摘要由CSDN通过智能技术生成

0?wx_fmt=gif

0?wx_fmt=gif

内存拷贝(memcpy)这个操作看似简单,但长期以来存在很多关于其优化的讨论,各种编程语言库也都有对应实现,而对于memcpy性能评估测试的讨论就更多了。

       那么如下的memcpy实现到底有什么问题?

void * simple_memcpy(void *dst, const void *src, size_t n)

{

        const uint8_t *_src = src;

        uint8_t *_dst = dst;

        size_t i;

 

        for (i = 0; i < n; ++i)

                _dst[i] = _src[i];

 

        return dst;

}

        很简单,首先,这看起来太简单,不够高端,气势上就先输了;同时,代码没有使用Vector指令,没有指令级并行,没有做地址对齐处理,最终性能完全依赖于编译器的优化——然而这些并没有什么问题,在某些应用场景中这个函数的性能甚至会比glibc的memcpy性能更高——当然,这的确完全得益于编译器的优化。

        本文的观点是:不存在一个“最优”的适用于任何场景(硬件+软件+数据)的memcpy实现。这也是DPDK中rte_memcpy存在的原因:不是glibc中的memcpy不够优秀,而是它和DPDK中的核心应用场景之间不合适,有没有觉得这种说法很耳熟?本文将着重探讨如何针对具体应用进行memcpy(或其他任何程序)的性能优化。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值