From: Stephen Hemminger <stephen@networkplumber.org>
To: Gal Pressman <gal@nvidia.com>
Cc: David Ahern <dsahern@gmail.com>,
Eric Dumazet <edumazet@google.com>,
netdev <netdev@vger.kernel.org>,
Eric Dumazet <eric.dumazet@gmail.com>,
Hangbin Liu <liuhangbin@gmail.com>, Phil Sutter <phil@nwl.cc>,
Jakub Kicinski <kuba@kernel.org>,
Michal Kubecek <mkubecek@suse.cz>
Subject: Re: [PATCH iproute2] lib/libnetlink: ensure a minimum of 32KB for the buffer used in rtnl_recvmsg()
Date: Wed, 31 May 2023 14:51:48 -0700 [thread overview]
Message-ID: <20230531145148.2cb3cbe8@hermes.local> (raw)
In-Reply-To: <7517ba8c-2f51-6ced-ba84-e349f5db8cac@nvidia.com>
On Mon, 29 May 2023 15:29:51 +0300
Gal Pressman <gal@nvidia.com> wrote:
> On 13/02/2019 4:04, David Ahern wrote:
> > On 2/12/19 6:58 PM, Eric Dumazet wrote:
> >> In the past, we tried to increase the buffer size up to 32 KB in order
> >> to reduce number of syscalls per dump.
> >>
> >> Commit 2d34851cd341 ("lib/libnetlink: re malloc buff if size is not enough")
> >> brought the size back to 4KB because the kernel can not know the application
> >> is ready to receive bigger requests.
> >>
> >> See kernel commits 9063e21fb026 ("netlink: autosize skb lengthes") and
> >> d35c99ff77ec ("netlink: do not enter direct reclaim from netlink_dump()")
> >> for more details.
> >>
> >> Fixes: 2d34851cd341 ("lib/libnetlink: re malloc buff if size is not enough")
> >> Signed-off-by: Eric Dumazet <edumazet@google.com>
> >> Cc: Hangbin Liu <liuhangbin@gmail.com>
> >> Cc: Phil Sutter <phil@nwl.cc>
> >> ---
> >> lib/libnetlink.c | 2 ++
> >> 1 file changed, 2 insertions(+)
> >>
> >> diff --git a/lib/libnetlink.c b/lib/libnetlink.c
> >> index 1892a02ab5d0d73776c9882ffc77edcd2c663d01..0d48a3d43cf03065dacbd419578ab10af56431a4 100644
> >> --- a/lib/libnetlink.c
> >> +++ b/lib/libnetlink.c
> >> @@ -718,6 +718,8 @@ static int rtnl_recvmsg(int fd, struct msghdr *msg, char **answer)
> >> if (len < 0)
> >> return len;
> >>
> >> + if (len < 32768)
> >> + len = 32768;
> >> buf = malloc(len);
> >> if (!buf) {
> >> fprintf(stderr, "malloc error: not enough buffer\n");
> >>
> >
> > I believe that negates the whole point of 2d34851cd341 - which I have no
> > problem with. 2 recvmsg calls per message is overkill.
> >
> > Do we know of any single message sizes > 32k? 2d34851cd341 cites
> > increasing VF's but at some point there is a limit. If not, the whole
> > PEEK thing should go away and we just malloc 32k (or 64k) buffers for
> > each recvmsg.
> >
>
> Hey,
>
> Sorry for reviving this old thread, but I see this topic was already
> discussed here :).
> I have a system where the large number of VFs result in a message
> greater than 32k, which makes a simple 'ip link' command return an error.
>
> Should we change the kernel's 'max_recvmsg_len' to 64k? Any other (more
> robust) ideas to resolve this issue?
No matter what the size, someone will always have too many VF's to fit
in the response. There is no way to get a stable solution without doing
some API changes.
It is possible to dump millions of routes, so it is not directly a netlink
issue more that the current API is slamming all the VF's as info blocks
under a single message response.
That would mean replacing IFLA_VFINFO_LIST with a separate query
next prev parent reply other threads:[~2023-05-31 21:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-13 1:58 [PATCH iproute2] lib/libnetlink: ensure a minimum of 32KB for the buffer used in rtnl_recvmsg() Eric Dumazet
2019-02-13 2:04 ` David Ahern
2019-02-13 2:08 ` Eric Dumazet
2019-02-13 6:20 ` Hangbin Liu
2019-02-14 13:51 ` Michal Kubecek
2019-02-14 13:49 ` Michal Kubecek
2019-02-14 17:34 ` David Ahern
2019-02-14 17:47 ` Phil Sutter
2023-05-29 12:29 ` Gal Pressman
2023-05-31 21:51 ` Stephen Hemminger [this message]
2023-06-04 13:33 ` Gal Pressman
2023-06-04 16:03 ` David Ahern
2023-06-05 7:24 ` Gal Pressman
2019-02-13 17:46 ` Phil Sutter
2019-02-13 17:58 ` Eric Dumazet
2019-02-13 21:57 ` Stephen Hemminger
2019-02-13 21:59 ` Eric Dumazet
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230531145148.2cb3cbe8@hermes.local \
--to=stephen@networkplumber.org \
--cc=dsahern@gmail.com \
--cc=edumazet@google.com \
--cc=eric.dumazet@gmail.com \
--cc=gal@nvidia.com \
--cc=kuba@kernel.org \
--cc=liuhangbin@gmail.com \
--cc=mkubecek@suse.cz \
--cc=netdev@vger.kernel.org \
--cc=phil@nwl.cc \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.