Hi David, On Tue, Feb 12, 2019 at 06:08:13PM -0800, Eric Dumazet wrote: > >> 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.
It should not affects ip cmd too much. But for ss, as Eric pointed, it cause performance issue. > > > > It does not negates the point at all. > > The main point was to eventually be able to allocate more than 32KB. > > We need to have a minimum size of 32KB so that the kernel can cook reasonably > sized skbs > > Because trying to allocate 4KB only in 2019 is kind of stupid... > > ( Especially considering ss currently buffers the whole thing before calling > render() !!! ) This makes sense to me. > > 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. Apart from the 200 VFs example, I think there will be more and more virtual interfaces be used in cloud environment, like openstack/OVS, so useing 32K or 64K is still not safe. What do you think. Thanks Hangbin