-
Notifications
You must be signed in to change notification settings - Fork 1
113 lines (97 loc) · 5.67 KB
/
benchmarks.yml
File metadata and controls
113 lines (97 loc) · 5.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
name: Benchmarks
on:
workflow_dispatch:
schedule:
- cron: '0 0 * * 0' # Weekly on Sunday
jobs:
full-benchmark:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v27
with:
nix_path: nixpkgs=channel:nixos-unstable
- name: Build
run: nix build
- name: Compile all benchmarks
run: |
gcc -O3 -pthread benches/packet_churn.c -o /tmp/packet_churn
gcc -O3 -pthread benches/kv_store.c -o /tmp/kv_store
gcc -O3 -pthread benches/producer_consumer.c -o /tmp/producer_consumer
gcc -O3 -pthread benches/multithread_churn.c -o /tmp/multithread_churn
gcc -O3 -pthread benches/fragmentation.c -o /tmp/fragmentation
gcc -O3 benches/tail_latency.c -o /tmp/tail_latency
gcc -O3 benches/massive_alloc.c -o /tmp/massive_alloc
gcc -O3 benches/corruption_test.c -o /tmp/corruption_test
- name: Run all benchmarks
id: benchmarks
run: |
AETHALLOC="LD_PRELOAD=$(realpath result/lib/*.so)"
echo "## Benchmark Results" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Test System:** GitHub Actions ubuntu-latest" >> $GITHUB_STEP_SUMMARY
echo "**Date:** $(date -I)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Benchmark | glibc | AethAlloc | Ratio |" >> $GITHUB_STEP_SUMMARY
echo "|-----------|-------|-----------|-------|" >> $GITHUB_STEP_SUMMARY
# Packet Churn
GLIBC_PC=$(/tmp/packet_churn | jq -r '.throughput_ops_per_sec')
AETH_PC=$($AETHALLOC /tmp/packet_churn | jq -r '.throughput_ops_per_sec')
RATIO_PC=$(echo "scale=0; $AETH_PC * 100 / $GLIBC_PC" | bc)
echo "| Packet Churn | ${GLIBC_PC} | ${AETH_PC} | ${RATIO_PC}% |" >> $GITHUB_STEP_SUMMARY
# KV Store
GLIBC_KV=$(/tmp/kv_store | jq -r '.throughput_ops_per_sec')
AETH_KV=$($AETHALLOC /tmp/kv_store | jq -r '.throughput_ops_per_sec')
RATIO_KV=$(echo "scale=0; $AETH_KV * 100 / $GLIBC_KV" | bc)
echo "| KV Store | ${GLIBC_KV} | ${AETH_KV} | ${RATIO_KV}% |" >> $GITHUB_STEP_SUMMARY
# Producer-Consumer
GLIBC_PCS=$(/tmp/producer_consumer | jq -r '.throughput_ops_per_sec')
AETH_PCS=$($AETHALLOC /tmp/producer_consumer | jq -r '.throughput_ops_per_sec')
RATIO_PCS=$(echo "scale=0; $AETH_PCS * 100 / $GLIBC_PCS" | bc)
echo "| Producer-Consumer | ${GLIBC_PCS} | ${AETH_PCS} | ${RATIO_PCS}% |" >> $GITHUB_STEP_SUMMARY
# Multithread
GLIBC_MT=$(/tmp/multithread_churn | jq -r '.throughput_ops_per_sec')
AETH_MT=$($AETHALLOC /tmp/multithread_churn | jq -r '.throughput_ops_per_sec')
RATIO_MT=$(echo "scale=0; $AETH_MT * 100 / $GLIBC_MT" | bc)
echo "| Multithread (8T) | ${GLIBC_MT} | ${AETH_MT} | ${RATIO_MT}% |" >> $GITHUB_STEP_SUMMARY
# Fragmentation
GLIBC_RSS=$(/tmp/fragmentation | jq -r '.summary.final_rss_kb')
AETH_RSS=$($AETHALLOC /tmp/fragmentation | jq -r '.summary.final_rss_kb')
RATIO_RSS=$(echo "scale=1; $GLIBC_RSS / $AETH_RSS" | bc)
echo "| Fragmentation RSS | ${GLIBC_RSS} KB | ${AETH_RSS} KB | ${RATIO_RSS}x better |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Tail Latency (8 threads, 50K ops each)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Allocator | P50 | P99 | P99.9 | P99.99 | Max |" >> $GITHUB_STEP_SUMMARY
echo "|-----------|-----|-----|-------|--------|-----|" >> $GITHUB_STEP_SUMMARY
GLIBC_LAT=$(/tmp/tail_latency 8 50000)
AETH_LAT=$($AETHALLOC /tmp/tail_latency 8 50000)
GLIBC_P50=$(echo "$GLIBC_LAT" | jq -r '.latency_ns.p50')
GLIBC_P99=$(echo "$GLIBC_LAT" | jq -r '.latency_ns.p99')
GLIBC_P999=$(echo "$GLIBC_LAT" | jq -r '.latency_ns["p99.9"]')
GLIBC_P9999=$(echo "$GLIBC_LAT" | jq -r '.latency_ns["p99.99"]')
GLIBC_MAX=$(echo "$GLIBC_LAT" | jq -r '.latency_ns.max')
AETH_P50=$(echo "$AETH_LAT" | jq -r '.latency_ns.p50')
AETH_P99=$(echo "$AETH_LAT" | jq -r '.latency_ns.p99')
AETH_P999=$(echo "$AETH_LAT" | jq -r '.latency_ns["p99.9"]')
AETH_P9999=$(echo "$AETH_LAT" | jq -r '.latency_ns["p99.99"]')
AETH_MAX=$(echo "$AETH_LAT" | jq -r '.latency_ns.max')
echo "| glibc | ${GLIBC_P50}ns | ${GLIBC_P99}ns | ${GLIBC_P999}ns | ${GLIBC_P9999}ns | ${GLIBC_MAX}ns |" >> $GITHUB_STEP_SUMMARY
echo "| AethAlloc | ${AETH_P50}ns | ${AETH_P99}ns | ${AETH_P999}ns | ${AETH_P9999}ns | ${AETH_MAX}ns |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Massive Allocations" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "=== glibc ===" >> $GITHUB_STEP_SUMMARY
/tmp/massive_alloc >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "=== AethAlloc ===" >> $GITHUB_STEP_SUMMARY
$AETHALLOC /tmp/massive_alloc >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Corruption Test" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
$AETHALLOC /tmp/corruption_test >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY