[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