[ Upstream commit c39a6a277e0e67ffff6a8efcbbf7e7e23ce9e38c ]
If the last test fails, the other side still completes correctly,
which could lead to false positives.
Let's add a final barrier that ensures that the last test has finished
correctly on both sides, but also that the two sides agree on the
number of tests to be performed.
Fixes:
|
||
|---|---|---|
| .. | ||
| .gitignore | ||
| control.c | ||
| control.h | ||
| Makefile | ||
| msg_zerocopy_common.c | ||
| msg_zerocopy_common.h | ||
| README | ||
| timeout.c | ||
| timeout.h | ||
| util.c | ||
| util.h | ||
| vsock_diag_test.c | ||
| vsock_perf.c | ||
| vsock_test_zerocopy.c | ||
| vsock_test_zerocopy.h | ||
| vsock_test.c | ||
| vsock_uring_test.c | ||
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:
- Build the kernel, make headers_install, and build these tests.
- Install the kernel and tests on the host.
- Install the kernel and tests inside the guest.
- 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()'.