xref: /openbmc/linux/tools/testing/vsock/README (revision 8abbffd2)
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
38*8abbffd2SArseniy Krasnov
39*8abbffd2SArseniy Krasnovvsock_perf utility
40*8abbffd2SArseniy Krasnov-------------------
41*8abbffd2SArseniy Krasnov'vsock_perf' is a simple tool to measure vsock performance. It works in
42*8abbffd2SArseniy Krasnovsender/receiver modes: sender connect to peer at the specified port and
43*8abbffd2SArseniy Krasnovstarts data transmission to the receiver. After data processing is done,
44*8abbffd2SArseniy Krasnovit prints several metrics(see below).
45*8abbffd2SArseniy Krasnov
46*8abbffd2SArseniy KrasnovUsage:
47*8abbffd2SArseniy Krasnov# run as sender
48*8abbffd2SArseniy Krasnov# connect to CID 2, port 1234, send 1G of data, tx buf size is 1M
49*8abbffd2SArseniy Krasnov./vsock_perf --sender 2 --port 1234 --bytes 1G --buf-size 1M
50*8abbffd2SArseniy Krasnov
51*8abbffd2SArseniy KrasnovOutput:
52*8abbffd2SArseniy Krasnovtx performance: A Gbits/s
53*8abbffd2SArseniy Krasnov
54*8abbffd2SArseniy KrasnovOutput explanation:
55*8abbffd2SArseniy KrasnovA is calculated as "number of bits to send" / "time in tx loop"
56*8abbffd2SArseniy Krasnov
57*8abbffd2SArseniy Krasnov# run as receiver
58*8abbffd2SArseniy Krasnov# listen port 1234, rx buf size is 1M, socket buf size is 1G, SO_RCVLOWAT is 64K
59*8abbffd2SArseniy Krasnov./vsock_perf --port 1234 --buf-size 1M --vsk-size 1G --rcvlowat 64K
60*8abbffd2SArseniy Krasnov
61*8abbffd2SArseniy KrasnovOutput:
62*8abbffd2SArseniy Krasnovrx performance: A Gbits/s
63*8abbffd2SArseniy Krasnovtotal in 'read()': B sec
64*8abbffd2SArseniy KrasnovPOLLIN wakeups: C
65*8abbffd2SArseniy Krasnovaverage in 'read()': D ns
66*8abbffd2SArseniy Krasnov
67*8abbffd2SArseniy KrasnovOutput explanation:
68*8abbffd2SArseniy KrasnovA is calculated as "number of received bits" / "time in rx loop".
69*8abbffd2SArseniy KrasnovB is time, spent in 'read()' system call(excluding 'poll()')
70*8abbffd2SArseniy KrasnovC is number of 'poll()' wake ups with POLLIN bit set.
71*8abbffd2SArseniy KrasnovD is B / C, e.g. average amount of time, spent in single 'read()'.
72