From patchwork Mon Dec 11 21:16:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 176919 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp7347163vqy; Mon, 11 Dec 2023 13:26:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IFTRVznXr/JgXAiCu29lH5JUs2vKWiR+/SJ6eZiupNd4IdbZLWh8nUhSUOIOAsJbACy7efj X-Received: by 2002:a05:6a20:3d08:b0:18f:97c:9766 with SMTP id y8-20020a056a203d0800b0018f097c9766mr7160880pzi.78.1702329970662; Mon, 11 Dec 2023 13:26:10 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702329970; cv=none; d=google.com; s=arc-20160816; b=cFJrd3MQoe8xhpjdl0Hf8PBRmq2Xzj9ICsdlM760SR8FyNnru47jbnOhnJ2QJX+lF8 GfrWmi+8yuK2rbJHKvjdiv9m/KKzUWbRGfY3z349vkyAc+wO7YJ5X+CA6g5r3bBUWaSN OS6pVDmjW4uRhm3WNhv0ECpcxUw3wwc2W1fCfUzv2T9ek+O+Aa8elAq751YZtlxMC0jD lQeKTKtKXiWsRDZhmyEua9vLHeul7AX5haS4zc73c64HA+IN2Hhxf8wau0YMMA8DMVip bfyiqkmdmvRv7xrOWIe/fPlHNmTTTv/5sTJm+LGrIkPrTuDbKC7cpLhDGASFJbip1Qb9 UUvw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=VolWnmXHF5RMJtGOpmTWJryWny5MPaaiaWlkMXsgHkI=; fh=wIHqZpOIuzcidDZ82yQbOZuyHJty7uvaWDEh/efoVzA=; b=zzf69howp/FlLk5iO1KNAWyp42MvGse+IF01TUmodL8L1hvmqz8zmn/klPY72BAUfs QYlyTu3NV3uPsXsTA+4JagM2k9fUWDZCAA+3mfKrN2wvtxytPNYDFbfeMoyBEoUvZRCS 55Z/bOhQYvDccfQ8/Xuda5zaRLxR1pO9lqr8HiMxNK9pXb7lDbq9UfUASUQ3Yn6APMcB WYj/dGyHJtg0CrCP2gJtYCNxwAVcm/zv4X4Mv6xPMIrVo5Fw0fuIi6qe27fC3blUpJy7 cuEkrvheUsgLBV900sAQSkPbD0lE+Msa6BbnsvQQW6IyyIeTaRm9h7WULMezA5E9zvgC fSNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b=aGt+FjLl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=salutedevices.com Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id o62-20020a634141000000b005c18d508531si6550769pga.212.2023.12.11.13.26.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 13:26:10 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@salutedevices.com header.s=mail header.b=aGt+FjLl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=salutedevices.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id A79E28078D6F; Mon, 11 Dec 2023 13:26:03 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344966AbjLKVZc (ORCPT + 99 others); Mon, 11 Dec 2023 16:25:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60932 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229663AbjLKVZ2 (ORCPT ); Mon, 11 Dec 2023 16:25:28 -0500 Received: from mx1.sberdevices.ru (mx1.sberdevices.ru [37.18.73.165]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6226ED9; Mon, 11 Dec 2023 13:25:32 -0800 (PST) Received: from p-infra-ksmg-sc-msk01 (localhost [127.0.0.1]) by mx1.sberdevices.ru (Postfix) with ESMTP id E93D1100014; Tue, 12 Dec 2023 00:25:30 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.sberdevices.ru E93D1100014 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=salutedevices.com; s=mail; t=1702329930; bh=VolWnmXHF5RMJtGOpmTWJryWny5MPaaiaWlkMXsgHkI=; h=From:To:Subject:Date:Message-ID:MIME-Version:Content-Type:From; b=aGt+FjLlsQz3NqcLvSzEpxWP9u9CwDmD/3/QQjau+VPYEMTDt9T2BPNqNtAOR+wzG 9QPecN4u1u735DWCedNCG/GLRlGgJacUcQPssGfuoy0U6KlsUA/JHILgDHw2rXB8BO AI232OoUpKQt1BS8on272sHT95XdV7EqCUYjny2eESaOCAIEbfa1ZiA0Vx/Kl0+BTU rbqgnCqrXUVV5KmzBJP7jfUJkn/1q4NJACYfVBnUH0VfU8e0/BkVINro06AvPcRPXS esr+QlPMbAvMZhy7zPd6D5KSNV+iXR+JdwaHyIdjNK8aqdKoh9YMaJQBxSxQJ2kHr8 9qH8PoUMBO2dg== Received: from smtp.sberdevices.ru (p-i-exch-sc-m01.sberdevices.ru [172.16.192.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sberdevices.ru (Postfix) with ESMTPS; Tue, 12 Dec 2023 00:25:30 +0300 (MSK) Received: from localhost.localdomain (100.64.160.123) by p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Tue, 12 Dec 2023 00:25:30 +0300 From: Arseniy Krasnov To: Stefan Hajnoczi , Stefano Garzarella , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , "Michael S. Tsirkin" , Jason Wang , Bobby Eshleman CC: , , , , , , Subject: [PATCH net-next v8 3/4] virtio/vsock: fix logic which reduces credit update messages Date: Tue, 12 Dec 2023 00:16:57 +0300 Message-ID: <20231211211658.2904268-4-avkrasnov@salutedevices.com> X-Mailer: git-send-email 2.35.0 In-Reply-To: <20231211211658.2904268-1-avkrasnov@salutedevices.com> References: <20231211211658.2904268-1-avkrasnov@salutedevices.com> MIME-Version: 1.0 X-Originating-IP: [100.64.160.123] X-ClientProxiedBy: p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) To p-i-exch-sc-m01.sberdevices.ru (172.16.192.107) X-KSMG-Rule-ID: 10 X-KSMG-Message-Action: clean X-KSMG-AntiSpam-Lua-Profiles: 182030 [Dec 11 2023] X-KSMG-AntiSpam-Version: 6.0.0.2 X-KSMG-AntiSpam-Envelope-From: avkrasnov@salutedevices.com X-KSMG-AntiSpam-Rate: 0 X-KSMG-AntiSpam-Status: not_detected X-KSMG-AntiSpam-Method: none X-KSMG-AntiSpam-Auth: dkim=none X-KSMG-AntiSpam-Info: LuaCore: 7 0.3.7 6d6bf5bd8eea7373134f756a2fd73e9456bb7d1a, {Tracking_from_domain_doesnt_match_to}, smtp.sberdevices.ru:5.0.1,7.1.1;salutedevices.com:7.1.1;100.64.160.123:7.1.2;d41d8cd98f00b204e9800998ecf8427e.com:7.1.1;127.0.0.199:7.1.2, FromAlignment: s, ApMailHostAddress: 100.64.160.123 X-MS-Exchange-Organization-SCL: -1 X-KSMG-AntiSpam-Interceptor-Info: scan successful X-KSMG-AntiPhishing: Clean X-KSMG-LinksScanning: Clean X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.0.1.6960, bases: 2023/12/11 18:02:00 #22660190 X-KSMG-AntiVirus-Status: Clean, skipped X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 11 Dec 2023 13:26:04 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785022351106486140 X-GMAIL-MSGID: 1785022351106486140 Add one more condition for sending credit update during dequeue from stream socket: when number of bytes in the rx queue is smaller than SO_RCVLOWAT value of the socket. This is actual for non-default value of SO_RCVLOWAT (e.g. not 1) - idea is to "kick" peer to continue data transmission, because we need at least SO_RCVLOWAT bytes in our rx queue to wake up user for reading data (in corner case it is also possible to stuck both tx and rx sides, this is why 'Fixes' is used). Fixes: b89d882dc9fc ("vsock/virtio: reduce credit update messages") Signed-off-by: Arseniy Krasnov Reviewed-by: Stefano Garzarella --- Changelog: v6 -> v7: * Handle wrap of 'fwd_cnt'. * Do to send credit update when 'fwd_cnt' == 'last_fwd_cnt'. v7 -> v8: * Remove unneeded/wrong handling of wrap for 'fwd_cnt'. net/vmw_vsock/virtio_transport_common.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c index e137d740804e..8572f94bba88 100644 --- a/net/vmw_vsock/virtio_transport_common.c +++ b/net/vmw_vsock/virtio_transport_common.c @@ -558,6 +558,8 @@ 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; + u32 fwd_cnt_delta; + bool low_rx_bytes; int err = -EFAULT; u32 free_space; @@ -601,7 +603,10 @@ virtio_transport_stream_do_dequeue(struct vsock_sock *vsk, } } - free_space = vvs->buf_alloc - (vvs->fwd_cnt - vvs->last_fwd_cnt); + fwd_cnt_delta = vvs->fwd_cnt - vvs->last_fwd_cnt; + free_space = vvs->buf_alloc - fwd_cnt_delta; + low_rx_bytes = (vvs->rx_bytes < + sock_rcvlowat(sk_vsock(vsk), 0, INT_MAX)); spin_unlock_bh(&vvs->rx_lock); @@ -611,9 +616,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 (fwd_cnt_delta && + (free_space < VIRTIO_VSOCK_MAX_PKT_BUF_SIZE || low_rx_bytes)) virtio_transport_send_credit_update(vsk); return total;