-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <gregkh@google.com>
- Loading branch information
Greg Kroah-Hartman
committed
Dec 18, 2015
1 parent
8e77c83
commit 6b0658f
Showing
7 changed files
with
1,371 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,3 +12,4 @@ tags | |
cscope.* | ||
ncscope.* | ||
*.patch | ||
tools/loopback_test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
LOCAL_PATH:= $(call my-dir) | ||
|
||
include $(CLEAR_VARS) | ||
|
||
LOCAL_SRC_FILES:= loopback_test.c | ||
LOCAL_MODULE_TAGS := optional | ||
LOCAL_MODULE := gb_loopback_test | ||
|
||
include $(BUILD_EXECUTABLE) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
ifeq ($(strip $(V)), 1) | ||
Q = | ||
else | ||
Q = @ | ||
endif | ||
|
||
CFLAGS += -std=gnu99 -Wall -Wextra -g \ | ||
-D_GNU_SOURCE \ | ||
-Wno-unused-parameter \ | ||
-Wmaybe-uninitialized \ | ||
-Wredundant-decls \ | ||
-Wcast-align \ | ||
-Wsign-compare \ | ||
-Wno-missing-field-initializers | ||
|
||
CC := $(CROSS_COMPILE)gcc | ||
|
||
TOOLS = loopback_test | ||
|
||
all: $(TOOLS) | ||
|
||
%.o: %.c ../greybus_protocols.h | ||
@echo ' TARGET_CC $@' | ||
$(Q)$(CC) $(CFLAGS) -c $< -o $@ | ||
|
||
loopback_%: loopback_%.o | ||
@echo ' TARGET_LD $@' | ||
$(Q)$(CC) $(CFLAGS) $(LDFLAGS) $^ -o $@ | ||
|
||
clean:: | ||
rm -f *.o $(TOOLS) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,198 @@ | ||
|
||
|
||
1 - LOOPBACK DRIVER | ||
|
||
The driver implements the main logic of the loopback test and provides | ||
sysfs files to configure the test and retrieve the results. | ||
A user could run a test without the need of the test application given | ||
that he understands the sysfs interface of the loopback driver. | ||
|
||
The loopback kernel driver needs to be loaded and at least one module | ||
with the loopback feature enabled must be present for the sysfs files to be | ||
created and for the loopback test application to be able to run. | ||
|
||
To load the module: | ||
# modprobe gb-loopback | ||
|
||
|
||
When the module is probed, New files are available on the sysfs | ||
directory of the detected loopback device. | ||
(typically under "/sys/bus/graybus/devices"). | ||
|
||
Here is a short summary of the sysfs interface files that should be visible: | ||
|
||
* Loopback Configuration Files: | ||
async - Use asynchronous operations. | ||
iteration_max - Number of tests iterations to perform. | ||
size - payload size of the transfer. | ||
timeout - The number of microseconds to give an individual | ||
asynchronous request before timing out. | ||
us_wait - Time to wait between 2 messages | ||
type - By writing the test type to this file, the test starts. | ||
Valid tests are: | ||
0 stop the test | ||
2 - ping | ||
3 - transfer | ||
4 - sink | ||
|
||
* Loopback feedback files: | ||
error - number of errors that have occurred. | ||
iteration_count - Number of iterations performed. | ||
requests_completed - Number of requests successfully completed. | ||
requests_timedout - Number of requests that have timed out. | ||
timeout_max - Max allowed timeout | ||
timeout_min - Min allowed timeout. | ||
|
||
* Loopback result files: | ||
apbridge_unipro_latency_avg | ||
apbridge_unipro_latency_max | ||
apbridge_unipro_latency_min | ||
gpbridge_firmware_latency_avg | ||
gpbridge_firmware_latency_max | ||
gpbridge_firmware_latency_min | ||
requests_per_second_avg | ||
requests_per_second_max | ||
requests_per_second_min | ||
latency_avg | ||
latency_max | ||
latency_min | ||
throughput_avg | ||
throughput_max | ||
throughput_min | ||
|
||
|
||
|
||
2 - LOOPBACK TEST APPLICATION | ||
|
||
The loopback test application manages and formats the results provided by | ||
the loopback kernel module. The purpose of this application | ||
is to: | ||
- Start and manage multiple loopback device tests concurrently. | ||
- Calculate the aggregate results for multiple devices. | ||
- Gather and format test results (csv or human readable). | ||
|
||
The best way to get up to date usage information for the application is | ||
usually to pass the "-h" parameter. | ||
Here is the summary of the available options: | ||
|
||
Mandatory arguments | ||
-t must be one of the test names - sink, transfer or ping | ||
-i iteration count - the number of iterations to run the test over | ||
Optional arguments | ||
-S sysfs location - location for greybus 'endo' entires default /sys/bus/greybus/devices/ | ||
-D debugfs location - location for loopback debugfs entries default /sys/kernel/debug/gb_loopback/ | ||
-s size of data packet to send during test - defaults to zero | ||
-m mask - a bit mask of connections to include example: -m 8 = 4th connection -m 9 = 1st and 4th connection etc | ||
default is zero which means broadcast to all connections | ||
-v verbose output | ||
-d debug output | ||
-r raw data output - when specified the full list of latency values are included in the output CSV | ||
-p porcelain - when specified printout is in a user-friendly non-CSV format. This option suppresses writing to CSV file | ||
-a aggregate - show aggregation of all enabled devies | ||
-l list found loopback devices and exit. | ||
-x Async - Enable async transfers. | ||
-o Timeout - Timeout in microseconds for async operations. | ||
|
||
|
||
|
||
3 - REAL WORLD EXAMPLE USAGES | ||
|
||
3.1 - Using the driver sysfs files to run a test on a single device: | ||
|
||
* Run a 1000 transfers of a 100 byte packet. Each transfer is started only | ||
after the previous one finished successfully: | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/type | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/async | ||
echo 2000 > /sys/bus/greybus/devices/1-2.17/us_wait | ||
echo 100 > /sys/bus/greybus/devices/1-2.17/size | ||
echo 1000 > /sys/bus/greybus/devices/1-2.17/iteration_max | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/mask | ||
echo 200000 > /sys/bus/greybus/devices/1-2.17/timeout | ||
echo 3 > /sys/bus/greybus/devices/1-2.17/type | ||
|
||
* Run a 1000 transfers of a 100 byte packet. Transfers are started without | ||
waiting for the previous one to finish: | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/type | ||
echo 3 > /sys/bus/greybus/devices/1-2.17/async | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/us_wait | ||
echo 100 > /sys/bus/greybus/devices/1-2.17/size | ||
echo 1000 > /sys/bus/greybus/devices/1-2.17/iteration_max | ||
echo 0 > /sys/bus/greybus/devices/1-2.17/mask | ||
echo 200000 > /sys/bus/greybus/devices/1-2.17/timeout | ||
echo 3 > /sys/bus/greybus/devices/1-2.17/type | ||
|
||
* Read the results from sysfs: | ||
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_min | ||
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_max | ||
cat /sys/bus/greybus/devices/1-2.17/requests_per_second_avg | ||
|
||
cat /sys/bus/greybus/devices/1-2.17/latency_min | ||
cat /sys/bus/greybus/devices/1-2.17/latency_max | ||
cat /sys/bus/greybus/devices/1-2.17/latency_avg | ||
|
||
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_min | ||
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_max | ||
cat /sys/bus/greybus/devices/1-2.17/apbridge_unipro_latency_avg | ||
|
||
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_min | ||
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_max | ||
cat /sys/bus/greybus/devices/1-2.17/gpbridge_firmware_latency_avg | ||
|
||
cat /sys/bus/greybus/devices/1-2.17/error | ||
cat /sys/bus/greybus/devices/1-2.17/requests_completed | ||
cat /sys/bus/greybus/devices/1-2.17/requests_timedout | ||
|
||
|
||
3.2 - using the test application: | ||
|
||
* Run a transfer test 10 iterations of size 100 bytes on all available devices | ||
#/loopback_test -t transfer -i 10 -s 100 | ||
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 | ||
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 | ||
|
||
|
||
* Show the aggregate results of both devices. ("-a") | ||
#/loopback_test -t transfer -i 10 -s 100 -a | ||
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 | ||
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 | ||
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 | ||
|
||
* Example usage of the mask option to select which devices will | ||
run the test (1st, 2nd, or both devices): | ||
# /loopback_test -t transfer -i 10 -s 100 -m 1 | ||
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 | ||
# /loopback_test -t transfer -i 10 -s 100 -m 2 | ||
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 | ||
# /loopback_test -t transfer -i 10 -s 100 -m 3 | ||
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 | ||
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 | ||
|
||
* Show output in human readable format ("-p") | ||
# /loopback_test -t transfer -i 10 -s 100 -m 3 -p | ||
|
||
1970-1-1 0:12:37 | ||
test: transfer | ||
path: 1-4.17 | ||
size: 100 | ||
iterations: 10 | ||
errors: 0 | ||
async: Disabled | ||
requests per-sec: min=390, max=547, average=469.299988, jitter=157 | ||
ap-throughput B/s: min=90480 max=126904 average=108762.101562 jitter=36424 | ||
ap-latency usec: min=1826 max=2560 average=2146.000000 jitter=734 | ||
apbridge-latency usec: min=1620 max=1982 average=1882.099976 jitter=362 | ||
gpbridge-latency usec: min=56 max=57 average=57.099998 jitter=1 | ||
|
||
|
||
1970-1-1 0:12:37 | ||
test: transfer | ||
path: 1-5.17 | ||
size: 100 | ||
iterations: 10 | ||
errors: 0 | ||
async: Disabled | ||
requests per-sec: min=397, max=538, average=461.700012, jitter=141 | ||
ap-throughput B/s: min=92104 max=124816 average=106998.898438 jitter=32712 | ||
ap-latency usec: min=1856 max=2514 average=2185.699951 jitter=658 | ||
apbridge-latency usec: min=1460 max=2296 average=1828.599976 jitter=836 | ||
gpbridge-latency usec: min=56 max=57 average=57.099998 jitter=1 |
Oops, something went wrong.