<div dir="auto"></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <strong class="gmail_sendername" dir="auto">Dragos Tatulea</strong> <span dir="auto"><<a href="mailto:dtatulea@nvidia.com">dtatulea@nvidia.com</a>></span><br>Date: Tue, May 23, 2023, 10:36 AM<br>Subject: Re: mlx5 XDP redirect leaking memory on kernel 6.3<br>To: Tariq Toukan <<a href="mailto:tariqt@nvidia.com">tariqt@nvidia.com</a>>, <a href="mailto:ttoukan.linux@gmail.com">ttoukan.linux@gmail.com</a> <<a href="mailto:ttoukan.linux@gmail.com">ttoukan.linux@gmail.com</a>>, <a href="mailto:jbrouer@redhat.com">jbrouer@redhat.com</a> <<a href="mailto:jbrouer@redhat.com">jbrouer@redhat.com</a>>, Saeed Mahameed <<a href="mailto:saeedm@nvidia.com">saeedm@nvidia.com</a>>, <a href="mailto:saeed@kernel.org">saeed@kernel.org</a> <<a href="mailto:saeed@kernel.org">saeed@kernel.org</a>>, <a href="mailto:linyunsheng@huawei.com">linyunsheng@huawei.com</a> <<a href="mailto:linyunsheng@huawei.com">linyunsheng@huawei.com</a>>, <a href="mailto:netdev@vger.kernel.org">netdev@vger.kernel.org</a> <<a href="mailto:netdev@vger.kernel.org">netdev@vger.kernel.org</a>><br>Cc: <a href="mailto:maxtram95@gmail.com">maxtram95@gmail.com</a> <<a href="mailto:maxtram95@gmail.com">maxtram95@gmail.com</a>>, <a href="mailto:lorenzo@kernel.org">lorenzo@kernel.org</a> <<a href="mailto:lorenzo@kernel.org">lorenzo@kernel.org</a>>, <a href="mailto:alexander.duyck@gmail.com">alexander.duyck@gmail.com</a> <<a href="mailto:alexander.duyck@gmail.com">alexander.duyck@gmail.com</a>>, <a href="mailto:kheib@redhat.com">kheib@redhat.com</a> <<a href="mailto:kheib@redhat.com">kheib@redhat.com</a>>, <a href="mailto:ilias.apalodimas@linaro.org">ilias.apalodimas@linaro.org</a> <<a href="mailto:ilias.apalodimas@linaro.org">ilias.apalodimas@linaro.org</a>>, <a href="mailto:mkabat@redhat.com">mkabat@redhat.com</a> <<a href="mailto:mkabat@redhat.com">mkabat@redhat.com</a>>, <a href="mailto:brouer@redhat.com">brouer@redhat.com</a> <<a href="mailto:brouer@redhat.com">brouer@redhat.com</a>>, <a href="mailto:atzin@redhat.com">atzin@redhat.com</a> <<a href="mailto:atzin@redhat.com">atzin@redhat.com</a>>, <a href="mailto:fmaurer@redhat.com">fmaurer@redhat.com</a> <<a href="mailto:fmaurer@redhat.com">fmaurer@redhat.com</a>>, <a href="mailto:bpf@vger.kernel.org">bpf@vger.kernel.org</a> <<a href="mailto:bpf@vger.kernel.org">bpf@vger.kernel.org</a>>, <a href="mailto:jbenc@redhat.com">jbenc@redhat.com</a> <<a href="mailto:jbenc@redhat.com">jbenc@redhat.com</a>><br></div><br><br><br>
On Tue, 2023-05-23 at 17:55 +0200, Jesper Dangaard Brouer wrote:<br>
> <br>
> When the mlx5 driver runs an XDP program doing XDP_REDIRECT, then memory<br>
> is getting leaked. Other XDP actions, like XDP_DROP, XDP_PASS and XDP_TX<br>
> works correctly. I tested both redirecting back out same mlx5 device and<br>
> cpumap redirect (with XDP_PASS), which both cause leaking.<br>
> <br>
> After removing the XDP prog, which also cause the page_pool to be<br>
> released by mlx5, then the leaks are visible via the page_pool periodic<br>
> inflight reports. I have this bpftrace[1] tool that I also use to detect<br>
> the problem faster (not waiting 60 sec for a report).<br>
> <br>
>   [1] <br>
> <a href="https://github.com/xdp-project/xdp-project/blob/master/areas/mem/bpftrace/page_pool_track_shutdown01.bt" rel="noreferrer noreferrer" target="_blank">https://github.com/xdp-project/xdp-project/blob/master/areas/mem/bpftrace/page_pool_track_shutdown01.bt</a><br>
> <br>
> I've been debugging and reading through the code for a couple of days,<br>
> but I've not found the root-cause, yet. I would appreciate new ideas<br>
> where to look and fresh eyes on the issue.<br>
> <br>
><br>
> To Lin, it looks like mlx5 uses PP_FLAG_PAGE_FRAG, and my current<br>
> suspicion is that mlx5 driver doesn't fully release the bias count (hint<br>
> see MLX5E_PAGECNT_BIAS_MAX).<br>
> <br>
<br>
Thanks for the report Jesper. Incidentally I've just picked up this issue today<br>
as well.<br>
<br>
On XDP redirect and tx, the page is set to skip the bias counter release with<br>
the expectation that page_pool_put_defragged_page will be called from [1]. But,<br>
as I found out now, during XDP redirect only one fragment of the page is<br>
released in xdp core [2]. This is where the leak is coming from.<br>
<br>
We'll provide a fix soon.<br>
<br>
[1]<br>
<a href="https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c#n665" rel="noreferrer noreferrer" target="_blank">https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c#n665</a><br>
<br>
[2]<br>
<a href="https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/net/core/xdp.c#n390" rel="noreferrer noreferrer" target="_blank">https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/tree/net/core/xdp.c#n390</a><br>
<br>
Thanks,<br>
Dragos<br>
<br>
<br>
</div>