linux/tools/testing/vsock
Stefano Garzarella 30c82aa0a8 vsock/test: add test for small packets under pressure
Add a test that sends 2 MB of data using randomly sized small packets
(129-512 bytes) over a SOCK_STREAM connection. Packets above
GOOD_COPY_LEN (128) bypass the in-place coalescing in recv_enqueue(),
forcing each one into its own skb.

Without receive queue collapsing, the per-skb overhead eventually
exceeds buf_alloc and the connection is reset. The test verifies
that all data arrives and that content integrity is preserved.

Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Bobby Eshleman <bobbyeshleman@meta.com>
Link: https://patch.msgid.link/20260708102904.50732-3-sgarzare@redhat.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2026-07-21 12:11:06 +02:00
..
.gitignore test/vsock: io_uring rx/tx tests 2023-10-15 13:19:43 +01:00
control.c vsock/test: verify socket options after setting them 2024-12-05 11:39:34 +01:00
control.h test/vsock: rework message bounds test 2023-01-12 12:53:54 +01:00
Makefile vsock/test: Add test for null ptr deref when transport changes 2025-07-02 15:05:23 -07:00
msg_zerocopy_common.c vsock/test: verify socket options after setting them 2024-12-05 11:39:34 +01:00
msg_zerocopy_common.h vsock/test: verify socket options after setting them 2024-12-05 11:39:34 +01:00
README vsock/test: Add README blurb about kmemleak usage 2024-12-23 10:28:00 -08:00
timeout.c vsock/test: add timeout_usleep() to allow sleeping in timeout sections 2025-05-16 18:01:32 -07:00
timeout.h vsock/test: add timeout_usleep() to allow sleeping in timeout sections 2025-05-16 18:01:32 -07:00
util.c vsock/test: fix MSG_PEEK handling in recv_buf() 2026-04-16 19:34:22 -07:00
util.h vsock/test: Do not filter kallsyms by symbol type 2026-01-20 16:45:39 +01:00
vsock_diag_test.c vsock/test: print type for SOCK_SEQPACKET 2024-01-25 16:39:21 -08:00
vsock_perf.c vsock/test: verify socket options after setting them 2024-12-05 11:39:34 +01:00
vsock_test_zerocopy.c vsock/test: Add test for a linear and non-linear skb getting coalesced 2026-01-15 19:44:44 -08:00
vsock_test_zerocopy.h vsock/test: Add test for a linear and non-linear skb getting coalesced 2026-01-15 19:44:44 -08:00
vsock_test.c vsock/test: add test for small packets under pressure 2026-07-21 12:11:06 +02:00
vsock_uring_test.c vsock/test: verify socket options after setting them 2024-12-05 11:39:34 +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

Some tests are designed to produce kernel memory leaks. Leaks detection,
however, is deferred to Kernel Memory Leak Detector. It is recommended to enable
kmemleak (CONFIG_DEBUG_KMEMLEAK=y) and explicitly trigger a scan after each test
suite run, e.g.

  # echo clear > /sys/kernel/debug/kmemleak
  # $TEST_BINARY ...
  # echo "wait for any grace periods" && sleep 2
  # echo scan > /sys/kernel/debug/kmemleak
  # echo "wait for kmemleak" && sleep 5
  # echo scan > /sys/kernel/debug/kmemleak
  # cat /sys/kernel/debug/kmemleak

For more information see Documentation/dev-tools/kmemleak.rst.

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()'.