All of lore.kernel.org
 help / color / mirror / Atom feed
* [Bug 213] Fix the problem of KNI device (Net Stack kthread) keeps dropping packets (stats.tx_dropped++) and TX thread logs "KNI: Out of memory"
@ 2019-02-25  3:02 bugzilla
  0 siblings, 0 replies; only message in thread
From: bugzilla @ 2019-02-25  3:02 UTC (permalink / raw)
  To: dev

https://bugs.dpdk.org/show_bug.cgi?id=213

            Bug ID: 213
           Summary: Fix the problem of KNI device (Net Stack kthread)
                    keeps dropping packets (stats.tx_dropped++) and TX
                    thread logs "KNI: Out of memory"
           Product: DPDK
           Version: unspecified
          Hardware: All
                OS: All
            Status: CONFIRMED
          Severity: normal
          Priority: Normal
         Component: core
          Assignee: dev@dpdk.org
          Reporter: willkozheng@tencent.com
  Target Milestone: ---

When the number of concurrent packets is greater than the size of
rte_kni::pktmbuf_pool, it may fall into a situation that both fifo->alloc_q and
fifo->tx_q are empty, in which there is no condition to trigger kni_fifo_put
for fifo->alloc_q, resulting in no available mbuf for KNI device and dropping
packets, which is unrecoverable.
---------------------------------------------------------------
中文版:
修复KNI虚拟网卡(Net Stack kthread)一直发包丢失(stats.tx_dropped++)且TX Thread输出Log "KNI: Out
of memory"的问题
当KNI并发包量大于rte_kni::pktmbuf_pool的大小时,可能出现fifo->alloc_q和fifo->tx_q同时为空,这时由于没有条件触发fifo->alloc_q的kni_fifo_put方法,导致虚拟网卡没有可用的mbuf,从而出现一直丢包,并且该状态不可恢复.

lib/librte_kni/rte_kni_fifo.h 增加函数
static inline bool
kni_fifo_empty(struct rte_kni_fifo *fifo)
{
        return fifo->write == fifo->read;
}

lib/librte_kni/rte_kni.c 修改函数
unsigned
rte_kni_rx_burst(struct rte_kni *kni, struct rte_mbuf **mbufs, unsigned num)
{
        unsigned ret = kni_fifo_get(kni->tx_q, (void **)mbufs, num);

        /* If buffers removed, allocate mbufs and then put them into alloc_q */
        if (ret)
                kni_allocate_mbufs(kni);
        else if (unlikely(kni_fifo_empty(kni->alloc_q))) { //add by Willko, on
alloc_q is empty, try allocate mbuf
                kni_allocate_mbufs(kni);
        }

        return ret;
}

-- 
You are receiving this mail because:
You are the assignee for the bug.

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-25  3:02 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-25  3:02 [Bug 213] Fix the problem of KNI device (Net Stack kthread) keeps dropping packets (stats.tx_dropped++) and TX thread logs "KNI: Out of memory" bugzilla

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.