From patchwork Sat Dec 17 19:45:55 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 34266 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp1650042wrn; Sat, 17 Dec 2022 11:46:41 -0800 (PST) X-Google-Smtp-Source: AA0mqf4IoEja2w46LXUfcePsZOPix7kMBhdK8stv84HVjuNQVD28ft+pAQ1so3LF91B0qsrS4F6Z X-Received: by 2002:a05:6a20:d90a:b0:a3:587b:56ac with SMTP id jd10-20020a056a20d90a00b000a3587b56acmr45416547pzb.52.1671306401015; Sat, 17 Dec 2022 11:46:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671306400; cv=none; d=google.com; s=arc-20160816; b=FD5Vnmf8ajrlviOcuKqST8SyQPuAup+n50hJMeG5t8BxM0+o36p7dLE3jvZV819brd E+vu7naDDwRwb/1apcVd0Lw19P9FdRwg3bFLRO5XmQ7xxzwd8DCCUWgVmzbOTK1Y37bg u1olTQ7rwjK/A4bNyCh51kiU0rHDqUaX713B+VW5LzPWI6c+KT+EBYV9CXi5Nvm4ggOI XYyU+Y0EWP7iuKDdcGdtP+nz5ccbK8F8IPL7rfINZf86oHW5qeAteLR5fxYFzW96HlQZ Y+EwUWGpKGf1G9RUMctuh2Jum5V09KYr74334f2NV688BEWZDR88iTUzi8SyF8U7mCEp AOAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:content-language:accept-language:in-reply-to:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=fRQaScZUwNSlmdqZ+Io2YTz+G50P34agK3PANG8xcpg=; b=b7CI/sjs0wlDrfMN7RtdRRcyWJuz9NilRSBYyBFnYiwRTZrP5uHNmIbpTqy2SBdzKg LuWHdq1KVEbXfHAJIBNF2ybAqba4s/vpf6ig+thZ81AqpIIuGLaAsFRA0HreuOmmhEzh ROpZWj4gN3ivoW9yB9QfTyDreZj1PBolNO5fn8RrztoinHM9hyrd87vdbtSZ1WY5jiGe aP5YkxLDMKu4iEKAKEU2hYR1qH34K9K+l2+ZA5bNmyLOTAziGLQjxVmX5R6BghJdT6SH lB+2PqUg85/4koYsSkfLMxfNjeXt4ebc4SiWPXnqpa5gFY7w0mVOq2g5h42PAD4FaeW0 1IEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=SYrU7wwJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n12-20020a65488c000000b00478e2f7cf23si6258748pgs.101.2022.12.17.11.46.27; Sat, 17 Dec 2022 11:46:40 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=SYrU7wwJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=sberdevices.ru Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229667AbiLQTqC (ORCPT + 99 others); Sat, 17 Dec 2022 14:46:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60292 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229469AbiLQTp7 (ORCPT ); Sat, 17 Dec 2022 14:45:59 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ADE916478; Sat, 17 Dec 2022 11:45:57 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 0A95B5FD03; Sat, 17 Dec 2022 22:45:56 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1671306356; bh=fRQaScZUwNSlmdqZ+Io2YTz+G50P34agK3PANG8xcpg=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=SYrU7wwJjd48bsmEyayCo3z+n3YukZqN12mu5SGqHo5v6byneL+q+3U7GIzPE7BMP hmLUetTPQpw+Xq4pT08RTy7t/sxOwMLs4tCjrK1TSwypxP6GoRAqcxmR6LglHr+wD7 CMpEOtvMSWP4l2zk7yrry12hitXe50XR/Uwwk7a+r/IhTV/qCpMQ3c4gnKKP+txJfh MyAx8n9c8v4GaquwxhFAqnxjuYDiePj0cSKs54jCxtM5uBo8p6MrT8g/0KbsUCkv9v qJnONB7m5fISmnFOsCWgv8/itgjGEX9GLyFY/IGrGmp3yMeEMY4wgcreYpN8cSd6t/ a91p7St8NxhrA== Received: from S-MS-EXCH01.sberdevices.ru (S-MS-EXCH01.sberdevices.ru [172.16.1.4]) by mx.sberdevices.ru (Postfix) with ESMTP; Sat, 17 Dec 2022 22:45:55 +0300 (MSK) From: Arseniy Krasnov To: Stefano Garzarella , Stefan Hajnoczi , "edumazet@google.com" , "David S. Miller" , Jakub Kicinski , Paolo Abeni CC: "linux-kernel@vger.kernel.org" , "netdev@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , "kvm@vger.kernel.org" , kernel , Krasnov Arseniy , Arseniy Krasnov Subject: [RFC PATCH v1 1/2] virtio/vsock: send credit update depending on SO_RCVLOWAT Thread-Topic: [RFC PATCH v1 1/2] virtio/vsock: send credit update depending on SO_RCVLOWAT Thread-Index: AQHZElAtpIjfFhXnAkiL/v8iyYioYA== Date: Sat, 17 Dec 2022 19:45:55 +0000 Message-ID: In-Reply-To: <39b2e9fd-601b-189d-39a9-914e5574524c@sberdevices.ru> Accept-Language: en-US, ru-RU Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [172.16.1.12] Content-ID: <34A3F028C08A3C47A856A1176E2EEEFC@sberdevices.ru> MIME-Version: 1.0 X-KSMG-Rule-ID: 4 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiPhishing: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 1.1.2.30, bases: 2022/12/17 15:49:00 #20678428 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752491780655134774?= X-GMAIL-MSGID: =?utf-8?q?1752491780655134774?= This adds extra condition to send credit update message during data read to userspace. Problem arises, when sender waits for the free space on the receiver while receiver waits in 'poll()' until 'rx_bytes' reaches SO_RCVLOWAT value of the socket. With this patch, receiver sends credit update message when number of bytes in it's rx queue is too small to avoid sleeping in 'poll()'. Signed-off-by: Arseniy Krasnov --- net/vmw_vsock/virtio_transport_common.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) -- 2.25.1 diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index a1581c77cf84..4cf26cf8a754 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -362,6 +362,7 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, struct virtio_vsock_sock *vvs = vsk->trans; size_t bytes, total = 0; struct sk_buff *skb; + bool low_rx_bytes; int err = -EFAULT; u32 free_space; @@ -396,6 +397,8 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, } free_space = vvs->buf_alloc - (vvs->fwd_cnt - vvs->last_fwd_cnt); + low_rx_bytes = (vvs->rx_bytes < + sock_rcvlowat(sk_vsock(vsk), 0, INT_MAX)); spin_unlock_bh(&vvs->rx_lock); @@ -405,9 +408,11 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, * too high causes extra messages. Too low causes transmitter * stalls. As stalls are in theory more expensive than extra * messages, we set the limit to a high value. TODO: experiment - * with different values. + * with different values. Also send credit update message when + * number of bytes in rx queue is not enough to wake up reader. */ - if (free_space < VIRTIO_VSOCK_MAX_PKT_BUF_SIZE) + if (free_space < VIRTIO_VSOCK_MAX_PKT_BUF_SIZE || + low_rx_bytes) virtio_transport_send_credit_update(vsk); return total;