Files
hakmem/benchmarks/README.md
Moe Charm (CI) 1da8754d45 CRITICAL FIX: TLS 未初期化による 4T SEGV を完全解消
**問題:**
- Larson 4T で 100% SEGV (1T は 2.09M ops/s で完走)
- System/mimalloc は 4T で 33.52M ops/s 正常動作
- SS OFF + Remote OFF でも 4T で SEGV

**根本原因: (Task agent ultrathink 調査結果)**
```
CRASH: mov (%r15),%r13
R15 = 0x6261  ← ASCII "ba" (ゴミ値、未初期化TLS)
```

Worker スレッドの TLS 変数が未初期化:
- `__thread void* g_tls_sll_head[TINY_NUM_CLASSES];`  ← 初期化なし
- pthread_create() で生成されたスレッドでゼロ初期化されない
- NULL チェックが通過 (0x6261 != NULL) → dereference → SEGV

**修正内容:**
全 TLS 配列に明示的初期化子 `= {0}` を追加:

1. **core/hakmem_tiny.c:**
   - `g_tls_sll_head[TINY_NUM_CLASSES] = {0}`
   - `g_tls_sll_count[TINY_NUM_CLASSES] = {0}`
   - `g_tls_live_ss[TINY_NUM_CLASSES] = {0}`
   - `g_tls_bcur[TINY_NUM_CLASSES] = {0}`
   - `g_tls_bend[TINY_NUM_CLASSES] = {0}`

2. **core/tiny_fastcache.c:**
   - `g_tiny_fast_cache[TINY_FAST_CLASS_COUNT] = {0}`
   - `g_tiny_fast_count[TINY_FAST_CLASS_COUNT] = {0}`
   - `g_tiny_fast_free_head[TINY_FAST_CLASS_COUNT] = {0}`
   - `g_tiny_fast_free_count[TINY_FAST_CLASS_COUNT] = {0}`

3. **core/hakmem_tiny_magazine.c:**
   - `g_tls_mags[TINY_NUM_CLASSES] = {0}`

4. **core/tiny_sticky.c:**
   - `g_tls_sticky_ss[TINY_NUM_CLASSES][TINY_STICKY_RING] = {0}`
   - `g_tls_sticky_idx[TINY_NUM_CLASSES][TINY_STICKY_RING] = {0}`
   - `g_tls_sticky_pos[TINY_NUM_CLASSES] = {0}`

**効果:**
```
Before: 1T: 2.09M   |  4T: SEGV 💀
After:  1T: 2.41M   |  4T: 4.19M   (+15% 1T, SEGV解消)
```

**テスト:**
```bash
# 1 thread: 完走
./larson_hakmem 2 8 128 1024 1 12345 1
→ Throughput = 2,407,597 ops/s 

# 4 threads: 完走(以前は SEGV)
./larson_hakmem 2 8 128 1024 1 12345 4
→ Throughput = 4,192,155 ops/s 
```

**調査協力:** Task agent (ultrathink mode) による完璧な根本原因特定

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-07 01:27:04 +09:00

60 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Benchmarks Catalog
このディレクトリのベンチを用途別に整理しました。各ベンチは System/mimalloc/HAKMEM直リンク or LD_PRELOADの三者比較、もしくは HAKMEM の A/B環境変数を想定しています。
## ベンチ種類(バイナリ)
- Tiny Hot864B、ホットパス/LIFO
- `benchmarks/src/tiny/bench_tiny_hot.c`
- バイナリ: `bench_tiny_hot_system`, `bench_tiny_hot_hakmem`, `bench_tiny_hot_mi`
- 例: `./bench_tiny_hot_hakmem 64 100 60000`
- Random Mixed161024B、単体
- バイナリ: `bench_random_mixed_system`, `bench_random_mixed_hakmem`
- 例: `./bench_random_mixed_hakmem 400000 8192 123`
- Mid/Large MT832KiB、マルチスレッド
- バイナリ: `bench_mid_large_mt_system`, `bench_mid_large_mt_hakmem`
- 例: `./bench_mid_large_mt_hakmem 4 40000 2048 42`
- VM Mixed512KB<2MBL2.5/L2 の再利用確認
- バイナリ: `bench_vm_mixed_system`, `bench_vm_mixed_hakmem`
- 例: `HAKMEM_BIGCACHE_L25=1 HAKMEM_WRAP_TINY=1 ./bench_vm_mixed_hakmem 20000 256 4242`
- Larson8128Bmimalloc-bench 派生
- バイナリ: `larson_system`, `larson_mi`, `larson_hakmem`
- 例: `./larson_hakmem 2 8 128 1024 1 12345 4`
- Redis-like161024Bアプリ風
- バイナリ: `benchmarks/redis/workload_bench_system`
- 直リンク: System のみmimalloc/HAKMEM LD_PRELOAD で比較HAKMEM は安定化中)。
## マトリクス実行CSV保存
- Random Mixed直リンク
- `benchmarks/scripts/run_random_mixed_matrix.sh [cycles] [ws] [reps]`
- 出力: `bench_results/auto/random_mixed_<ts>/results.csv`
- Mid/Large MT直リンク
- `benchmarks/scripts/run_mid_large_mt_matrix.sh [threads_csv] [cycles] [ws] [reps]`
- 出力: `bench_results/auto/mid_large_mt_<ts>/results.csv`
- VM MixedL2.5/L2HAKMEMのL25 A/B
- `benchmarks/scripts/run_vm_mixed_matrix.sh [cycles] [ws] [reps]`
- 出力: `bench_results/auto/vm_mixed_<ts>/results.csv`
- Larson補助
- `scripts/run_larson.sh`直リンク triad)、`scripts/run_larson_claude.sh`環境プリセット付き
## 代表的な環境変数
- HAKMEM_WRAP_TINY=1 HAKMEM/Tiny を有効化直リンクベンチ
- HAKMEM_TINY_READY=0/1 Ready Listrefill最適化
- HAKMEM_TINY_SS_ADOPT=0/1 publishadopt 経路
- HAKMEM_BIGCACHE_L25=0/1 L2.5512KB<2MB BigCache にも載せるA/B
## 参考出力(短時間ランの目安)
- 直近の短ランのスナップショットは `benchmarks/RESULTS_SNAPSHOT.md` を参照してください正式な比較は各マトリクススクリプトで reps=5/10・長時間ラン例: 10sを推奨します