Skip to content

Commit

Permalink
Allow for DVFS stability checking via Linpack/OpenBLAS
Browse files Browse the repository at this point in the history
  • Loading branch information
ThomasKaiser committed Mar 18, 2024
1 parent e46dbd5 commit 8183b18
Show file tree
Hide file tree
Showing 17 changed files with 1,010 additions and 25 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ As with cpuminer this test is optional (`sbc-bench -s` or `MODE=extensive` neede

### [7-zip](https://www.7-cpu.com)

7-zip's internal benchmark mode is a pretty good representation of 'server workloads in general'. When running on all cores in parallel it doesn't utilize CPU cores fully (at least not on ARM, on x64 with Hyperthreading it's a different story), it depends somewhat on memory performance (low latency more important than high bandwidth) and amount of available memory. When running fully parallel on systems that have many cores but are low on memory we see just as in reality the kernel either killing processes due to 'out of memory' or starting to swap if configured.
7-zip's internal benchmark mode is a pretty good representation of 'server workloads in general'. When running on all cores in parallel it doesn't utilize CPU cores fully (at least not on ARM SBC, on x86_64 with Hyperthreading and performant memory controllers it's a different story), it depends somewhat on memory performance (low latency more important than high bandwidth) and amount of available memory. When running fully parallel on systems that have many cores but are low on memory we see just as in reality the kernel either killing processes due to 'out of memory' or starting to swap if configured.

On big.LITTLE systems we start with one run pinned to a little core followed by one pinned to a big core. Then follow 3 consecutive runs using all available cores. The results might look like this:

Expand All @@ -164,6 +164,7 @@ If those 7-zip MIPS apply only to a few selected use cases as performance indica
* Also the benchmark is not known to perform completely different when built for ARMv6, ARMv7 oder ARMv8 (the infamous `sysbench cpu` benchmark on the other hand ['performs' 10-15 times better on a 64-bit Raspbian](https://forums.raspberrypi.com/viewtopic.php?p=1536679&sid=8ddda8e0d980ef2fdf495f176a92c1ec#p1536679) which is _not_ related to 64-bit vs. 32-bit but just due to ARMv8 ISA having a `divide` instruction)
* To be able to get comparable scores spanning different years/libs/compilers submitted results are cherry picked to ensure 7-zip version being 16.02 or lower since [on some platforms more recent 7-zip versions perform way better](https://github.com/ThomasKaiser/sbc-bench/issues/81). Starting with v0.9.64 sbc-bench tries to build p7zip 16.02 when a higher version is detected.
* Unlike many other kitchen-sink benchmarks RAM access / memory performance matters (`sysbench cpu` for example runs completely inside CPU caches). With this benchmark it's easy to spot memory performance issues like [this](https://github.com/armbian/build/issues/1744) (after switching bootloaders DDR4 RAM got clocked with just 333 instead of the former 1056 MHz). It's one of the 'cheapest' tools for regression testing but unfortunately not widely used there
* 7-zip allows to spot different thermal throttling strategies for example [throttling the memory controller instead of or in addition to CPU cores on certain platforms](https://www.cnx-software.com/2024/03/09/minix-z100-0db-review-fanless-intel-n100-mini-pc-ubuntu-22-04/#comment-616408)
* the multi-core test is also nice to spot internal CPU/SoC bottlenecks and/or scheduler improvements

A good example for the latter is Odroid XU4, three times tested with different kernel and OS versions (Stretch, Bionic and Focal which all build packages with different GCC versions). Memory performance remained the same (for a way to quickly check this see [included script snippets](results/.snippets-for-insights.sh)) but for whatever reasons only the *multi-threaded* performance fluctuated over time:
Expand Down
1 change: 1 addition & 0 deletions Results.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ So do **not** rely on collected numbers unless you carefully read through all th
| [Raspberry Pi 400 (BCM2711)](results/2Cyi.txt) | 1800 MHz | 5.4 | Raspberry Pi OS Buster | 6550 | 1903 | 77890 | 2680 | 3110 | - |
| [Raspberry Pi 5 B (BCM2712)](results/Au3jaA.txt) | 2400 MHz | 6.1 | Bookworm arm64 | 11010 | 3196 | 1367740 | 5270 | 14060 | 15.39 |
| [Raspberry Pi 5 B (BCM2712)](results/8acvqG.txt) | 3000 MHz | 6.1 | Bookworm arm64 | 12930 | 3791 | 1709720 | 5160 | 16350 | 19.25 |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | 13400 | 3900 | 1709400 | 5900 | 17290 | 19.28 |
| [Renegade (RK3328)](results/1iFx.txt) | 1400 MHz | 4.4 | Stretch arm64 | 3710 | 1069 | 644200 | 1565 | 7435 | 3.92 |
| [RK3228A TV Box](results/3M9F.txt) | 1200 MHz | 4.4 | Buster armhf | 2310 | 710 | 23070 | 410 | 1230 | - |
| [RK3568-ROC-PC](results/3Rsg.txt) | 1960 MHz | 4.19 | Bullseye arm64 | 5040 | 1424 | 912800 | 3130 | 6240 | - |
Expand Down
6 changes: 6 additions & 0 deletions Sorted-Results.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
| [Intel N100](results/4vxM.txt) | 3400 MHz | 6.1 | Lunar amd64 | **14150** | 4073 | 1232790 | 11600 | 12270 | 36.24 |
| [AMD Seattle (Opteron A1100)](results/4Kqn.txt) | 2000 MHz | 4.15 | Bionic arm64 | **14080** | 2006 | 720710 | 3020 | 9530 | - |
| [Jetson Orin Nano](results/4vy7.txt) | 1510 MHz | 5.10 | Focal arm64 | **13650** | 2153 | 854400 | 6730 | 20240 | 20.68 |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | **13400** | 3900 | 1709400 | 5900 | 17290 | 19.28 |
| [Jetson Xavier NX](results/3YWp.txt) | 1890 MHz | 4.9 | Bionic arm64 | **13230** | 2201 | 706280 | 9190 | 18480 | - |
| [Intel N95](results/4xwq.txt) | 3400 MHz | 5.15 | Jammy amd64 | **13070** | 3993 | 1232880 | 9710 | 8730 | 34.60 |
| [Qualcomm Snapdragon 7c](results/4Lyf.txt) | 2550/1800 MHz | 6.6 | Bookworm arm64 | **13040** | 3113 | 1455700 | 6710 | 14880 | - |
Expand Down Expand Up @@ -250,6 +251,7 @@
| [Huaqin P6410<br />(2 x Ampere Altra Max)](results/4kiu.txt) | 3000 MHz | 5.4 | Focal arm64 | 430860 | **4211** | 1710010 | 13310 | 47970 | - |
| [Intel N100](results/4vxM.txt) | 3400 MHz | 6.1 | Lunar amd64 | 14150 | **4073** | 1232790 | 11600 | 12270 | 36.24 |
| [Intel N95](results/4xwq.txt) | 3400 MHz | 5.15 | Jammy amd64 | 13070 | **3993** | 1232880 | 9710 | 8730 | 34.60 |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | 13400 | **3900** | 1709400 | 5900 | 17290 | 19.28 |
| [Qualcomm QRB5165](results/49kx.txt) | 2840/2410/1790 MHz | 4.19 | Focal arm64 | 18860 | **3898** | 1598490 | 14470 | 23910 | 25.56 |
| [Ampere Altra M96-28](results/4zGI.txt) | 2800 MHz | 5.15 | Jammy arm64 | 249380 | **3858** | 1596110 | 10130 | 44750 | - |
| [Hetzner CAX11 (Ampere Altra)](results/4HdL.txt) | 3000 MHz | 5.15 | Jammy arm64 | 8060 | **3842** | 1705600 | 11250 | 47670 | 11.44 |
Expand Down Expand Up @@ -475,6 +477,7 @@
| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |
| [Huaqin P6410<br />(2 x Ampere Altra Max)](results/4kiu.txt) | 3000 MHz | 5.4 | Focal arm64 | 430860 | 4211 | **1710010** | 13310 | 47970 | - |
| [Raspberry Pi 5 B (BCM2712)](results/8acvqG.txt) | 3000 MHz | 6.1 | Bookworm arm64 | 12930 | 3791 | **1709720** | 5160 | 16350 | 19.25 |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | 13400 | 3900 | **1709400** | 5900 | 17290 | 19.28 |
| [Hetzner CAX11 (Ampere Altra)](results/4HdL.txt) | 3000 MHz | 5.15 | Jammy arm64 | 8060 | 3842 | **1705600** | 11250 | 47670 | 11.44 |
| [Qualcomm Snapdragon 8cx Gen 3](results/4xwT.txt) | 3000/2440 MHz | 6.3 | Lunar arm64 | 35370 | 4312 | **1686160** | 17500 | 41780 | 42.76 |
| [Qualcomm Snapdragon 8cx Gen 3 (WSL2)](results/4kEp.txt) | 2980/? MHz | 5.15 | Jammy arm64 | 33600 | 4789 | **1679480** | 21010 | 41540 | 50.65 |
Expand Down Expand Up @@ -734,6 +737,7 @@
| [Loongson-3A5000-HV](results/4dzX.txt) | 2500 MHz | 4.19 | Loongnix 20 loongarch64 | 11120 | 2990 | 116900 | **6930** | 19170 | - |
| [Jetson Orin Nano](results/4vy7.txt) | 1510 MHz | 5.10 | Focal arm64 | 13650 | 2153 | 854400 | **6730** | 20240 | 20.68 |
| [Qualcomm Snapdragon 7c](results/4Lyf.txt) | 2550/1800 MHz | 6.6 | Bookworm arm64 | 13040 | 3113 | 1455700 | **6710** | 14880 | - |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | 13400 | 3900 | 1709400 | **5900** | 17290 | 19.28 |
| [Celeron J4105](results/1qb0.txt) | 2400/1500 MHz | 4.15 | Bionic amd64 | 8960 | 2274 | 697080 | **5620** | 7650 | 19.13 |
| [Pentium J5005](results/21rE.txt) | 2700/1500 MHz | 5.0 | Bionic amd64 | 9230 | 2455 | 778360 | **5530** | 7130 | 20.74 |
| [Celeron J4105](results/1qal.txt) | 2400/1500 MHz | 4.15 | Bionic amd64 | 9020 | 2290 | 697100 | **5500** | 7410 | 19.07 |
Expand Down Expand Up @@ -949,6 +953,7 @@
| [Loongson-3A5000-HV](results/4dzX.txt) | 2500 MHz | 4.19 | Loongnix 20 loongarch64 | 11120 | 2990 | 116900 | 6930 | **19170** | - |
| [MT8395 Genio 1200](results/4Kvg.txt) | 2200/2000 MHz | 5.15 | Jammy arm64 | 18130 | 3298 | 1240850 | 14200 | **19000** | 27.60 |
| [Jetson Xavier NX](results/3YWp.txt) | 1890 MHz | 4.9 | Bionic arm64 | 13230 | 2201 | 706280 | 9190 | **18480** | - |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | 3000 MHz | 6.6 | Bookworm arm64 | 13400 | 3900 | 1709400 | 5900 | **17290** | 19.28 |
| [H270-T70<br />(2 x ThunderX CN8890)](results/3N5c.txt) | 2000 Mhz | 5.16 | Sid arm64 | 107180 | 1826 | 340750 | 4180 | **17130** | - |
| [Raspberry Pi 5 B (BCM2712)](results/8acvqG.txt) | 3000 MHz | 6.1 | Bookworm arm64 | 12930 | 3791 | 1709720 | 5160 | **16350** | 19.25 |
| [Honeycomb LX2 (NXP LX2160A)](results/3Y4f.txt) | 2200 MHz | 5.16 | Fedora 35 aarch64 | 30690 | 2288 | 1251710 | 5050 | **16220** | 46.09 |
Expand Down Expand Up @@ -1167,6 +1172,7 @@
| [Pentium N6005](results/4BtC.txt) | **3300/2000** MHz| 5.15 | Jammy amd64 | 11510 | 3369 | 923550 | 9650 | 10280 | 22.18 |
| [Ryzen R1505G](results/4HYd.txt) | **3270** MHz| 6.1 | Bookworm amd64 | 9080 | 3327 | 886980 | 10520 | 8160 | 18.14 |
| [Apple M1 Pro](results/443N.txt) | **3030/2060** MHz| 5.18 | Gentoo 2.8 arm64 | 43800 | 5010 | 1064450 | 27110 | 71910 | 48.28 |
| [Raspberry Pi 5 B (BCM2712)](results/r05W17.txt) | **3000** MHz| 6.6 | Bookworm arm64 | 13400 | 3900 | 1709400 | 5900 | 17290 | 19.28 |
| [Raspberry Pi 5 B (BCM2712)](results/8acvqG.txt) | **3000** MHz| 6.1 | Bookworm arm64 | 12930 | 3791 | 1709720 | 5160 | 16350 | 19.25 |
| [Qualcomm Snapdragon 8cx Gen 3](results/4xwT.txt) | **3000/2440** MHz| 6.3 | Lunar arm64 | 35370 | 4312 | 1686160 | 17500 | 41780 | 42.76 |
| [Huaqin P6410<br />(2 x Ampere Altra Max)](results/4kiu.txt) | **3000** MHz| 5.4 | Focal arm64 | 430860 | 4211 | 1710010 | 13310 | 47970 | - |
Expand Down
22 changes: 11 additions & 11 deletions results/archive-and-check-results.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@
# To be executed from results dir. It also does some quick validation of
# collected results afterwards.

grep -E "http://ix.io|http://sprunge.us" ../Results.md | awk -F"http://" '{print $2}' | cut -f1 -d')' | while read ; do
grep -E "https://ix.io|https://sprunge.us" ../Results.md | awk -F"https://" '{print $2}' | cut -f1 -d')' | while read ; do
ResultFile="${REPLY##*/}.txt"
if [ -f "${ResultFile}" ]; then
grep -q "^tinymembench" "${ResultFile}" || (wget -q -O "${ResultFile}" "http://${REPLY}" ; sleep 5)
grep -q "^tinymembench" "${ResultFile}" || (wget -q -O "${ResultFile}" "https://${REPLY}" ; sleep 5)
else
wget -O "${ResultFile}" "http://${REPLY}"
wget -O "${ResultFile}" "https://${REPLY}"
git add "${ResultFile}"
sleep 5
fi
sed -i -e "s|http://${REPLY}|results/${ResultFile}|" ../Results.md
sed -i -e "s|https://${REPLY}|results/${ResultFile}|" ../Results.md
done

# create compressed archive with benchmark results, cpuinfo files and opp-tables:
Expand Down Expand Up @@ -110,42 +110,42 @@ echo " * [clockspeed](#clockspeed)" >>../Sorted-Results.md
echo -e "\n## 7-zip MIPS multi-threaded\n" >>../Sorted-Results.md
echo "| Device / details | Clockspeed | Kernel | Distro | *7-zip multi* | 7-zip single | AES | memcpy | memset | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 6 -n \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 6 -n \
| awk -F"|" '{print "|"$2"|"$3"|"$4"|"$5"|**"$6"**|"$7"|"$8"|"$9"|"$10"|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ \*\*|/\*\* |/' >>../Sorted-Results.md

# sorted by 7-zip single-threaded score:
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)\n\n## 7-zip MIPS single-threaded\n" >>../Sorted-Results.md
echo "| Device / details | Clockspeed | Kernel | Distro | 7-zip multi | *7-zip single* | AES | memcpy | memset | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 7 -n \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 7 -n \
| awk -F"|" '{print "|"$2"|"$3"|"$4"|"$5"|"$6"|**"$7"**|"$8"|"$9"|"$10"|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ \*\*|/\*\* |/' >>../Sorted-Results.md

# sorted by openssl speed -elapsed -evp aes-256-cbc:
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)\n\n## openssl speed -elapsed -evp aes-256-cbc\n" >>../Sorted-Results.md
echo -e "(For an in-depth explanation of ARMv8 AES scores see [here](ARMv8-Crypto-Extensions.md))\n" >>../Sorted-Results.md
echo "| Device / details | Clockspeed | Kernel | Distro | 7-zip multi | 7-zip single | *AES* | memcpy | memset | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 8 -n \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 8 -n \
| awk -F"|" '{print "|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|**"$8"**|"$9"|"$10"|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ \*\*|/\*\* |/' >>../Sorted-Results.md

# sorted by memcpy:
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)\n\n## memcpy\n" >>../Sorted-Results.md
echo "| Device / details | Clockspeed | Kernel | Distro | 7-zip multi | 7-zip single | AES | *memcpy* | memset | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 9 -n \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 9 -n \
| awk -F"|" '{print "|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|**"$9"**|"$10"|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ \*\*|/\*\* |/' >>../Sorted-Results.md

# sorted by memset:
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)\n\n## memset\n" >>../Sorted-Results.md
echo "| Device / details | Clockspeed | Kernel | Distro | 7-zip multi | 7-zip single | AES | memcpy | *memset* | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 10 -n \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 10 -n \
| awk -F"|" '{print "|"$2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|"$9"|**"$10"**|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ \*\*|/\*\* |/' >>../Sorted-Results.md

# sorted by clockspeed:
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)\n\n## clockspeed\n" >>../Sorted-Results.md
echo "| Device / details | *Clockspeed* | Kernel | Distro | 7-zip multi | 7-zip single | AES | memcpy | memset | kH/s |" >>../Sorted-Results.md
echo "| ----- | :--------: | :----: | :----: | ----: | ------: | ------: | -----: | -----: | ---: |" >>../Sorted-Results.md
grep -E "results/|http://ix.io|http://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 3 -n | grep MHz \
grep -E "results/|https://ix.io|https://sprunge.us" ../Results.md | grep "^|" | sed 's/\*\*//g'| sort -r -t '|' -k 3 -n | grep MHz \
| awk -F"|" '{print "|"$2"|**"$3"**|"$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10"|"$11"|"}' | sed -e 's/|\*\* /| \*\*/' -e 's/ MHz \*\*|/\*\* MHz|/' >>../Sorted-Results.md
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)" >>../Sorted-Results.md
echo -e "\n[(back to top of the page)](#sbc-bench-results-sorted)" >>../Sorted-Results.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
1500 MHz 720.0 mV
1600 MHz 860.0 mV
1700 MHz 875.0 mV
1800 MHz 885.0 mV
1900 MHz 900.0 mV
2000 MHz 915.0 mV
2100 MHz 930.0 mV
2200 MHz 940.0 mV
2300 MHz 955.0 mV
2400 MHz 970.0 mV
2500 MHz 970.0 mV
2600 MHz 970.0 mV
2700 MHz 970.0 mV
2800 MHz 970.0 mV
2900 MHz 970.0 mV
3000 MHz 970.0 mV
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
opp-table-threadx-0:
1500 MHz 720.0 mV
1600 MHz 860.0 mV
1700 MHz 875.0 mV
1800 MHz 885.0 mV
1900 MHz 900.0 mV
2000 MHz 915.0 mV
2100 MHz 930.0 mV
2200 MHz 940.0 mV
2300 MHz 955.0 mV
2400 MHz 970.0 mV
2500 MHz 970.0 mV
2600 MHz 970.0 mV
2700 MHz 970.0 mV
2800 MHz 970.0 mV
2900 MHz 970.0 mV
3000 MHz 970.0 mV
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
1500 MHz 720.0 mV
1600 MHz 805.0 mV
1700 MHz 820.0 mV
1800 MHz 835.0 mV
1900 MHz 850.0 mV
2000 MHz 860.0 mV
2100 MHz 875.0 mV
2200 MHz 890.0 mV
2300 MHz 905.0 mV
2400 MHz 915.0 mV
2500 MHz 930.0 mV
2600 MHz 945.0 mV
2700 MHz 960.0 mV
2800 MHz 970.0 mV
2900 MHz 985.0 mV
3000 MHz 1000.0 mV
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
opp-table-threadx-0:
1500 MHz 720.0 mV
1600 MHz 805.0 mV
1700 MHz 820.0 mV
1800 MHz 835.0 mV
1900 MHz 850.0 mV
2000 MHz 860.0 mV
2100 MHz 875.0 mV
2200 MHz 890.0 mV
2300 MHz 905.0 mV
2400 MHz 915.0 mV
2500 MHz 930.0 mV
2600 MHz 945.0 mV
2700 MHz 960.0 mV
2800 MHz 970.0 mV
2900 MHz 985.0 mV
3000 MHz 1000.0 mV
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
1500 MHz 720.0 mV
1600 MHz 855.0 mV
1700 MHz 870.0 mV
1800 MHz 885.0 mV
1900 MHz 900.0 mV
2000 MHz 910.0 mV
2100 MHz 925.0 mV
2200 MHz 940.0 mV
2300 MHz 955.0 mV
2400 MHz 965.0 mV
2500 MHz 980.0 mV
2600 MHz 995.0 mV
2700 MHz 1000.0 mV
2800 MHz 1000.0 mV
2900 MHz 1000.0 mV
3000 MHz 1000.0 mV
3100 MHz 1000.0 mV
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
opp-table-threadx-0:
1500 MHz 720.0 mV
1600 MHz 855.0 mV
1700 MHz 870.0 mV
1800 MHz 885.0 mV
1900 MHz 900.0 mV
2000 MHz 910.0 mV
2100 MHz 925.0 mV
2200 MHz 940.0 mV
2300 MHz 955.0 mV
2400 MHz 965.0 mV
2500 MHz 980.0 mV
2600 MHz 995.0 mV
2700 MHz 1000.0 mV
2800 MHz 1000.0 mV
2900 MHz 1000.0 mV
3000 MHz 1000.0 mV
3100 MHz 1000.0 mV
Loading

1 comment on commit 8183b18

@ThomasKaiser
Copy link
Owner Author

@ThomasKaiser ThomasKaiser commented on 8183b18 Mar 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To get the 'DVFS stability checking' to work the easiest way is to (as root):

apt install libmpich-dev
cd /usr/local/src
git clone https://github.com/ThomasKaiser/StabilityTester

And then prior to calling sbc-bench.sh $Linpack needs to be exported with the path to StabilityTester where both the xhpl64 binary and the HPL.dat settings are lying around:

export Linpack=/usr/local/src/StabilityTester
sbc-bench.sh [-G]

Some tests on my BCM2712:

As expected no problems with only over_voltage_delta=-20000 (undervolting all DFVS OPP by 20mV): https://sprunge.us/5BWFWJ

Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.8500V/0.8534V   (1.505e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.8350V/0.8384V   (1.466e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.8200V/0.8241V   (1.464e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.8050V/0.8085V   (1.435e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.7950V/0.7981V   (1.420e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1899 @ 0.7800V/0.7828V   (1.388e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.7650V/0.7674V   (1.360e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.7500V/0.7527V   (1.329e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.7400V/0.7425V   (1.296e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7226V   (1.245e+01)

Still no problems with arm_freq=2700 and over_voltage_delta=-40000 (40mV undervolting): https://sprunge.us/rc8Ojh

Cpufreq OPP: 2700  ThreadX: 2700  Measured: 2699 @ 0.8700V/0.8736V   (1.552e+01)
Cpufreq OPP: 2600  ThreadX: 2600  Measured: 2599 @ 0.8550V/0.8582V   (1.561e+01)
Cpufreq OPP: 2500  ThreadX: 2500  Measured: 2499 @ 0.8400V/0.8427V   (1.532e+01)
Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.8300V/0.8335V   (1.519e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.8150V/0.8185V   (1.487e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.8000V/0.8029V   (1.470e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.7850V/0.7879V   (1.433e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.7750V/0.7771V   (1.418e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1899 @ 0.7600V/0.7629V   (1.378e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.7450V/0.7470V   (1.371e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.7300V/0.7328V   (1.340e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.7200V/0.7226V   (1.299e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7223V   (1.252e+01)

arm_freq=2800 and over_voltage_delta=-40000 froze the board so 2800 MHz with 40mV undervolting doesn't work for my BCM2712 this time (if I would waste my time testing this setting 10 times maybe 9 times it would work. That's why you test for FAILED /freeze and then add some safety headroom).

arm_freq=2800 and over_voltage_delta=-20000 again no problems: https://sprunge.us/AI7CQ6

Cpufreq OPP: 2800  ThreadX: 2800  Measured: 2799 @ 0.9050V/0.9082V   (1.550e+01)
Cpufreq OPP: 2700  ThreadX: 2700  Measured: 2699 @ 0.8900V/0.8940V   (1.550e+01)
Cpufreq OPP: 2600  ThreadX: 2600  Measured: 2599 @ 0.8750V/0.8784V   (1.536e+01)
Cpufreq OPP: 2500  ThreadX: 2500  Measured: 2499 @ 0.8600V/0.8639V   (1.523e+01)
Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.8500V/0.8534V   (1.483e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.8350V/0.8389V   (1.476e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.8200V/0.8241V   (1.468e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.8050V/0.8083V   (1.414e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.7950V/0.7981V   (1.418e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1899 @ 0.7800V/0.7833V   (1.372e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.7650V/0.7674V   (1.349e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.7500V/0.7532V   (1.322e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.7400V/0.7433V   (1.291e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7218V   (1.250e+01)

arm_freq=3080 and over_voltage_delta=100000 (3080 MHz at 1V is what works in +90% of attempts to get the pace at producing silly Geekbench 6 scores but this DVFS OPP on my device is affected by data corruption otherwise): https://sprunge.us/ZTzklU

Cpufreq OPP: 3100  ThreadX: 3080  Measured: 3079 @ 1.0000V/1.0046V   (FAILED)
Cpufreq OPP: 3000  ThreadX: 3000  Measured: 2999 @ 1.0000V/1.0044V   (1.557e+01)
Cpufreq OPP: 2900  ThreadX: 2900  Measured: 2899 @ 1.0000V/1.0046V   (1.572e+01)
Cpufreq OPP: 2800  ThreadX: 2800  Measured: 2799 @ 1.0000V/1.0041V   (1.574e+01)
Cpufreq OPP: 2700  ThreadX: 2700  Measured: 2699 @ 1.0000V/1.0044V   (1.533e+01)
Cpufreq OPP: 2600  ThreadX: 2600  Measured: 2599 @ 0.9950V/0.9990V   (1.527e+01)
Cpufreq OPP: 2500  ThreadX: 2500  Measured: 2499 @ 0.9800V/0.9840V   (1.500e+01)
Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.9650V/0.9692V   (1.507e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.9550V/0.9587V   (1.490e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.9400V/0.9439V   (1.445e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.9250V/0.9284V   (1.447e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.9100V/0.9144V   (1.407e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1899 @ 0.9000V/0.9036V   (1.396e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.8850V/0.8886V   (1.346e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.8700V/0.8733V   (1.334e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.8550V/0.8585V   (1.283e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7223V   (1.249e+01)

As such back to 3.00 GHz and only +50mV (arm_freq=3000 and over_voltage_delta=50000) which succeeds: https://sprunge.us/9DJkq9

Cpufreq OPP: 3000  ThreadX: 3000  Measured: 2999 @ 1.0000V/1.0044V   (1.578e+01)
Cpufreq OPP: 2900  ThreadX: 2900  Measured: 2899 @ 0.9850V/0.9888V   (1.577e+01)
Cpufreq OPP: 2800  ThreadX: 2800  Measured: 2799 @ 0.9750V/0.9791V   (1.554e+01)
Cpufreq OPP: 2700  ThreadX: 2700  Measured: 2699 @ 0.9600V/0.9646V   (1.554e+01)
Cpufreq OPP: 2600  ThreadX: 2600  Measured: 2599 @ 0.9450V/0.9485V   (1.526e+01)
Cpufreq OPP: 2500  ThreadX: 2500  Measured: 2499 @ 0.9300V/0.9348V   (1.503e+01)
Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.9200V/0.9238V   (1.493e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.9050V/0.9087V   (1.466e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.8900V/0.8932V   (1.450e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.8750V/0.8789V   (1.404e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.8650V/0.8684V   (1.403e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1899 @ 0.8500V/0.8529V   (1.361e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.8350V/0.8381V   (1.347e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.8200V/0.8236V   (1.309e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.8100V/0.8145V   (1.292e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7218V   (1.254e+01)

With no overvolting (arm_freq=3000) the highest DVFS OPP (3000 MHz at 950mV on my device) fails as expected: https://sprunge.us/ymJPAV

Cpufreq OPP: 3000  ThreadX: 3000  Measured: 2999 @ 0.9500V/0.9539V   (FAILED)
Cpufreq OPP: 2900  ThreadX: 2900  Measured: 2899 @ 0.9350V/0.9388V   (1.570e+01)
Cpufreq OPP: 2800  ThreadX: 2800  Measured: 2799 @ 0.9200V/0.9235V   (1.550e+01)
Cpufreq OPP: 2700  ThreadX: 2700  Measured: 2699 @ 0.9100V/0.9138V   (1.551e+01)
Cpufreq OPP: 2600  ThreadX: 2600  Measured: 2599 @ 0.8950V/0.8988V   (1.513e+01)
Cpufreq OPP: 2500  ThreadX: 2500  Measured: 2499 @ 0.8800V/0.8830V   (1.513e+01)
Cpufreq OPP: 2400  ThreadX: 2400  Measured: 2399 @ 0.8650V/0.8687V   (1.510e+01)
Cpufreq OPP: 2300  ThreadX: 2300  Measured: 2299 @ 0.8550V/0.8585V   (1.485e+01)
Cpufreq OPP: 2200  ThreadX: 2200  Measured: 2199 @ 0.8400V/0.8440V   (1.470e+01)
Cpufreq OPP: 2100  ThreadX: 2100  Measured: 2099 @ 0.8250V/0.8284V   (1.436e+01)
Cpufreq OPP: 2000  ThreadX: 2000  Measured: 1999 @ 0.8100V/0.8131V   (1.415e+01)
Cpufreq OPP: 1900  ThreadX: 1900  Measured: 1896 @ 0.8000V/0.8032V   (1.387e+01)
Cpufreq OPP: 1800  ThreadX: 1800  Measured: 1799 @ 0.7850V/0.7879V   (1.351e+01)
Cpufreq OPP: 1700  ThreadX: 1700  Measured: 1699 @ 0.7700V/0.7728V   (1.326e+01)
Cpufreq OPP: 1600  ThreadX: 1600  Measured: 1599 @ 0.7550V/0.7578V   (1.279e+01)
Cpufreq OPP: 1500  ThreadX: 1500  Measured: 1499 @ 0.7200V/0.7223V   (1.238e+01)

'Silicon lottery' at work, according to Raspberry Pi Ltd. employees there's not a single setting for all SoCs out there but the individual SoC's capabilities are taken into account. Check the above links for vpred, over_voltage_avs and avs_temp though a bit boring since all the time it's just my – rather good – BCM2712 that is kept really cool by my 'monster cooling' setup for 12 bucks:

IMG_2819 klein

Please sign in to comment.