欢迎来到 DPDK交流社区 ,有什么问题可以尽管在这里提问,您将会收到社区其他成员的回答;也可以将您的总结写在这里,为社区其他成员提供帮助。 (QQ交流群:127163755)

关于prefetch用法的疑问 [已关闭]

0 投票

函数static void rte_prefetch0(const volatile void *p)作用是Prefetch a cache line into all cache levels.

在example中有很多出地方用到,举个例子,在l3fwd-power的937行开始:

for (j = 0; j < PREFETCH_OFFSET && j < nb_rx; j++) {
                rte_prefetch0(rte_pktmbuf_mtod(
                        pkts_burst[j], void *));
            }

            /* Prefetch and forward already prefetched packets */
            for (j = 0; j < (nb_rx - PREFETCH_OFFSET); j++) {
                rte_prefetch0(rte_pktmbuf_mtod(pkts_burst[
                        j + PREFETCH_OFFSET], void *));
                l3fwd_simple_forward(pkts_burst[j], portid,
                                qconf);
            }

            /* Forward remaining prefetched packets */
            for (; j < nb_rx; j++) {
                l3fwd_simple_forward(pkts_burst[j], portid,
                                qconf);
            }

 

这里预取之后执行l3fwd_simple_forward,里面主要做的是解析数据包格式之类的,需要读取保存数据包的buf_addr,但前面预取只是一个cacheline(64字节),对应mbuf结构的前半部分,数据包的buf_addr根本没有预取啊,那这个prefetch还有什么效果?

 

问题关闭原因: 眼花了
最新提问 11月 30, 2016 分类:默认分类 | 用户: innoink (420 分)
已关闭 11月 30, 2016 用户:innoink
...