Skip to content

Commit 6b0658f

Browse files
committed
greybus: tools: Add tools directory to greybus repo and add loopback
Move the loopback test to the greybus main repo, as we will be adding more tests over time and it doesn't need to be burried in the gbsim repo. This moves the latest version from gbsim to this repo and fixes up the Makefile to be a bit more "smart" when building the code. Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent 8e77c83 commit 6b0658f

File tree

7 files changed

+1371
-1
lines changed

7 files changed

+1371
-1
lines changed

drivers/staging/greybus/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ tags
1212
cscope.*
1313
ncscope.*
1414
*.patch
15+
tools/loopback_test

drivers/staging/greybus/Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,10 @@ ccflags-y := -Wall
8585
# needed for trace events
8686
ccflags-y += -I$(src)
8787

88-
all: module
88+
all: module tools
89+
90+
tools::
91+
$(MAKE) -C tools KERNELDIR=$(realpath $(KERNELDIR))
8992

9093
module:
9194
$(MAKE) -C $(KERNELDIR) M=$(PWD)
@@ -97,6 +100,7 @@ clean:
97100
rm -f *.o *~ core .depend .*.cmd *.ko *.mod.c
98101
rm -f Module.markers Module.symvers modules.order
99102
rm -rf .tmp_versions Modules.symvers
103+
$(MAKE) -C tools clean
100104

101105
coccicheck:
102106
$(MAKE) -C $(KERNELDIR) M=$(PWD) coccicheck
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
LOCAL_PATH:= $(call my-dir)
2+
3+
include $(CLEAR_VARS)
4+
5+
LOCAL_SRC_FILES:= loopback_test.c
6+
LOCAL_MODULE_TAGS := optional
7+
LOCAL_MODULE := gb_loopback_test
8+
9+
include $(BUILD_EXECUTABLE)
10+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
ifeq ($(strip $(V)), 1)
2+
Q =
3+
else
4+
Q = @
5+
endif
6+
7+
CFLAGS += -std=gnu99 -Wall -Wextra -g \
8+
-D_GNU_SOURCE \
9+
-Wno-unused-parameter \
10+
-Wmaybe-uninitialized \
11+
-Wredundant-decls \
12+
-Wcast-align \
13+
-Wsign-compare \
14+
-Wno-missing-field-initializers
15+
16+
CC := $(CROSS_COMPILE)gcc
17+
18+
TOOLS = loopback_test
19+
20+
all: $(TOOLS)
21+
22+
%.o: %.c ../greybus_protocols.h
23+
@echo ' TARGET_CC $@'
24+
$(Q)$(CC) $(CFLAGS) -c $< -o $@
25+
26+
loopback_%: loopback_%.o
27+
@echo ' TARGET_LD $@'
28+
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@
29+
30+
clean::
31+
rm -f *.o $(TOOLS)
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
2+
3+
1 - LOOPBACK DRIVER
4+
5+
The driver implements the main logic of the loopback test and provides
6+
sysfs files to configure the test and retrieve the results.
7+
A user could run a test without the need of the test application given
8+
that he understands the sysfs interface of the loopback driver.
9+
10+
The loopback kernel driver needs to be loaded and at least one module
11+
with the loopback feature enabled must be present for the sysfs files to be
12+
created and for the loopback test application to be able to run.
13+
14+
To load the module:
15+
# modprobe gb-loopback
16+
17+
18+
When the module is probed, New files are available on the sysfs
19+
directory of the detected loopback device.
20+
(typically under "/sys/bus/graybus/devices").
21+
22+
Here is a short summary of the sysfs interface files that should be visible:
23+
24+
* Loopback Configuration Files:
25+
async - Use asynchronous operations.
26+
iteration_max - Number of tests iterations to perform.
27+
size - payload size of the transfer.
28+
timeout - The number of microseconds to give an individual
29+
asynchronous request before timing out.
30+
us_wait - Time to wait between 2 messages
31+
type - By writing the test type to this file, the test starts.
32+
Valid tests are:
33+
0 stop the test
34+
2 - ping
35+
3 - transfer
36+
4 - sink
37+
38+
* Loopback feedback files:
39+
error - number of errors that have occurred.
40+
iteration_count - Number of iterations performed.
41+
requests_completed - Number of requests successfully completed.
42+
requests_timedout - Number of requests that have timed out.
43+
timeout_max - Max allowed timeout
44+
timeout_min - Min allowed timeout.
45+
46+
* Loopback result files:
47+
apbridge_unipro_latency_avg
48+
apbridge_unipro_latency_max
49+
apbridge_unipro_latency_min
50+
gpbridge_firmware_latency_avg
51+
gpbridge_firmware_latency_max
52+
gpbridge_firmware_latency_min
53+
requests_per_second_avg
54+
requests_per_second_max
55+
requests_per_second_min
56+
latency_avg
57+
latency_max
58+
latency_min
59+
throughput_avg
60+
throughput_max
61+
throughput_min
62+
63+
64+
65+
2 - LOOPBACK TEST APPLICATION
66+
67+
The loopback test application manages and formats the results provided by
68+
the loopback kernel module. The purpose of this application
69+
is to:
70+
- Start and manage multiple loopback device tests concurrently.
71+
- Calculate the aggregate results for multiple devices.
72+
- Gather and format test results (csv or human readable).
73+
74+
The best way to get up to date usage information for the application is
75+
usually to pass the "-h" parameter.
76+
Here is the summary of the available options:
77+
78+
Mandatory arguments
79+
-t must be one of the test names - sink, transfer or ping
80+
-i iteration count - the number of iterations to run the test over
81+
Optional arguments
82+
-S sysfs location - location for greybus 'endo' entires default /sys/bus/greybus/devices/
83+
-D debugfs location - location for loopback debugfs entries default /sys/kernel/debug/gb_loopback/
84+
-s size of data packet to send during test - defaults to zero
85+
-m mask - a bit mask of connections to include example: -m 8 = 4th connection -m 9 = 1st and 4th connection etc
86+
default is zero which means broadcast to all connections
87+
-v verbose output
88+
-d debug output
89+
-r raw data output - when specified the full list of latency values are included in the output CSV
90+
-p porcelain - when specified printout is in a user-friendly non-CSV format. This option suppresses writing to CSV file
91+
-a aggregate - show aggregation of all enabled devies
92+
-l list found loopback devices and exit.
93+
-x Async - Enable async transfers.
94+
-o Timeout - Timeout in microseconds for async operations.
95+
96+
97+
98+
3 - REAL WORLD EXAMPLE USAGES
99+
100+
3.1 - Using the driver sysfs files to run a test on a single device:
101+
102+
* Run a 1000 transfers of a 100 byte packet. Each transfer is started only
103+
after the previous one finished successfully:
104+
echo 0 > /sys/bus/greybus/devices/1-2.17/type
105+
echo 0 > /sys/bus/greybus/devices/1-2.17/async
106+
echo 2000 > /sys/bus/greybus/devices/1-2.17/us_wait
107+
echo 100 > /sys/bus/greybus/devices/1-2.17/size
108+
echo 1000 > /sys/bus/greybus/devices/1-2.17/iteration_max
109+
echo 0 > /sys/bus/greybus/devices/1-2.17/mask
110+
echo 200000 > /sys/bus/greybus/devices/1-2.17/timeout
111+
echo 3 > /sys/bus/greybus/devices/1-2.17/type
112+
113+
* Run a 1000 transfers of a 100 byte packet. Transfers are started without
114+
waiting for the previous one to finish:
115+
echo 0 > /sys/bus/greybus/devices/1-2.17/type
116+
echo 3 > /sys/bus/greybus/devices/1-2.17/async
117+
echo 0 > /sys/bus/greybus/devices/1-2.17/us_wait
118+
echo 100 > /sys/bus/greybus/devices/1-2.17/size
119+
echo 1000 > /sys/bus/greybus/devices/1-2.17/iteration_max
120+
echo 0 > /sys/bus/greybus/devices/1-2.17/mask
121+
echo 200000 > /sys/bus/greybus/devices/1-2.17/timeout
122+
echo 3 > /sys/bus/greybus/devices/1-2.17/type
123+
124+
* Read the results from sysfs:
125+
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_min
126+
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_max
127+
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_avg
128+
129+
cat /sys/bus/greybus/devices/1-2.17/latency_min
130+
cat /sys/bus/greybus/devices/1-2.17/latency_max
131+
cat /sys/bus/greybus/devices/1-2.17/latency_avg
132+
133+
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_min
134+
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_max
135+
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_avg
136+
137+
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_min
138+
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_max
139+
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_avg
140+
141+
cat /sys/bus/greybus/devices/1-2.17/error
142+
cat /sys/bus/greybus/devices/1-2.17/requests_completed
143+
cat /sys/bus/greybus/devices/1-2.17/requests_timedout
144+
145+
146+
3.2 - using the test application:
147+
148+
* Run a transfer test 10 iterations of size 100 bytes on all available devices
149+
#/loopback_test -t transfer -i 10 -s 100
150+
1970-1-1 0:10:7,transfer,1-4.17,100,10,0,443,509,471.700012,66,1963,2256,2124.600098,293,102776,118088,109318.898438,15312,1620,1998,1894.099976,378,56,57,56.799999,1
151+
1970-1-1 0:10:7,transfer,1-5.17,100,10,0,399,542,463.399994,143,1845,2505,2175.800049,660,92568,125744,107393.296875,33176,1469,2305,1806.500000,836,56,57,56.799999,1
152+
153+
154+
* Show the aggregate results of both devices. ("-a")
155+
#/loopback_test -t transfer -i 10 -s 100 -a
156+
1970-1-1 0:10:35,transfer,1-4.17,100,10,0,448,580,494.100006,132,1722,2230,2039.400024,508,103936,134560,114515.703125,30624,1513,1980,1806.900024,467,56,57,57.299999,1
157+
1970-1-1 0:10:35,transfer,1-5.17,100,10,0,383,558,478.600006,175,1791,2606,2115.199951,815,88856,129456,110919.703125,40600,1457,2246,1773.599976,789,56,57,57.099998,1
158+
1970-1-1 0:10:35,transfer,aggregate,100,10,0,383,580,486.000000,197,1722,2606,2077.000000,884,88856,134560,112717.000000,45704,1457,2246,1789.000000,789,56,57,57.000000,1
159+
160+
* Example usage of the mask option to select which devices will
161+
run the test (1st, 2nd, or both devices):
162+
# /loopback_test -t transfer -i 10 -s 100 -m 1
163+
1970-1-1 0:11:56,transfer,1-4.17,100,10,0,514,558,544.900024,44,1791,1943,1836.599976,152,119248,129456,126301.296875,10208,1600,1001609,101613.601562,1000009,56,57,56.900002,1
164+
# /loopback_test -t transfer -i 10 -s 100 -m 2
165+
1970-1-1 0:12:0,transfer,1-5.17,100,10,0,468,554,539.000000,86,1804,2134,1859.500000,330,108576,128528,124932.500000,19952,1606,1626,1619.300049,20,56,57,57.400002,1
166+
# /loopback_test -t transfer -i 10 -s 100 -m 3
167+
1970-1-1 0:12:3,transfer,1-4.17,100,10,0,432,510,469.399994,78,1959,2313,2135.800049,354,100224,118320,108785.296875,18096,1610,2024,1893.500000,414,56,57,57.200001,1
168+
1970-1-1 0:12:3,transfer,1-5.17,100,10,0,404,542,468.799988,138,1843,2472,2152.500000,629,93728,125744,108646.101562,32016,1504,2247,1853.099976,743,56,57,57.099998,1
169+
170+
* Show output in human readable format ("-p")
171+
# /loopback_test -t transfer -i 10 -s 100 -m 3 -p
172+
173+
1970-1-1 0:12:37
174+
test: transfer
175+
path: 1-4.17
176+
size: 100
177+
iterations: 10
178+
errors: 0
179+
async: Disabled
180+
requests per-sec: min=390, max=547, average=469.299988, jitter=157
181+
ap-throughput B/s: min=90480 max=126904 average=108762.101562 jitter=36424
182+
ap-latency usec: min=1826 max=2560 average=2146.000000 jitter=734
183+
apbridge-latency usec: min=1620 max=1982 average=1882.099976 jitter=362
184+
gpbridge-latency usec: min=56 max=57 average=57.099998 jitter=1
185+
186+
187+
1970-1-1 0:12:37
188+
test: transfer
189+
path: 1-5.17
190+
size: 100
191+
iterations: 10
192+
errors: 0
193+
async: Disabled
194+
requests per-sec: min=397, max=538, average=461.700012, jitter=141
195+
ap-throughput B/s: min=92104 max=124816 average=106998.898438 jitter=32712
196+
ap-latency usec: min=1856 max=2514 average=2185.699951 jitter=658
197+
apbridge-latency usec: min=1460 max=2296 average=1828.599976 jitter=836
198+
gpbridge-latency usec: min=56 max=57 average=57.099998 jitter=1

0 commit comments

Comments
 (0)