1
1
#! /bin/bash
2
2
3
3
# Yet Another Bench Script by Mason Rowe
4
- # Initial Oct 2019; Last update Jun 2022
4
+ # Initial Oct 2019; Last update Aug 2022
5
5
#
6
6
# Disclaimer: This project is a work in progress. Any errors or suggestions should be
7
7
# relayed to me via the GitHub project page linked below.
12
12
# performance via fio. The script is designed to not require any dependencies
13
13
# - either compiled or installed - nor admin privileges to run.
14
14
#
15
+ YABS_VERSION=" v2022-08-15"
15
16
16
17
echo -e ' # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #'
17
18
echo -e ' # Yet-Another-Bench-Script #'
18
- echo -e ' # v2022-06-11 #'
19
+ echo -e ' # ' $YABS_VERSION ' #'
19
20
echo -e ' # https://github.com/masonr/yet-another-bench-script #'
20
21
echo -e ' # ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #'
21
22
56
57
fi
57
58
58
59
# flags to skip certain performance tests
59
- unset PREFER_BIN SKIP_FIO SKIP_IPERF SKIP_GEEKBENCH PRINT_HELP REDUCE_NET GEEKBENCH_4 GEEKBENCH_5 DD_FALLBACK IPERF_DL_FAIL
60
+ unset PREFER_BIN SKIP_FIO SKIP_IPERF SKIP_GEEKBENCH PRINT_HELP REDUCE_NET GEEKBENCH_4 GEEKBENCH_5 DD_FALLBACK IPERF_DL_FAIL JSON_SEND JSON_RESULT
60
61
GEEKBENCH_5=" True" # gb5 test enabled by default
61
62
62
63
# get any arguments that were passed to the script and set the associated skip flags (if applicable)
63
- while getopts ' bfdighr49 ' flag; do
64
+ while getopts ' bfdighr49j: ' flag; do
64
65
case " ${flag} " in
65
66
b) PREFER_BIN=" True" ;;
66
67
f) SKIP_FIO=" True" ;;
@@ -71,6 +72,7 @@ while getopts 'bfdighr49' flag; do
71
72
r) REDUCE_NET=" True" ;;
72
73
4) GEEKBENCH_4=" True" && unset GEEKBENCH_5 ;;
73
74
9) GEEKBENCH_4=" True" && GEEKBENCH_5=" True" ;;
75
+ j) JSON_SEND=${OPTARG} ;;
74
76
* ) exit 1 ;;
75
77
esac
76
78
done
@@ -96,9 +98,9 @@ if [ ! -z "$PRINT_HELP" ]; then
96
98
echo -e
97
99
echo -e "Usage: ./yabs.sh [-flags]"
98
100
echo -e " curl -sL yabs.sh | bash"
99
- echo -e " curl -sL yabs.sh | bash -s -- -{bfdighr 49 }"
101
+ echo -e " curl -sL yabs.sh | bash -s -- -{bfdighr 49 j }"
100
102
echo -e " wget -qO- yabs.sh | bash"
101
- echo -e " wget -qO- yabs.sh | bash -s -- -{bfdighr 49 }"
103
+ echo -e " wget -qO- yabs.sh | bash -s -- -{bfdighr 49 j }"
102
104
echo -e
103
105
echo -e "Flags:"
104
106
echo -e " -b : prefer pre-compiled binaries from repo over local packages"
@@ -112,6 +114,7 @@ if [ ! -z "$PRINT_HELP" ]; then
112
114
echo -e " to lessen bandwidth usage"
113
115
echo -e " -4 : use geekbench 4 instead of geekbench 5 "
114
116
echo -e " -9 : use both geekbench 4 AND geekbench 5 "
117
+ echo -e " -j <url> : send jsonified YABS results to URL"
115
118
echo -e
116
119
echo -e "Detected Arch: $ARCH "
117
120
echo -e
@@ -138,6 +141,10 @@ if [ ! -z "$PRINT_HELP" ]; then
138
141
[[ ! -z $IPV6_CHECK ]] && echo -e " IPv6 connected" ||
139
142
echo -e " IPv6 not connected"
140
143
echo -e
144
+ echo -e "Sending JSON Results:"
145
+ [[ ! -z $JSON_SEND ]] && echo -e " TRUE ($JSON_SEND )" ||
146
+ echo -e " FALSE"
147
+ echo -e
141
148
echo -e "Exiting..."
142
149
143
150
exit 0
@@ -210,18 +217,32 @@ echo -e "AES-NI : $CPU_AES"
210
217
CPU_VIRT=$(cat /proc/cpuinfo | grep 'vmx\|svm')
211
218
[[ -z "$CPU_VIRT " ]] && CPU_VIRT="\xE2 \x9 D\x8 C Disabled" || CPU_VIRT="\xE2 \x9 C\x94 Enabled"
212
219
echo -e "VM-x/AMD-V : $CPU_VIRT "
213
- TOTAL_RAM=$(format_size $(free | awk 'NR==2 {print $2 }'))
220
+ TOTAL_RAM_RAW=$(free | awk 'NR==2 {print $2 }')
221
+ TOTAL_RAM=$(format_size $TOTAL_RAM_RAW )
214
222
echo -e "RAM : $TOTAL_RAM "
215
- TOTAL_SWAP=$( format_size $( free | grep Swap | awk ' { print $2 }' ) )
223
+ TOTAL_SWAP_RAW=$(free | grep Swap | awk '{ print $2 }')
224
+ TOTAL_SWAP=$(format_size $TOTAL_SWAP_RAW )
216
225
echo -e "Swap : $TOTAL_SWAP "
217
226
# total disk size is calculated by adding all partitions of the types listed below (after the -t flags)
218
- TOTAL_DISK=$( format_size $( df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2> /dev/null | grep total | awk ' { print $2 }' ) )
227
+ TOTAL_DISK_RAW=$(df -t simfs -t ext2 -t ext3 -t ext4 -t btrfs -t xfs -t vfat -t ntfs -t swap --total 2 >/dev/null | grep total | awk '{ print $2 }')
228
+ TOTAL_DISK=$(format_size $TOTAL_DISK_RAW )
219
229
echo -e "Disk : $TOTAL_DISK "
220
230
DISTRO=$(grep 'PRETTY_NAME' /etc/os-release | cut -d '"' -f 2 )
221
231
echo -e "Distro : $DISTRO "
222
232
KERNEL=$(uname -r)
223
233
echo -e "Kernel : $KERNEL "
224
234
235
+ if [ ! -z $JSON_SEND ]; then
236
+ UPTIME_S=$(awk '{print $1 }' /proc/uptime)
237
+ IPV4 =$([ ! -z $IPV4_CHECK ] && echo "true" || echo "false")
238
+ IPV6 =$([ ! -z $IPV6_CHECK ] && echo "true" || echo "false")
239
+ AES=$([[ "$CPU_AES " = *Enabled* ]] && echo "true" || echo "false")
240
+ VIRT=$([[ "$CPU_VIRT " = *Enabled* ]] && echo "true" || echo "false")
241
+ JSON_RESULT='{"version":"'$YABS_VERSION '","arch":"'$ARCH '","ipv4 ":'$IPV4 ',"ipv6 ":'$IPV6 ',"uptime":'$UPTIME_S ',"cpu":{"model":"'$CPU_PROC '"'
242
+ JSON_RESULT+=',"cores":'$CPU_CORES ',"freq":"'$CPU_FREQ '"},"aes":'$AES ',"virt":'$VIRT ',"ram":'$TOTAL_RAM_RAW ',"swap":'$TOTAL_SWAP_RAW ','
243
+ JSON_RESULT+='"disk":'$TOTAL_DISK_RAW ',"distro":"'$DISTRO '","kernel":"'$KERNEL '"'
244
+ fi
245
+
225
246
# create a directory in the same location that the script is being run to temporarily store YABS-related files
226
247
DATE=`date -Iseconds | sed -e "s/:/_/g"`
227
248
YABS_PATH=./$DATE
@@ -341,12 +362,16 @@ function disk_test {
341
362
DISK_TEST=$(timeout 35 $FIO_CMD --name=rand_rw_$BS --ioengine=libaio --rw=randrw --rwmixread=50 --bs=$BS --iodepth=64 --numjobs=2 --size=$FIO_SIZE --runtime=30 --gtod_reduce=1 --direct=1 --filename=$DISK_PATH /test.fio --group_reporting --minimal 2 > /dev/null | grep rand_rw_$BS )
342
363
DISK_IOPS_R=$(echo $DISK_TEST | awk -F';' '{print $8 }')
343
364
DISK_IOPS_W=$(echo $DISK_TEST | awk -F';' '{print $4 9 }')
344
- DISK_IOPS=$( format_iops $( awk -v a=" $DISK_IOPS_R " -v b=" $DISK_IOPS_W " ' BEGIN { print a + b }' ) )
345
- DISK_IOPS_R=$( format_iops $DISK_IOPS_R )
346
- DISK_IOPS_W=$( format_iops $DISK_IOPS_W )
365
+ DISK_IOPS=$(awk -v a="$DISK_IOPS_R " -v b="$DISK_IOPS_W " 'BEGIN { print a + b }')
347
366
DISK_TEST_R=$(echo $DISK_TEST | awk -F';' '{print $7 }')
348
367
DISK_TEST_W=$(echo $DISK_TEST | awk -F';' '{print $4 8 }')
349
- DISK_TEST=$( format_speed $( awk -v a=" $DISK_TEST_R " -v b=" $DISK_TEST_W " ' BEGIN { print a + b }' ) )
368
+ DISK_TEST=$(awk -v a="$DISK_TEST_R " -v b="$DISK_TEST_W " 'BEGIN { print a + b }')
369
+ DISK_RESULTS_RAW+=( "$DISK_TEST " "$DISK_TEST_R " "$DISK_TEST_W " "$DISK_IOPS " "$DISK_IOPS_R " "$DISK_IOPS_W " )
370
+
371
+ DISK_IOPS=$(format_iops $DISK_IOPS )
372
+ DISK_IOPS_R=$(format_iops $DISK_IOPS_R )
373
+ DISK_IOPS_W=$(format_iops $DISK_IOPS_W )
374
+ DISK_TEST=$(format_speed $DISK_TEST )
350
375
DISK_TEST_R=$(format_speed $DISK_TEST_R )
351
376
DISK_TEST_W=$(format_speed $DISK_TEST_W )
352
377
@@ -479,7 +504,7 @@ elif [ -z "$SKIP_FIO" ]; then
479
504
echo -en " \r\033[0K"
480
505
481
506
# init global array to store disk performance values
482
- declare -a DISK_RESULTS
507
+ declare -a DISK_RESULTS DISK_RESULTS_RAW
483
508
# disk block sizes to evaluate
484
509
BLOCK_SIZES=( " 4k" " 64k" " 512k" " 1m" )
485
510
@@ -517,6 +542,7 @@ elif [ -z "$SKIP_FIO" ]; then
517
542
printf " %-6s | %-11s | %-11s | %-11s | %-6.2f %-4s\n" " Write" " ${DISK_WRITE_TEST_RES[0]} " " ${DISK_WRITE_TEST_RES[1]} " " ${DISK_WRITE_TEST_RES[2]} " " ${DISK_WRITE_TEST_AVG} " " ${DISK_WRITE_TEST_UNIT} "
518
543
printf " %-6s | %-11s | %-11s | %-11s | %-6.2f %-4s\n" " Read" " ${DISK_READ_TEST_RES[0]} " " ${DISK_READ_TEST_RES[1]} " " ${DISK_READ_TEST_RES[2]} " " ${DISK_READ_TEST_AVG} " " ${DISK_READ_TEST_UNIT} "
519
544
else # fio tests completed successfully, print results
545
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT+=' ,"fio":['
520
546
DISK_RESULTS_NUM=$( expr ${# DISK_RESULTS[@]} / 6)
521
547
DISK_COUNT=0
522
548
@@ -531,8 +557,15 @@ elif [ -z "$SKIP_FIO" ]; then
531
557
printf " %-10s | %-11s %8s | %-11s %8s\n" " Read" " ${DISK_RESULTS[DISK_COUNT*6+1]} " " (${DISK_RESULTS[DISK_COUNT*6+4]} )" " ${DISK_RESULTS[(DISK_COUNT+1)*6+1]} " " (${DISK_RESULTS[(DISK_COUNT+1)*6+4]} )"
532
558
printf " %-10s | %-11s %8s | %-11s %8s\n" " Write" " ${DISK_RESULTS[DISK_COUNT*6+2]} " " (${DISK_RESULTS[DISK_COUNT*6+5]} )" " ${DISK_RESULTS[(DISK_COUNT+1)*6+2]} " " (${DISK_RESULTS[(DISK_COUNT+1)*6+5]} )"
533
559
printf " %-10s | %-11s %8s | %-11s %8s\n" " Total" " ${DISK_RESULTS[DISK_COUNT*6]} " " (${DISK_RESULTS[DISK_COUNT*6+3]} )" " ${DISK_RESULTS[(DISK_COUNT+1)*6]} " " (${DISK_RESULTS[(DISK_COUNT+1)*6+3]} )"
560
+ if [ ! -z $JSON_SEND ]; then
561
+ JSON_RESULT+=' ["' ${BLOCK_SIZES[DISK_COUNT]} ' ",' ${DISK_RESULTS_RAW[DISK_COUNT*6+1]} ' ,' ${DISK_RESULTS_RAW[DISK_COUNT*6+4]} ' ,' ${DISK_RESULTS_RAW[DISK_COUNT*6+2]}
562
+ JSON_RESULT+=' ,' ${DISK_RESULTS_RAW[DISK_COUNT*6+5]} ' ,' ${DISK_RESULTS_RAW[DISK_COUNT*6]} ' ,' ${DISK_RESULTS_RAW[DISK_COUNT*6+3]} ' ],'
563
+ JSON_RESULT+=' ["' ${BLOCK_SIZES[DISK_COUNT+1]} ' ",' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6+1]} ' ,' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6+4]} ' ,' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6+2]}
564
+ JSON_RESULT+=' ,' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6+5]} ' ,' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6]} ' ,' ${DISK_RESULTS_RAW[(DISK_COUNT+1)*6+3]} ' ],'
565
+ fi
534
566
DISK_COUNT=$( expr $DISK_COUNT + 2)
535
567
done
568
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT=${JSON_RESULT:: ${# JSON_RESULT} -1} && JSON_RESULT+=' ]'
536
569
fi
537
570
fi
538
571
@@ -641,6 +674,9 @@ function launch_iperf {
641
674
[[ -z $IPERF_RECVRESULT_VAL || " $IPERF_RECVRESULT_VAL " == * " 0.00" * ]] && IPERF_RECVRESULT_VAL=" busy" && IPERF_RECVRESULT_UNIT=" "
642
675
# print the speed results for the iperf location currently being evaluated
643
676
printf " %-15s | %-25s | %-15s | %-15s\n" " ${IPERF_LOCS[i*5+2]} " " ${IPERF_LOCS[i*5+3]} " " $IPERF_SENDRESULT_VAL $IPERF_SENDRESULT_UNIT " " $IPERF_RECVRESULT_VAL $IPERF_RECVRESULT_UNIT "
677
+ if [ ! -z $JSON_SEND ]; then
678
+ JSON_RESULT+=' ["' $MODE ' ","' ${IPERF_LOCS[i*5+2]} ' ","' ${IPERF_LOCS[i*5+3]} ' ","' $IPERF_SENDRESULT_VAL ' ' $IPERF_SENDRESULT_UNIT ' ","' $IPERF_RECVRESULT_VAL ' ' $IPERF_RECVRESULT_UNIT ' "],'
679
+ fi
644
680
fi
645
681
done
646
682
}
@@ -704,10 +740,12 @@ if [ -z "$SKIP_IPERF" ]; then
704
740
IPERF_LOCS_NUM=$(( IPERF_LOCS_NUM / 5 ))
705
741
706
742
if [ -z " $IPERF_DL_FAIL " ]; then
743
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT+=' ,"iperf":['
707
744
# check if the host has IPv4 connectivity, if so, run iperf3 IPv4 tests
708
745
[ ! -z " $IPV4_CHECK " ] && launch_iperf " IPv4"
709
746
# check if the host has IPv6 connectivity, if so, run iperf3 IPv6 tests
710
747
[ ! -z " $IPV6_CHECK " ] && launch_iperf " IPv6"
748
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT=${JSON_RESULT:: ${# JSON_RESULT} -1} && JSON_RESULT+=' ]'
711
749
else
712
750
echo -e " \niperf3 binary download failed. Skipping iperf network tests..."
713
751
fi
@@ -809,25 +847,42 @@ function launch_geekbench {
809
847
printf " %-15s | %-30s\n" " Multi Core" " $GEEKBENCH_SCORES_MULTI "
810
848
printf " %-15s | %-30s\n" " Full Test" " $GEEKBENCH_URL "
811
849
850
+ if [ ! -z $JSON_SEND ]; then
851
+ JSON_RESULT+=' [' $VERSION ' ,' $GEEKBENCH_SCORES_SINGLE ' ,' $GEEKBENCH_SCORES_MULTI ' ,"' $GEEKBENCH_URL ' "],'
852
+ fi
853
+
812
854
# write the geekbench claim URL to a file so the user can add the results to their profile (if desired)
813
855
[ ! -z " $GEEKBENCH_URL_CLAIM " ] && echo -e " $GEEKBENCH_URL_CLAIM " >> geekbench_claim.url 2> /dev/null
814
856
fi
815
857
}
816
858
817
859
# if the skip geekbench flag was set, skip the system performance test, otherwise test system performance
818
860
if [ -z " $SKIP_GEEKBENCH " ]; then
861
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT+=' ,"geekbench":['
819
862
if [[ $GEEKBENCH_4 == * True* ]]; then
820
863
launch_geekbench 4
821
864
fi
822
865
823
866
if [[ $GEEKBENCH_5 == * True* ]]; then
824
867
launch_geekbench 5
825
868
fi
869
+ [[ ! -z $JSON_SEND ]] && JSON_RESULT=${JSON_RESULT:: ${# JSON_RESULT} -1} && JSON_RESULT+=' ]'
826
870
fi
827
871
828
872
# finished all tests, clean up all YABS files and exit
829
873
echo -e
830
874
rm -rf $YABS_PATH
831
875
876
+ # send json results
877
+ if [ ! -z $JSON_SEND ]; then
878
+ JSON_RESULT+=' }'
879
+
880
+ if [[ ! -z $LOCAL_CURL ]]; then
881
+ curl -s -H " Content-Type:application/json" -X POST --data ' ' " $JSON_RESULT " ' ' $JSON_SEND
882
+ else
883
+ wget -qO- --post-data=' ' " $JSON_RESULT " ' ' --header=' Content-Type:application/json' $JSON_SEND
884
+ fi
885
+ fi
886
+
832
887
# reset locale settings
833
888
unset LC_ALL
0 commit comments