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