about summary refs log tree commit diff
diff options
context:
space:
mode:
authorvanhauser-thc <vh@thc.org>2023-08-16 10:50:07 +0200
committervanhauser-thc <vh@thc.org>2023-08-16 10:50:07 +0200
commitc2c8e780a5d10fe7500ec9add0aa5b2cb081fe71 (patch)
treef46f0dde2b7f556c8fe1e13fa245992b1641096f
parentfd219177c73220637f32c9991ca4d324bb03ea6a (diff)
downloadafl++-c2c8e780a5d10fe7500ec9add0aa5b2cb081fe71.tar.gz
add benchmark
-rw-r--r--benchmark/COMPARISON4
-rwxr-xr-xbenchmark/benchmark.sh42
-rw-r--r--docs/Changelog.md2
3 files changed, 48 insertions, 0 deletions
diff --git a/benchmark/COMPARISON b/benchmark/COMPARISON
new file mode 100644
index 00000000..55ab94b4
--- /dev/null
+++ b/benchmark/COMPARISON
@@ -0,0 +1,4 @@
+CPU                                     | Mz   | exec/s | afl-*-config |
+========================================|======|========|==============|
+CPU 12th Gen Intel(R) Core(TM) i7-1270P | 4200 | 12750  | both         |
+AMD EPYC 7282 16-Core Processor         | 3190 | 10060  | both         |
diff --git a/benchmark/benchmark.sh b/benchmark/benchmark.sh
new file mode 100755
index 00000000..3318adce
--- /dev/null
+++ b/benchmark/benchmark.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+test -x ../afl-fuzz -a -x ../afl-cc -a -e ../SanitizerCoveragePCGUARD.so || {
+  echo Error: you need to compile AFL++ first, we need afl-fuzz, afl-clang-fast and SanitizerCoveragePCGUARD.so built.
+  exit 1
+}
+
+echo Preparing environment
+
+env | grep AFL_ | sed 's/=.*//' | while read e; do
+  unset $e
+done
+
+AFL_PATH=`pwd`/..
+export PATH=$AFL_PATH:$PATH
+
+AFL_LLVM_INSTRUMENT=PCGUARD afl-cc -o test-instr ../test-instr.c > afl.log 2>&1 || {
+  echo Error: afl-cc is unable to compile
+  exit 1
+}
+
+{
+mkdir in
+dd if=/dev/zero of=in/in.txt bs=10K count=1
+} > /dev/null 2>&1
+
+echo Ready, starting benchmark - this will take approx 20-30 seconds ...
+
+AFL_DISABLE_TRIM=1 AFL_NO_UI=1 AFL_TRY_AFFINITY=1 AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1 AFL_BENCH_JUST_ONE=1 time afl-fuzz -i in -o out -s 123 -D ./test-instr >> afl.log 2>&1
+
+echo Analysis:
+
+CPUID=$(grep 'try binding to' afl.log | tail -n 1 | sed 's/.*#//' | sed 's/\..*//')
+grep 'model name' /proc/cpuinfo | head -n 1 | sed 's/.*:/ CPU:/'
+test -n "$CPUID" && grep -E '^processor|^cpu MHz' /proc/cpuinfo | grep -A1 -w "$CPUID" | grep 'cpu MHz' | head -n 1 | sed 's/.*:/ Mhz:/'
+test -z "$CPUID" && grep 'cpu MHz' /proc/cpuinfo | head -n 1 | sed 's/.*:/ Mhz:/'
+grep execs_per_sec out/default/fuzzer_stats | sed 's/.*:/ execs\/s:/'
+
+echo
+echo "Comparison: (note that values can change by 10-15% per run)"
+cat COMPARISON
+
+rm -rf in out test-instr afl.log
diff --git a/docs/Changelog.md b/docs/Changelog.md
index 8f2b2545..b809559e 100644
--- a/docs/Changelog.md
+++ b/docs/Changelog.md
@@ -7,6 +7,8 @@
   - afl-fuzz:
     - added `AFL_FINAL_SYNC` which forces a final fuzzer sync (also for `-F`)
       before terminating.
+  - added benchmark/benchmark.sh if you want to see how good your fuzzing
+    speed is in comparison to other setups.
 
 
 ### Version ++4.08c (release)