From patchwork Tue Jan 10 10:11:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arseniy Krasnov X-Patchwork-Id: 3797 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:4e01:0:0:0:0:0 with SMTP id p1csp2661137wrt; Tue, 10 Jan 2023 02:12:49 -0800 (PST) X-Google-Smtp-Source: AMrXdXtpHMdh160n+cInZMjkGWZNWF3Y2dPzkBckhiK0dLRBNnTKdo4ScAnx/VzqWWogflz2FZ5e X-Received: by 2002:a05:6a00:1c92:b0:576:f322:419f with SMTP id y18-20020a056a001c9200b00576f322419fmr66405955pfw.28.1673345569564; Tue, 10 Jan 2023 02:12:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1673345569; cv=none; d=google.com; s=arc-20160816; b=gxXA6mSkPASf0pzMsImNJXk30SROZVvaZ33U6ZufD4ywGesKd37RhX4qBmb29WDvmv B04kLQDqH0HMs1rrLTs69fMQE6e3iXWLJQ8uhMWQCTQkd7rqmV8wXCaI69X1KyYq+LNY H8nXwG1JAj9MmrwY+jYNMyqgbKkKWQBrZUbL3ClHBJirXjkRk0Uu46cpV4SXXWUpAuE/ ZRYMjaTCYwO1Ef1BsPCHNdufdV3XEibPx+wHVQQXubldlcN8IpeQLLZ1Reutr7O2QAbx cwoFJl23JypQadrjTnKcggdin8JUdfiHsXBcZPUK6YOEUz+Mbu3xt+U7cITRu+NK/RiQ uysw== 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:message-id:date :thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=rGO+eXbbMPkogfCSqha1CEJhrgwVzAJGibNwnmlMTZ0=; b=Twt5crpG92f36Tu/fAk1gVKod/4FIAIVPr8YfDj5u/8yl7PaA4SFfb1u+aQ54584di lb2GmcLUPqo7W9VCPnhFqxy1/jAIpMh69ZCKGIq/3v31D5+h1DymZFGuTwCJciInuz/i mUMsaUOZIjnwGRSOstuCxg0o2JFgOw+R3tZMkqeG9wXmtvcdfBUI9wQ1Wyn6DVHHQNob Ph6pnlEI6S5ZguoZeo1VEFMI8OxAutM+kxUyh6ZSfhAw9m6NSzh52SfW0WpF/9A5Gch9 NrER4Urn1vxUlj1KxBZJPaC5Yo1DnXKfced1HnB4MfHClzWyWZsEhsyMZi2ChK1jZlPS J3CA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sberdevices.ru header.s=mail header.b=jalOpYEW; 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 eb9-20020a056a004c8900b005890a3045casi3620020pfb.107.2023.01.10.02.12.36; Tue, 10 Jan 2023 02:12:49 -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=jalOpYEW; 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 S231612AbjAJKLa (ORCPT + 99 others); Tue, 10 Jan 2023 05:11:30 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229812AbjAJKLZ (ORCPT ); Tue, 10 Jan 2023 05:11:25 -0500 Received: from mx.sberdevices.ru (mx.sberdevices.ru [45.89.227.171]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90E55FD3; Tue, 10 Jan 2023 02:11:20 -0800 (PST) Received: from s-lin-edge02.sberdevices.ru (localhost [127.0.0.1]) by mx.sberdevices.ru (Postfix) with ESMTP id 1990D5FD07; Tue, 10 Jan 2023 13:11:18 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sberdevices.ru; s=mail; t=1673345478; bh=rGO+eXbbMPkogfCSqha1CEJhrgwVzAJGibNwnmlMTZ0=; h=From:To:Subject:Date:Message-ID:Content-Type:MIME-Version; b=jalOpYEWXLzwB6O7WkQh7LD8+XCsBO3xR/mp2aRDW9sqeQxtya/fksVXKKLmxmphY YN1z1ZL7W0JUwZzQQGoPNFp/LPEKug1HZCgbJiubTdeXDy5QGHi1ebE5bjA3U55eoO DespztdZ6Ky9SUBjP9gb6fTdlD0CxQC74ezTRn66+cKSW6ly49nUWMehCJukZkwSUj WJfZgly89c2429jRreRxaQDcFadxYUwnLCYXPQsTe1c/eB+Lkc/loC7H8b5Gjm6waW s8i+eXwFi2wInVDl7ERq9tNmrkgAbQ0hfYnVfYmW+DG67XJu9NbSZE0g+UMpmG8Q+1 sP5h0tz1uAlew== Received: from S-MS-EXCH02.sberdevices.ru (S-MS-EXCH02.sberdevices.ru [172.16.1.5]) by mx.sberdevices.ru (Postfix) with ESMTP; Tue, 10 Jan 2023 13:11:14 +0300 (MSK) From: Arseniy Krasnov To: Stefano Garzarella , "edumazet@google.com" , Jakub Kicinski , "David S. Miller" , Paolo Abeni CC: "linux-kernel@vger.kernel.org" , "virtualization@lists.linux-foundation.org" , "netdev@vger.kernel.org" , Bobby Eshleman , Krasnov Arseniy , Arseniy Krasnov , kernel Subject: [PATCH net-next v7 0/4] vsock: update tools and error handling Thread-Topic: [PATCH net-next v7 0/4] vsock: update tools and error handling Thread-Index: AQHZJNvfxqdYAcvFmUqSe8SxAChgng== Date: Tue, 10 Jan 2023 10:11:14 +0000 Message-ID: <67cd2d0a-1c58-baac-7b39-b8d4ea44f719@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: 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: 2023/01/10 08:25:00 #20754977 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?1754630004085534662?= X-GMAIL-MSGID: =?utf-8?q?1754630004085534662?= Patchset consists of two parts: 1) Kernel patch One patch from Bobby Eshleman. I took single patch from Bobby: https://lore.kernel.org/lkml/d81818b868216c774613dd03641fcfe63cc55a45 .1660362668.git.bobby.eshleman@bytedance.com/ and use only part for af_vsock.c, as VMCI and Hyper-V parts were rejected. I used it, because for SOCK_SEQPACKET big messages handling was broken - ENOMEM was returned instead of EMSGSIZE. And anyway, current logic which always replaces any error code returned by transport to ENOMEM looks strange for me also(for example in EMSGSIZE case it was changed to ENOMEM). 2) Tool patches Since there is work on several significant updates for vsock(virtio/ vsock especially): skbuff, DGRAM, zerocopy rx/tx, so I think that this patchset will be useful. This patchset updates vsock tests and tools a little bit. First of all it updates test suite: two new tests are added. One test is reworked message bound test. Now it is more complex. Instead of sending 1 byte messages with one MSG_EOR bit, it sends messages of random length(one half of messages are smaller than page size, second half are bigger) with random number of MSG_EOR bits set. Receiver also don't know total number of messages. Message bounds control is maintained by hash sum of messages length calculation. Second test is for SOCK_SEQPACKET - it tries to send message with length more than allowed. I think both tests will be useful for DGRAM support also. Third thing that this patchset adds is small utility to test vsock performance for both rx and tx. I think this util could be useful as 'iperf'/'uperf', because: 1) It is small comparing to 'iperf' or 'uperf', so it very easy to add new mode or feature to it(especially vsock specific). 2) It allows to set SO_RCVLOWAT and SO_VM_SOCKETS_BUFFER_SIZE option. Whole throughtput depends on both parameters. 3) It is located in the kernel source tree, so it could be updated by the same patchset which changes related kernel functionality in vsock. I used this util very often to check performance of my rx zerocopy support(this tool has rx zerocopy support, but not in this patchset). Here is comparison of outputs from three utils: 'iperf', 'uperf' and 'vsock_perf'. In all three cases sender was at guest side. rx and tx buffers were always 64Kb(because by default 'uperf' uses 8K). iperf: [ ID] Interval Transfer Bitrate [ 5] 0.00-10.00 sec 12.8 GBytes 11.0 Gbits/sec sender [ 5] 0.00-10.00 sec 12.8 GBytes 11.0 Gbits/sec receiver uperf: Total 16.27GB / 11.36(s) = 12.30Gb/s 23455op/s vsock_perf: tx performance: 12.301529 Gbits/s rx performance: 12.288011 Gbits/s Results are almost same in all three cases. Patchset was rebased and tested on skbuff v9 patch from Bobby Eshleman: https://lore.kernel.org/netdev/20230107002937.899605-1-bobby.eshleman@bytedance.com/ Changelog: v6 -> v7: - vsock_perf: - Remove 'inline' from function decl - Replace pairs of 'perror() + exit()' to single 'error()' - R-b removed due to fixes above v5 -> v6: - RFC -> net-next tag - vsock_perf: - forget to update README: Gb/s -> GBits/s v4 -> v5: - Kernel patch: update commit message - vsock_perf: - Fix typo in commit message - Use "fprintf(stderr," instead of "printf(" for errors - More stats for tx: total bytes sent and time in tx loop - Print throughput in 'gigabits' instead of 'gigabytes'(as in 'iperf' and 'uperf') - Output comparisons between 'iperf', 'uperf' and 'vsock_perf' added to CV. v3 -> v4: - Kernel patch: update commit message by adding error case description - Message bounds test: - Typo fix: s/contols/controls - Fix error output on 'setsockopt()'s - vsock_perf: - Add 'vsock_perf' target to 'all' in Makefile - Fix error output on 'setsockopt()'s - Swap sender/receiver roles: now sender does 'connect()' and sends data, while receiver accepts connection. - Update arguments names: s/mb/bytes, s/so_rcvlowat/rcvlowat - Update usage output and description in README v2 -> v3: - Patches for VMCI and Hyper-V were removed from patchset(commented by Vishnu Dasa and Dexuan Cui) - In message bounds test hash is computed from data buffer with random content(in v2 it was size only). This approach controls both data integrity and message bounds. - vsock_perf: - grammar fixes - only long parameters supported(instead of only short) v1 -> v2: - Three new patches from Bobby Eshleman to kernel part - Message bounds test: some refactoring and add comment to describe hashing purpose - Big message test: check 'errno' for EMSGSIZE and move new test to the end of tests array - vsock_perf: - update README file - add simple usage example to commit message - update '-h' (help) output - use 'stdout' for output instead of 'stderr' - use 'strtol' instead of 'atoi' Bobby Eshleman(1): vsock: return errors other than -ENOMEM to socket Arseniy Krasnov(3): test/vsock: rework message bound test test/vsock: add big message test test/vsock: vsock_perf utility net/vmw_vsock/af_vsock.c | 3 +- tools/testing/vsock/Makefile | 3 +- tools/testing/vsock/README | 34 ++++ tools/testing/vsock/control.c | 28 +++ tools/testing/vsock/control.h | 2 + tools/testing/vsock/util.c | 13 ++ tools/testing/vsock/util.h | 1 + tools/testing/vsock/vsock_perf.c | 427 +++++++++++++++++++++++++++++++++++++++ tools/testing/vsock/vsock_test.c | 197 ++++++++++++++++-- 9 files changed, 691 insertions(+), 17 deletions(-) --- 2.25.1