mirror of
https://github.com/masonr/yet-another-bench-script.git
synced 2026-07-10 23:42:39 +08:00
Compare commits
6 Commits
873f780055
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d20bd9b05 | ||
|
|
3474d82f83 | ||
|
|
6ea1d66e0f | ||
|
|
3125fedff1 | ||
|
|
97b5ec226f | ||
|
|
d79e781ca3 |
13
README.md
13
README.md
@@ -7,15 +7,17 @@ Logo design by [Dian Pratama](https://github.com/dianp)
|
||||
|
||||
This script automates the execution of the best benchmarking tools in the industry. Included are several tests to check the performance of critical areas of a server: disk performance with [fio](https://github.com/axboe/fio), network performance with [iperf3](https://github.com/esnet/iperf), and CPU/memory performance with [Geekbench](https://www.geekbench.com/). The script is designed to not require any external dependencies to be installed nor elevated privileges to run. If there are any features that you would like to see added, feel free to submit an issue describing your feature request or fork the project and submit a PR!
|
||||
|
||||
View Daily and Historical 📊 **[YABS Usage Stats Here](https://stats.yabs.sh/)** 📈 ([source](https://github.com/masonr/yabs-stats)).
|
||||
|
||||
### **What's New With YABS?**
|
||||
* [04 Jul 2026](https://stats.yabs.sh/) - Check out YABS usage stats here -> https://stats.yabs.sh/
|
||||
* [27 Feb 2023](https://github.com/masonr/yet-another-bench-script/commit/06eaa2ab3b32355bec8278c51c4be93b3662a96d) - Newly released [Geekbench 6](https://www.geekbench.com/) is added as the default Geekbench test.
|
||||
* [26 Feb 2023](https://github.com/masonr/yet-another-bench-script/commit/f075baf59c3057983fff0a30ea0c746b5ea88d91) - Network information added to YABS output using [ip-api](https://ip-api.com/).
|
||||
* [15 Aug 2022](https://github.com/masonr/yet-another-bench-script/commit/ae24e70fbf7a4848e81a70cf829ec44e060e63d5) - Added JSON output/upload support to export or auto-upload of YABS results for sharing.
|
||||
|
||||
## How to Run
|
||||
|
||||
```
|
||||
curl -sL https://yabs.sh | bash
|
||||
curl -sL yabs.sh | bash
|
||||
```
|
||||
|
||||
or
|
||||
@@ -35,7 +37,7 @@ wget -qO- yabs.sh | bash
|
||||
### Flags (Skipping Tests, Reducing iperf Locations, Geekbench 4/5/6, etc.)
|
||||
|
||||
```
|
||||
curl -sL https://yabs.sh | bash -s -- -flags
|
||||
curl -sL yabs.sh | bash -s -- -flags
|
||||
```
|
||||
|
||||
| Flag | Description |
|
||||
@@ -73,8 +75,9 @@ Sites supporting submission of YABS JSON results:
|
||||
|
||||
| Website | Example Command |
|
||||
| --- | --- |
|
||||
| [YABSdb](https://yabsdb.com/) | `curl -sL https://yabs.sh \| bash -s -- -s "https://yabsdb.com/add"` |
|
||||
| [VPSBenchmarks](https://www.vpsbenchmarks.com/yabs/get_started) | `curl -sL https://yabs.sh \| bash -s -- -s https://www.vpsbenchmarks.com/yabs/upload` |
|
||||
| [YABSdb](https://yabsdb.com/) | `curl -sL yabs.sh \| bash -s -- -s "https://yabsdb.com/add"` |
|
||||
| [VPSBenchmarks](https://www.vpsbenchmarks.com/yabs/get_started) | `curl -sL yabs.sh \| bash -s -- -s https://www.vpsbenchmarks.com/yabs/upload` |
|
||||
| [ServerVerify](https://serververify.com/benchmarks) | (sign up for account) |
|
||||
|
||||
Example JSON output: [example.json](bin/example.json).
|
||||
|
||||
|
||||
41
yabs.sh
41
yabs.sh
@@ -1,7 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Yet Another Bench Script by Mason Rowe
|
||||
# Initial Oct 2019; Last update May 2026
|
||||
# Initial Oct 2019; Last update Jul 2026
|
||||
|
||||
# Disclaimer: This project is a work in progress. Any errors or suggestions should be
|
||||
# relayed to me via the GitHub project page linked below.
|
||||
@@ -12,7 +12,7 @@
|
||||
# performance via fio. The script is designed to not require any dependencies
|
||||
# - either compiled or installed - nor admin privileges to run.
|
||||
|
||||
YABS_VERSION="v2026-05-11"
|
||||
YABS_VERSION="v2026-07-03"
|
||||
|
||||
echo -e '# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #'
|
||||
echo -e '# Yet-Another-Bench-Script #'
|
||||
@@ -235,7 +235,7 @@ function format_size {
|
||||
echo -e
|
||||
echo -e "Basic System Information:"
|
||||
echo -e "---------------------------------"
|
||||
UPTIME=$(uptime | awk -F'( |,|:)+' '{d=h=m=0; if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6;h=$8;m=$9} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes"}')
|
||||
UPTIME=$(uptime | awk -F'( |,|:)+' '{d=h=m=0; if ($7=="min") m=$6; else {if ($7~/^day/) {d=$6; if ($9~/^min/) m=$8; else {h=$8;m=$9}} else {h=$6;m=$7}}} {print d+0,"days,",h+0,"hours,",m+0,"minutes"}')
|
||||
echo -e "Uptime : $UPTIME"
|
||||
# check for local lscpu installs
|
||||
if command -v lscpu >/dev/null 2>&1; then
|
||||
@@ -383,16 +383,18 @@ function catch_abort() {
|
||||
|
||||
# format_speed
|
||||
# Purpose: This method is a convenience function to format the output of the fio disk tests which
|
||||
# always returns a result in KB/s. If result is >= 1 GB/s, use GB/s. If result is < 1 GB/s
|
||||
# and >= 1 MB/s, then use MB/s. Otherwise, use KB/s.
|
||||
# always returns a result in KiB/s (fio terse v3 bandwidth fields are always KiB/s regardless
|
||||
# of --kb_base setting). Converts KiB/s to decimal units (KB/s, MB/s, GB/s) for display.
|
||||
# Conversion: multiply KiB/s by 1024 to get bytes/s, then divide by 1000, 1000000, or
|
||||
# 1000000000 to get KB/s, MB/s, or GB/s respectively.
|
||||
# Thresholds (in KiB/s): >= 976563 -> GB/s, >= 977 -> MB/s, otherwise -> KB/s
|
||||
# Parameters:
|
||||
# 1. RAW - the raw disk speed result (in KB/s)
|
||||
# 1. RAW - the raw disk speed result (in KiB/s)
|
||||
# Returns:
|
||||
# Formatted disk speed in GB/s, MB/s, or KB/s
|
||||
function format_speed {
|
||||
RAW=$1 # disk speed in KB/s
|
||||
RAW=$1 # disk speed in KiB/s
|
||||
RESULT=$RAW
|
||||
local DENOM=1
|
||||
local UNIT="KB/s"
|
||||
|
||||
# ensure raw value is not null, if it is, return blank
|
||||
@@ -401,18 +403,19 @@ function format_speed {
|
||||
return 0
|
||||
fi
|
||||
|
||||
# check if disk speed >= 1 GB/s
|
||||
if [ "$RAW" -ge 1000000 ]; then
|
||||
DENOM=1000000
|
||||
# check if disk speed >= 1 GB/s (976563 KiB/s = 1,000,000,000 bytes/s)
|
||||
if [ "$RAW" -ge 976563 ]; then
|
||||
UNIT="GB/s"
|
||||
# check if disk speed < 1 GB/s && >= 1 MB/s
|
||||
elif [ "$RAW" -ge 1000 ]; then
|
||||
DENOM=1000
|
||||
RESULT=$(awk -v a="$RAW" 'BEGIN { print a * 1024 / 1000000000 }')
|
||||
# check if disk speed >= 1 MB/s (977 KiB/s ~ 1,000,000 bytes/s)
|
||||
elif [ "$RAW" -ge 977 ]; then
|
||||
UNIT="MB/s"
|
||||
RESULT=$(awk -v a="$RAW" 'BEGIN { print a * 1024 / 1000000 }')
|
||||
else
|
||||
# convert KiB/s to KB/s (multiply by 1.024)
|
||||
RESULT=$(awk -v a="$RAW" 'BEGIN { print a * 1024 / 1000 }')
|
||||
fi
|
||||
|
||||
# divide the raw result to get the corresponding formatted result (based on determined unit)
|
||||
RESULT=$(awk -v a="$RESULT" -v b="$DENOM" 'BEGIN { print a / b }')
|
||||
# shorten the formatted result to two decimal places (i.e. x.xx)
|
||||
RESULT=$(echo "$RESULT" | awk -F. '{ printf "%0.2f",$1"."substr($2,1,2) }')
|
||||
# concat formatted result value with units and return result
|
||||
@@ -569,9 +572,9 @@ elif [ -z "$SKIP_FIO" ]; then
|
||||
# Proceed only if a relevant ZFS path was found
|
||||
if [[ -n "$long" ]]; then
|
||||
# Get the 'Avail' space directly for the detected path and explicitly for ZFS type
|
||||
# The 'Avail' column is the 4th field in `df -Th` output
|
||||
# The 'Avail' column is the 5th field in `df -Th` output (-T adds a Type column, shifting fields right)
|
||||
# Example: '7.3T', '104G', '17G'
|
||||
avail_space_with_unit=$(df -Th | grep -w "$long" | awk '$2 == "zfs" {print $4; exit}')
|
||||
avail_space_with_unit=$(df -Th | grep -w "$long" | awk '$2 == "zfs" {print $5; exit}')
|
||||
|
||||
# If a valid free space value was extracted
|
||||
if [[ -n "$avail_space_with_unit" ]]; then
|
||||
@@ -798,7 +801,7 @@ function iperf_test {
|
||||
done
|
||||
|
||||
# Run a latency test via ping -c1 command -> will return "xx.x ms"
|
||||
[[ -n $LOCAL_PING ]] && LATENCY_RUN="$(ping -c1 "$URL" 2>/dev/null | grep -o 'time=.*' | sed s/'time='//)"
|
||||
[[ -n $LOCAL_PING ]] && LATENCY_RUN="$(ping "$FLAGS" -c1 "$URL" 2>/dev/null | grep -o 'time=.*' | sed 's/time=//')"
|
||||
[[ -z $LATENCY_RUN ]] && LATENCY_RUN="--"
|
||||
|
||||
# parse the resulting send and receive speed results
|
||||
|
||||
Reference in New Issue
Block a user