DPDK缓存同步问题

时间:2019-06-28 04:33:28

标签: caching synchronization dpdk

大家好,                  我知道这是一些缓存/同步问题,但是由于某些原因,尽管使用了屏障宏,但它似乎并没有消失。 但是使它消失的是给rte_delay设置为100us,然后再次重新读取该值,如下所示:

    cons_rx_buf = &rxr->rx_buf_ring[cons];
    mbuf = cons_rx_buf->mbuf;
    rte_smp_mb();
    if (mbuf == NULL) {
            int cnt = 0;
            RTE_LOG(ERR, PMD, "mbuf = NULL cons = %d\n", cons);
            do {
                    rte_delay_us(100);
                    cons_rx_buf = &rxr->rx_buf_ring[cons];
                    mbuf = cons_rx_buf->mbuf;
            } while(mbuf == NULL && ++cnt <= 10);
            RTE_LOG(ERR, PMD, "mbuf = %p cnt = %d\n", mbuf, cnt);
    }

我总是看到'mbuf = NULL'的打印内容,然后发布while循环的1次迭代,'mbuf'不是NULL(期望值正确),并且运行平稳。 显然,这似乎是一些缓存同步问题,我认为smp_wb()原语应该已经解决了吗? 除了此rte_delay_us()之外,还有其他更好的方法来解决此问题吗?

0 个答案:

没有答案