mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 06:50:37 +00:00

Document the suggested use of kmemleak for memory leak detection. Suggested-by: Stefano Garzarella <sgarzare@redhat.com> Reviewed-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Michal Luczaj <mhal@rbox.co> Link: https://patch.msgid.link/20241219-test-vsock-leaks-v4-3-a416e554d9d7@rbox.co Signed-off-by: Jakub Kicinski <kuba@kernel.org>
87 lines
2.9 KiB
Plaintext
87 lines
2.9 KiB
Plaintext
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()'.
|