CURRENT_TASK: Registry 線形スキャン ボトルネック特定 (2025-11-05)

- perf 分析で superslab_refill が 28.51% CPU を消費
- Root cause: 262,144 エントリの線形スキャン (97.65% の hot instructions)
- 解決策: per-class registry (8×4096 = 32K entries)
- 期待効果: +200-300% (2.59M → 7.8-10.4M ops/s)
- Box Refactor は既に動いている (+463% ST, +131% MT)

次のアクション: Phase 1 実装 (per-class registry 変更)

詳細: PERF_ANALYSIS_2025_11_05.md

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Moe Charm (CI)
2025-11-05 16:47:04 +09:00
parent 859027e06c
commit 582ebdfd4f

View File

@ -1,4 +1,80 @@
# Current Task (2025-11-04)
# Current Task (2025-11-05)
## 🔔 最新アップデート (2025-11-05 16:30) 🔥🔥🔥
### ✅ Registry 線形スキャン ボトルネック特定!
**Perf 分析完了 → Root Cause 発見!**
**測定結果 (Larson, threads=4):**
```
HAKMEM: 3.62M ops/s (21.6% of system)
System: 16.76M ops/s (100%)
差: -78.4% 💀
```
**Perf プロファイリング結果:**
```
28.51% superslab_refill 💀💀💀 圧倒的ボトルネック
2.58% exercise_heap (ベンチマーク本体)
```
**問題:** アロケータ (superslab_refill) がベンチマーク本体 (exercise_heap) より CPU time を消費!
**Hot Instructions 分析 (perf annotate):**
```
32.36% cmp $0x3ffff,%r11d ← 262,143 回ループ!
16.78% inc %r13d ← カウンタ++
16.29% add $0x18,%rbx ← ポインタ進める
合計 97.65% の CPU time がループに集中
```
**Root Cause (core/hakmem_tiny_free.inc:917):**
```c
for (int i = 0; i < SUPER_REG_SIZE && scanned < scan_max; i++) {
// ^^^^^^^^^^^ 262,144 エントリを線形スキャン!
SuperRegEntry* e = &g_super_reg[i];
// ... class_idx 不一致でも全エントリをイテレート
}
```
**解決策: Per-class Registry**
```c
// Before: 全 class 混在
SuperRegEntry g_super_reg[262144];
// After: class ごとに分離
SuperRegEntry g_super_reg_by_class[TINY_NUM_CLASSES][4096];
// 8 classes × 4096 entries = 32K total
```
**期待効果:**
- スキャン対象: 262,144 → 4,096 エントリ (-98.4%)
- **期待改善: +200-300%** (2.59M → 7.8-10.4M ops/s)
- **System malloc の 54-73% まで到達可能!** 🎯
**詳細レポート:**
- `PERF_ANALYSIS_2025_11_05.md` - 完全分析 + 実装プラン
- Commit: `859027e` "Perf Analysis: Registry 線形スキャンがボトルネック"
- Branch: `perf-analysis-2025-11-05` (pushed to private repo)
**次のアクション:**
1. **Phase 1 実装** (1-2日): per-class registry に変更
- `core/hakmem_super_registry.{h,c}` 構造変更
- `core/hakmem_tiny_free.inc:917` スキャン簡素化
- 目標: 2.59M → 7.8M ops/s (+3倍!)
2. **Phase 2 実装** (追加 1日): 早期終了 + First-fit
- 最初の freelist 発見で即 return
- 目標: 7.8M → 11.7M ops/s (system の 82%!)
**重要:** Box Refactor は既に動いている!
- Single-thread: 0.46M → 2.59M ops/s (+463%!) ✅
- Multi-thread: 1.81M → 4.19M ops/s (+131%!) ✅
- 外部AIの最適化も効いている (Option A: Inline TLS cache access)
- **ただし Registry スキャンがボトルネックで system には届かず**
---
## 🔔 最新アップデート (2025-11-06 23:xx)