xref: /linux/tools/testing/vsock/README (revision 0ad9617c78acbc71373fb341a6f75d4012b01d69)
10b025033SStefan HajnocziAF_VSOCK test suite
20b025033SStefan Hajnoczi-------------------
30b025033SStefan HajnocziThese tests exercise net/vmw_vsock/ host<->guest sockets for VMware, KVM, and
40b025033SStefan HajnocziHyper-V.
50b025033SStefan Hajnoczi
60b025033SStefan HajnocziThe following tests are available:
70b025033SStefan Hajnoczi
8cdbcc18dSStefan Hajnoczi  * vsock_test - core AF_VSOCK socket functionality
90b025033SStefan Hajnoczi  * vsock_diag_test - vsock_diag.ko module for listing open sockets
100b025033SStefan Hajnoczi
110b025033SStefan HajnocziThe following prerequisite steps are not automated and must be performed prior
120b025033SStefan Hajnoczito running tests:
130b025033SStefan Hajnoczi
1443985468SStefan Hajnoczi1. Build the kernel, make headers_install, and build these tests.
150b025033SStefan Hajnoczi2. Install the kernel and tests on the host.
160b025033SStefan Hajnoczi3. Install the kernel and tests inside the guest.
170b025033SStefan Hajnoczi4. Boot the guest and ensure that the AF_VSOCK transport is enabled.
180b025033SStefan Hajnoczi
190b025033SStefan HajnocziInvoke test binaries in both directions as follows:
200b025033SStefan Hajnoczi
210b025033SStefan Hajnoczi  # host=server, guest=client
220b025033SStefan Hajnoczi  (host)# $TEST_BINARY --mode=server \
230b025033SStefan Hajnoczi                       --control-port=1234 \
240b025033SStefan Hajnoczi                       --peer-cid=3
250b025033SStefan Hajnoczi  (guest)# $TEST_BINARY --mode=client \
260b025033SStefan Hajnoczi                        --control-host=$HOST_IP \
270b025033SStefan Hajnoczi                        --control-port=1234 \
280b025033SStefan Hajnoczi                        --peer-cid=2
290b025033SStefan Hajnoczi
300b025033SStefan Hajnoczi  # host=client, guest=server
310b025033SStefan Hajnoczi  (guest)# $TEST_BINARY --mode=server \
320b025033SStefan Hajnoczi                        --control-port=1234 \
330b025033SStefan Hajnoczi                        --peer-cid=2
340b025033SStefan Hajnoczi  (host)# $TEST_BINARY --mode=client \
350b025033SStefan Hajnoczi                       --control-port=$GUEST_IP \
360b025033SStefan Hajnoczi                       --control-port=1234 \
370b025033SStefan Hajnoczi                       --peer-cid=3
388abbffd2SArseniy Krasnov
39*50f94344SMichal LuczajSome tests are designed to produce kernel memory leaks. Leaks detection,
40*50f94344SMichal Luczajhowever, is deferred to Kernel Memory Leak Detector. It is recommended to enable
41*50f94344SMichal Luczajkmemleak (CONFIG_DEBUG_KMEMLEAK=y) and explicitly trigger a scan after each test
42*50f94344SMichal Luczajsuite run, e.g.
43*50f94344SMichal Luczaj
44*50f94344SMichal Luczaj  # echo clear > /sys/kernel/debug/kmemleak
45*50f94344SMichal Luczaj  # $TEST_BINARY ...
46*50f94344SMichal Luczaj  # echo "wait for any grace periods" && sleep 2
47*50f94344SMichal Luczaj  # echo scan > /sys/kernel/debug/kmemleak
48*50f94344SMichal Luczaj  # echo "wait for kmemleak" && sleep 5
49*50f94344SMichal Luczaj  # echo scan > /sys/kernel/debug/kmemleak
50*50f94344SMichal Luczaj  # cat /sys/kernel/debug/kmemleak
51*50f94344SMichal Luczaj
52*50f94344SMichal LuczajFor more information see Documentation/dev-tools/kmemleak.rst.
53*50f94344SMichal Luczaj
548abbffd2SArseniy Krasnovvsock_perf utility
558abbffd2SArseniy Krasnov-------------------
568abbffd2SArseniy Krasnov'vsock_perf' is a simple tool to measure vsock performance. It works in
578abbffd2SArseniy Krasnovsender/receiver modes: sender connect to peer at the specified port and
588abbffd2SArseniy Krasnovstarts data transmission to the receiver. After data processing is done,
598abbffd2SArseniy Krasnovit prints several metrics(see below).
608abbffd2SArseniy Krasnov
618abbffd2SArseniy KrasnovUsage:
628abbffd2SArseniy Krasnov# run as sender
638abbffd2SArseniy Krasnov# connect to CID 2, port 1234, send 1G of data, tx buf size is 1M
648abbffd2SArseniy Krasnov./vsock_perf --sender 2 --port 1234 --bytes 1G --buf-size 1M
658abbffd2SArseniy Krasnov
668abbffd2SArseniy KrasnovOutput:
678abbffd2SArseniy Krasnovtx performance: A Gbits/s
688abbffd2SArseniy Krasnov
698abbffd2SArseniy KrasnovOutput explanation:
708abbffd2SArseniy KrasnovA is calculated as "number of bits to send" / "time in tx loop"
718abbffd2SArseniy Krasnov
728abbffd2SArseniy Krasnov# run as receiver
738abbffd2SArseniy Krasnov# listen port 1234, rx buf size is 1M, socket buf size is 1G, SO_RCVLOWAT is 64K
748abbffd2SArseniy Krasnov./vsock_perf --port 1234 --buf-size 1M --vsk-size 1G --rcvlowat 64K
758abbffd2SArseniy Krasnov
768abbffd2SArseniy KrasnovOutput:
778abbffd2SArseniy Krasnovrx performance: A Gbits/s
788abbffd2SArseniy Krasnovtotal in 'read()': B sec
798abbffd2SArseniy KrasnovPOLLIN wakeups: C
808abbffd2SArseniy Krasnovaverage in 'read()': D ns
818abbffd2SArseniy Krasnov
828abbffd2SArseniy KrasnovOutput explanation:
838abbffd2SArseniy KrasnovA is calculated as "number of received bits" / "time in rx loop".
848abbffd2SArseniy KrasnovB is time, spent in 'read()' system call(excluding 'poll()')
858abbffd2SArseniy KrasnovC is number of 'poll()' wake ups with POLLIN bit set.
868abbffd2SArseniy KrasnovD is B / C, e.g. average amount of time, spent in single 'read()'.
87