From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olivier Matz Subject: [PATCH v3 0/4] net/virtio: fix memory leak when reinitializing device Date: Tue, 23 Jan 2018 16:54:39 +0100 Message-ID: <20180123155443.8883-1-olivier.matz@6wind.com> References: <20180119155556.32597-1-olivier.matz@6wind.com> To: dev@dpdk.org, Yuanhan Liu , Maxime Coquelin , Tiwei Bie Return-path: Received: from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com [62.23.145.76]) by dpdk.org (Postfix) with ESMTP id F3F38199AC for ; Tue, 23 Jan 2018 16:55:05 +0100 (CET) In-Reply-To: <20180119155556.32597-1-olivier.matz@6wind.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When devops->configure() is called, the queues may be reallocated if the features flag changed, but the previous are not freed. This patchset fixes this issue. To really point out the issue, I instrumented rte_malloc, rte_memzone_reserve, rte_mbuf_alloc to track the allocations and frees. For reference, the patch is available here: https://www.droids-corp.org/~zer0/hidden/0001-debug-malloc.patch Iit conflicts a bit with the patchset, but it is quite easy to solve. To reproduce the issue: cd dpdk make config T=x86_64-native-linuxapp-gcc sed -i 's,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=n,CONFIG_RTE_LIBRTE_VIRTIO_DEBUG_INIT=y,' build/.config make -j4 mkdir -p /mnt/huge mount -t hugetlbfs nodev /mnt/huge echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages modprobe uio_pci_generic python usertools/dpdk-devbind.py -b uio_pci_generic 0000:00:02.0 ./build/app/testpmd -l 0,1 --log-level 8 -- --total-num-mbufs=16384 \ -i --port-topology=chained --disable-hw-vlan-filter \ --disable-hw-vlan-strip --enable-rx-cksum --enable-lro \ --txqflags=0 --no-lsc-interrupt # testpmd commands port stop 0 port config all rx-cksum off port start 0 quit Without the patchset, the debug patch displays a leak of mbufs allocated from virtio_dev_rx_queue_setup_finish() and a leak of rte_mallocs allocated from virtio_init_queue(). After the patchset, only one malloc is remaining after the device close, but this is normal, because this area is freed in dev_uninit(). v2 -> v3: - fix queue flushing with vector Rx enabled (Tiwei). The patch is slightly changed compared to what was proposed by mail, due to a checkpatch warning. v1 -> v2: - move the vq != NULL check from the refactor patch to the memory leak fix patch (Yuanhan) - new patch to fix queue flushing with vector Rx enabled (Tiwei) - move the backportable fixes at the beginning of the patchset (Yuanhan) - remove Cc stable on the typo fix (Yuanhan) note: I finally kept it in the patchset Olivier Matz (4): net/virtio: fix queue flushing with vector Rx enabled net/virtio: fix memory leak when reinitializing device net/virtio: rationalize queue flushing net/virtio: fix typo in function name drivers/net/virtio/virtio_ethdev.c | 71 +++++++++++++++++--------------------- drivers/net/virtio/virtqueue.c | 30 +++++++++++++--- drivers/net/virtio/virtqueue.h | 13 ++++++- 3 files changed, 69 insertions(+), 45 deletions(-) -- 2.11.0