From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yuanhan Liu Subject: Re: [PATCH v3 0/4] net/virtio: fix memory leak when reinitializing device Date: Fri, 26 Jan 2018 23:34:15 +0800 Message-ID: <20180126153415.GF29540@yliu-mob> References: <20180119155556.32597-1-olivier.matz@6wind.com> <20180123155443.8883-1-olivier.matz@6wind.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: dev@dpdk.org, Maxime Coquelin , Tiwei Bie To: Olivier Matz Return-path: Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by dpdk.org (Postfix) with ESMTP id BE2971B2E1 for ; Fri, 26 Jan 2018 16:34:20 +0100 (CET) Content-Disposition: inline In-Reply-To: <20180123155443.8883-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" On Tue, Jan 23, 2018 at 04:54:39PM +0100, Olivier Matz wrote: > 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. Seires applied to dpdk-next-virtio. Thanks. --yliu > > 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