mirror of
https://github.com/sunknudsen/privacy-guides.git
synced 2025-02-23 09:13:56 +00:00
Added Bitcoin computation benchmarking guide
This commit is contained in:
parent
ee081f398e
commit
6b49e6747f
@ -0,0 +1,102 @@
|
|||||||
|
<!--
|
||||||
|
Title: How to benchmark computer for Bitcoin computation
|
||||||
|
Description: Learn how to benchmark computer for Bitcoin computation.
|
||||||
|
Author: Sun Knudsen <https://github.com/sunknudsen>
|
||||||
|
Contributors: Sun Knudsen <https://github.com/sunknudsen>
|
||||||
|
Reviewers:
|
||||||
|
Publication date: 2022-03-17T10:31:44.202Z
|
||||||
|
Listed: true
|
||||||
|
-->
|
||||||
|
|
||||||
|
# How to benchmark computer performance
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
- Linux computer running Debian-based operating system
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
- When copy/pasting commands that start with `$`, strip out `$` as this character is not part of the command
|
||||||
|
|
||||||
|
## Guide
|
||||||
|
|
||||||
|
### Step 1: install dependencies
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ sudo apt update
|
||||||
|
|
||||||
|
$ sudo apt install -y bc curl openssl sysbench
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 2: download (and optionally verify) [benchmark.sh](./benchmark.sh) ([PGP signature](./benchmark.sh.asc), [PGP public key](https://sunknudsen.com/sunknudsen.asc))
|
||||||
|
|
||||||
|
```shell
|
||||||
|
curl --fail --output $HOME/benchmark.sh https://raw.githubusercontent.com/sunknudsen/privacy-guides/master/how-to-self-host-hardened-bitcoin-node/misc/how-to-benchmark-computer-for-bitcoin-computation/benchmark.sh
|
||||||
|
chmod +x $HOME/benchmark.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 3: run benchmark.sh
|
||||||
|
|
||||||
|
> Heads-up: benchmark should take between 5 and 10 minutes, but can take longer on slower hardware.
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ $HOME/benchmark.sh
|
||||||
|
Initiating…
|
||||||
|
Do you confirm model of disk on which “/home/sun/test-7d82aa” is stored is “Samsung SSD 970 EVO Plus 1TB” (y or n)?
|
||||||
|
y
|
||||||
|
Benchmarking SHA256 computing…
|
||||||
|
Benchmarking CPU…
|
||||||
|
Benchmarking memory…
|
||||||
|
Preparing sysbench fileio dataset…
|
||||||
|
Benchmarking disk using 16K block size…
|
||||||
|
Benchmarking disk using 1M block size…
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
openssl value in thousands of bytes processed per second
|
||||||
|
sysbench_cpu value in events per second
|
||||||
|
sysbench_memory, sysbench_disk_prepare and sysbench_disk_rndrw values in MiB per second
|
||||||
|
score value in times faster than Raspberry Pi 4 4GB with Samsung T7 Touch SSD 1TB
|
||||||
|
|
||||||
|
{
|
||||||
|
"disk_model": "Samsung SSD 970 EVO Plus 1TB",
|
||||||
|
"disk_transport": "nvme",
|
||||||
|
"cpu_model": "Intel(R) Core(TM) i5-6500T CPU @ 2.50GHz",
|
||||||
|
"openssl": "1450665.57",
|
||||||
|
"sysbench_cpu": "3810.87",
|
||||||
|
"sysbench_memory": "8488.63",
|
||||||
|
"sysbench_disk_prepare": "892.94",
|
||||||
|
"sysbench_disk_rndrw": {
|
||||||
|
"16k_read": "15.90",
|
||||||
|
"16k_write": "10.60",
|
||||||
|
"1m_read": "669.23",
|
||||||
|
"1m_write": "445.99"
|
||||||
|
},
|
||||||
|
"score": "10.05"
|
||||||
|
}
|
||||||
|
|
||||||
|
Done
|
||||||
|
```
|
||||||
|
|
||||||
|
### Step 4 (optional): publish JSON code block to GitHub discussion
|
||||||
|
|
||||||
|
Go to https://github.com/sunknudsen/privacy-guides/discussions/220 and publish JSON code block as comment.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"disk_model": "Samsung SSD 970 EVO Plus 1TB",
|
||||||
|
"disk_transport": "nvme",
|
||||||
|
"cpu_model": "Intel(R) Core(TM) i5-6500T CPU @ 2.50GHz",
|
||||||
|
"openssl": "1450665.57",
|
||||||
|
"sysbench_cpu": "3810.87",
|
||||||
|
"sysbench_memory": "8488.63",
|
||||||
|
"sysbench_disk_prepare": "892.94",
|
||||||
|
"sysbench_disk_rndrw": {
|
||||||
|
"16k_read": "15.90",
|
||||||
|
"16k_write": "10.60",
|
||||||
|
"1m_read": "669.23",
|
||||||
|
"1m_write": "445.99"
|
||||||
|
},
|
||||||
|
"score": "10.05"
|
||||||
|
}
|
||||||
|
```
|
@ -0,0 +1,99 @@
|
|||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Raspberry Pi 4 4GB with Samsung T7 Touch SSD 1TB baseline
|
||||||
|
pi_openssl=570573.74
|
||||||
|
pi_sysbench_cpu=5958.54
|
||||||
|
pi_sysbench_memory=7276.50
|
||||||
|
pi_sysbench_disk_prepare=96.97
|
||||||
|
pi_sysbench_disk_16k_rndrw_read=6.27
|
||||||
|
pi_sysbench_disk_16k_rndrw_write=4.18
|
||||||
|
pi_sysbench_disk_1m_rndrw_read=104.76
|
||||||
|
pi_sysbench_disk_1m_rndrw_write=69.68
|
||||||
|
|
||||||
|
dir="./test-$(openssl rand -hex 3)"
|
||||||
|
mkdir $dir
|
||||||
|
cd $dir
|
||||||
|
|
||||||
|
path=$(realpath .)
|
||||||
|
|
||||||
|
printf "%s\n" "Initiating…"
|
||||||
|
|
||||||
|
disk=$(lsblk --output MOUNTPOINT,PKNAME | grep '^/boot' | awk 'END {print $2}' | awk '{$1=$1};1')
|
||||||
|
disk_model=$(lsblk --nodeps --output NAME,MODEL | grep $disk | awk '{$1=""; print $0}' | awk '{$1=$1};1')
|
||||||
|
disk_transport=$(lsblk --nodeps --output NAME,TRAN | grep $disk | awk '{print $2}' | awk '{$1=$1};1')
|
||||||
|
|
||||||
|
printf "$bold%s$normal\n" "Do you confirm model of disk on which “$path” is stored is “$disk_model” (y or n)?"
|
||||||
|
|
||||||
|
read -r answer
|
||||||
|
if [ "$answer" != "y" ]; then
|
||||||
|
printf "$bold%s$normal\n" "Please enter name of disk on which “$path” is stored (example: nvme0n1)?"
|
||||||
|
|
||||||
|
read -r disk
|
||||||
|
|
||||||
|
disk_model=$(lsblk --nodeps --output NAME,MODEL | grep $disk | awk '{$1=""; print $0}' | awk '{$1=$1};1')
|
||||||
|
disk_transport=$(lsblk --nodeps --output NAME,TRAN | grep $disk | awk '{print $2}' | awk '{$1=$1};1')
|
||||||
|
fi
|
||||||
|
|
||||||
|
cpu_model=$(lscpu | grep 'Model name:' | sed --regexp-extended 's/Model name:\s+//g')
|
||||||
|
|
||||||
|
printf "%s\n" "Benchmarking SHA256 computing…"
|
||||||
|
|
||||||
|
openssl=$(openssl speed -multi $(nproc) -seconds 20 sha256 2> /dev/null | awk 'END {print $(NF)}' | sed --regexp-extended 's/k//g')
|
||||||
|
|
||||||
|
printf "%s\n" "Benchmarking CPU…"
|
||||||
|
|
||||||
|
sysbench_cpu=$(sysbench cpu --threads=$(nproc) --time=300 run | grep 'events per second:' | awk '{print $4}')
|
||||||
|
|
||||||
|
printf "%s\n" "Benchmarking memory…"
|
||||||
|
|
||||||
|
sysbench_memory=$(sysbench memory --threads=$(nproc) run | grep 'MiB transferred' | sed --regexp-extended --quiet 's/.+\(([0-9.]+).+/\1/p')
|
||||||
|
|
||||||
|
printf "%s\n" "Preparing sysbench fileio dataset…"
|
||||||
|
|
||||||
|
sysbench_disk_prepare=$(sysbench fileio --file-total-size=8G prepare | sed '$!d' | sed --regexp-extended --quiet 's/.+\(([0-9.]+).+/\1/p')
|
||||||
|
|
||||||
|
printf "%s\n" "Benchmarking disk using 16K block size…"
|
||||||
|
|
||||||
|
sysbench_disk_16k_rndrw_raw=$(sysbench fileio --file-block-size=16K --file-total-size=8G --file-test-mode=rndrw --threads=$(nproc) run)
|
||||||
|
sysbench_disk_16k_rndrw_read=$(echo "$sysbench_disk_16k_rndrw_raw" | grep 'read, MiB/s:' | awk '{print $3}')
|
||||||
|
sysbench_disk_16k_rndrw_write=$(echo "$sysbench_disk_16k_rndrw_raw" | grep 'written, MiB/s:' | awk '{print $3}')
|
||||||
|
|
||||||
|
printf "%s\n" "Benchmarking disk using 1M block size…"
|
||||||
|
|
||||||
|
sysbench_disk_1m_rndrw_raw=$(sysbench fileio --file-block-size=1M --file-total-size=8G --file-test-mode=rndrw --threads=$(nproc) run)
|
||||||
|
sysbench_disk_1m_rndrw_read=$(echo "$sysbench_disk_1m_rndrw_raw" | grep 'read, MiB/s:' | awk '{print $3}')
|
||||||
|
sysbench_disk_1m_rndrw_write=$(echo "$sysbench_disk_1m_rndrw_raw" | grep 'written, MiB/s:' | awk '{print $3}')
|
||||||
|
|
||||||
|
score=$(printf %.2f $(echo "(($openssl/$pi_openssl+$sysbench_cpu/$pi_sysbench_cpu)/2)*($sysbench_memory/$pi_sysbench_memory)*(($sysbench_disk_prepare/$pi_sysbench_disk_prepare+$sysbench_disk_16k_rndrw_read/$pi_sysbench_disk_16k_rndrw_read+$sysbench_disk_16k_rndrw_write/$pi_sysbench_disk_16k_rndrw_write+$sysbench_disk_1m_rndrw_read/$pi_sysbench_disk_1m_rndrw_read+$sysbench_disk_1m_rndrw_write/$pi_sysbench_disk_1m_rndrw_write)/5)" | bc --mathlib))
|
||||||
|
|
||||||
|
cat << EOF | tee result.txt
|
||||||
|
|
||||||
|
Result:
|
||||||
|
|
||||||
|
openssl value in thousands of bytes processed per second
|
||||||
|
sysbench_cpu value in events per second
|
||||||
|
sysbench_memory, sysbench_disk_prepare and sysbench_disk_rndrw values in MiB per second
|
||||||
|
score value in times faster than Raspberry Pi 4 4GB with Samsung T7 Touch SSD 1TB
|
||||||
|
|
||||||
|
{
|
||||||
|
"disk_model": "$disk_model",
|
||||||
|
"disk_transport": "$disk_transport",
|
||||||
|
"cpu_model": "$cpu_model",
|
||||||
|
"openssl": "${openssl}",
|
||||||
|
"sysbench_cpu": "$sysbench_cpu",
|
||||||
|
"sysbench_memory": "$sysbench_memory",
|
||||||
|
"sysbench_disk_prepare": "$sysbench_disk_prepare",
|
||||||
|
"sysbench_disk_rndrw": {
|
||||||
|
"16k_read": "$sysbench_disk_16k_rndrw_read",
|
||||||
|
"16k_write": "$sysbench_disk_16k_rndrw_write",
|
||||||
|
"1m_read": "$sysbench_disk_1m_rndrw_read",
|
||||||
|
"1m_write": "$sysbench_disk_1m_rndrw_write"
|
||||||
|
},
|
||||||
|
"score": "$score"
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
printf "%s\n" "Done"
|
@ -0,0 +1,7 @@
|
|||||||
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
|
iHUEABYKAB0WIQSceIfhtfy84t/tDhwCxDrQctV3gwUCYjShfgAKCRACxDrQctV3
|
||||||
|
gz/RAQDTyOPFdR2MW9TN0aWTppIvulMk8Dx2X4iiEmak8x7o9AEAtD9FcUafdYrB
|
||||||
|
v7A9d9RaU0Si2q3bXiJRSQuYuQkX1gs=
|
||||||
|
=4rRp
|
||||||
|
-----END PGP SIGNATURE-----
|
Loading…
x
Reference in New Issue
Block a user