[CRIU] [PATCH] netlink: increase the receive buffer size
Laurent Dufour
ldufour at linux.vnet.ibm.com
Fri Sep 4 08:17:09 PDT 2015
On 04/09/2015 14:30, Andrey Vagin wrote:
> Currently the buffer size is 4096. It always works because
> we use hosts where PAGE_SIZE is 4096. PowerPC64 has a bigger PAGE_SIZE.
>
> Here is a comment from the kernel code.
> /*
> * skb should fit one page. This choice is good for headerless malloc.
> * But we should limit to 8K so that userspace does not have to
> * use enormous buffer sizes on recvmsg() calls just to avoid
> * MSG_TRUNC when PAGE_SIZE is very large.
> */
>
> We set the buffer size to 16384, because it's the max length of recvmsg()
> for this case. We will need less iterations to collect all data, so
> the perfomance should be better.
Sounds to be a pretty good idea ;)
Acked-by : Laurent Dufour <ldufour at linux.vnet.ibm.com>
>
> Cc: Laurent Dufour <ldufour at linux.vnet.ibm.com>
> ---
> libnetlink.c | 8 +++++++-
> 1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/libnetlink.c b/libnetlink.c
> index 84ee6eb..49c804f 100644
> --- a/libnetlink.c
> +++ b/libnetlink.c
> @@ -73,7 +73,7 @@ int do_rtnl_req(int nl, void *req, int size,
> struct msghdr msg;
> struct sockaddr_nl nladdr;
> struct iovec iov;
> - static char buf[4096];
> + static char buf[16384];
> int err;
>
> if (!error_callback)
> @@ -121,6 +121,12 @@ int do_rtnl_req(int nl, void *req, int size,
> if (err == 0)
> break;
>
> + if (msg.msg_flags & MSG_TRUNC) {
> + pr_err("Message truncated\n");
> + err = -EMSGSIZE;
> + goto err;
> + }
> +
> err = nlmsg_receive(buf, err, receive_callback, error_callback, arg);
> if (err < 0)
> goto err;
>
More information about the CRIU
mailing list