linux/tools/testing/vsock
Filippo Storniolo 84d5fb9741 test/vsock: refactor vsock_accept
This is a preliminary patch to introduce SOCK_STREAM bind connect test.
vsock_accept() is split into vsock_listen() and vsock_accept().

Co-developed-by: Luigi Leonardi <luigi.leonardi@outlook.com>
Signed-off-by: Luigi Leonardi <luigi.leonardi@outlook.com>
Signed-off-by: Filippo Storniolo <f.storniolo95@gmail.com>
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-11-07 22:27:07 +00:00
..
.gitignore test/vsock: io_uring rx/tx tests 2023-10-15 13:19:43 +01:00
control.c test/vsock: rework message bounds test 2023-01-12 12:53:54 +01:00
control.h test/vsock: rework message bounds test 2023-01-12 12:53:54 +01:00
Makefile test/vsock: io_uring rx/tx tests 2023-10-15 13:19:43 +01:00
msg_zerocopy_common.c test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
msg_zerocopy_common.h test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
README test/vsock: vsock_perf utility 2023-01-12 12:53:54 +01:00
timeout.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 441 2019-06-05 17:37:17 +02:00
timeout.h VSOCK: add SPDX identifiers to vsock tests 2019-12-20 21:09:21 -08:00
util.c test/vsock: refactor vsock_accept 2023-11-07 22:27:07 +00:00
util.h test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
vsock_diag_test.c vsock_diag_test: remove free_sock_stat() call in test_no_sockets 2021-10-15 17:21:34 -07:00
vsock_perf.c test/vsock: MSG_ZEROCOPY support for vsock_perf 2023-10-15 13:19:42 +01:00
vsock_test_zerocopy.c test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
vsock_test_zerocopy.h test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
vsock_test.c test/vsock: MSG_ZEROCOPY flag tests 2023-10-15 13:19:42 +01:00
vsock_uring_test.c test/vsock: io_uring rx/tx tests 2023-10-15 13:19:43 +01:00

AF_VSOCK test suite
-------------------
These tests exercise net/vmw_vsock/ host<->guest sockets for VMware, KVM, and
Hyper-V.

The following tests are available:

  * vsock_test - core AF_VSOCK socket functionality
  * vsock_diag_test - vsock_diag.ko module for listing open sockets

The following prerequisite steps are not automated and must be performed prior
to running tests:

1. Build the kernel, make headers_install, and build these tests.
2. Install the kernel and tests on the host.
3. Install the kernel and tests inside the guest.
4. Boot the guest and ensure that the AF_VSOCK transport is enabled.

Invoke test binaries in both directions as follows:

  # host=server, guest=client
  (host)# $TEST_BINARY --mode=server \
                       --control-port=1234 \
                       --peer-cid=3
  (guest)# $TEST_BINARY --mode=client \
                        --control-host=$HOST_IP \
                        --control-port=1234 \
                        --peer-cid=2

  # host=client, guest=server
  (guest)# $TEST_BINARY --mode=server \
                        --control-port=1234 \
                        --peer-cid=2
  (host)# $TEST_BINARY --mode=client \
                       --control-port=$GUEST_IP \
                       --control-port=1234 \
                       --peer-cid=3

vsock_perf utility
-------------------
'vsock_perf' is a simple tool to measure vsock performance. It works in
sender/receiver modes: sender connect to peer at the specified port and
starts data transmission to the receiver. After data processing is done,
it prints several metrics(see below).

Usage:
# run as sender
# connect to CID 2, port 1234, send 1G of data, tx buf size is 1M
./vsock_perf --sender 2 --port 1234 --bytes 1G --buf-size 1M

Output:
tx performance: A Gbits/s

Output explanation:
A is calculated as "number of bits to send" / "time in tx loop"

# run as receiver
# listen port 1234, rx buf size is 1M, socket buf size is 1G, SO_RCVLOWAT is 64K
./vsock_perf --port 1234 --buf-size 1M --vsk-size 1G --rcvlowat 64K

Output:
rx performance: A Gbits/s
total in 'read()': B sec
POLLIN wakeups: C
average in 'read()': D ns

Output explanation:
A is calculated as "number of received bits" / "time in rx loop".
B is time, spent in 'read()' system call(excluding 'poll()')
C is number of 'poll()' wake ups with POLLIN bit set.
D is B / C, e.g. average amount of time, spent in single 'read()'.