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 <eduma...@google.com> > Cc: Hangbin Liu <liuhang...@gmail.com> > Cc: Phil Sutter <p...@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.