diff --git a/PERF_ANALYSIS_EXECUTIVE_SUMMARY.md b/PERF_ANALYSIS_EXECUTIVE_SUMMARY.md new file mode 100644 index 00000000..e819b30b --- /dev/null +++ b/PERF_ANALYSIS_EXECUTIVE_SUMMARY.md @@ -0,0 +1,212 @@ +# HAKMEM アロケータ パフォーマンス分析 - エグゼクティブサマリー + +## 📊 現状評価 + +### スループット比較 +- **HAKMEM**: 55.7M ops/s +- **System (glibc)**: 86.7M ops/s +- **差分**: -35.7% (HAKMEM が遅い) + +### 効率指標 +✅ **良好な指標**: +- IPC (Instructions Per Cycle): 2.12 vs 2.09 (HAKMEM が若干上) +- Branch Miss率: 2.56% vs 3.39% (HAKMEM が良好) +- Cache Miss率: 9.28% vs 13.26% (HAKMEM が良好) + +❌ **問題のある指標**: +- Instructions: 167M vs 94M (+78%, HAKMEM が1.8倍多い) +- Cache References: 1.86M vs 340K (+448%, HAKMEM が5.5倍多い) +- Branches: 36M vs 16.6M (+117%, HAKMEM が2.2倍多い) + +### 🔍 本質的な問題 +**HAKMEM は「仕事の質」は高いが「仕事の量」が多すぎる** +- 分岐予測・キャッシュ効率は優秀 +- しかし、不要な処理が多く、全体のスループットを低下させている + +--- + +## 🔥 トップ3ボトルネック + +### 1位: SuperSlab 初期化の Page Fault (23.83% CPU時間) +**症状**: +``` +shared_pool_acquire_slab() + → memset(1MB-2MB) + → page fault + → kernel clear_page_erms (4.46%) +``` + +**原因**: +- SuperSlab 獲得時に 1MB-2MB のメモリをゼロクリア +- mmap は既にゼロページを返すのに、4つの memset() を実行 +- Lines 912-915 in hakmem_tiny_superslab.c + +**即効性のある対策**: +```bash +# 4つの memset() をコメントアウト +# 理由: mmap(MAP_ANONYMOUS) は既にゼロ初期化されている +# 推定効果: +10-15% throughput +``` + +--- + +### 2位: 多層分岐ルーティング (36M branches, 2.2倍) +**症状**: +- malloc 1回あたり 36 branches (system は 16.6) +- smallmid → tiny → mid → ACE の順次チェック + +**原因**: +- Front Gate の domain 分類が複雑 +- サイズレンジごとに個別判定 + +**対策**: +```c +// Dispatch table で一発判定 +void* (*allocator)(size_t) = size_dispatch_table[size >> 8]; +return allocator(size); +``` +**推定効果**: +5-8% throughput + +--- + +### 3位: 過剰なキャッシュアクセス (1.86M refs, 5.5倍) +**症状**: +- Cache references が system の 5.5倍 +- Miss率は良好だが、アクセス回数自体が多すぎる + +**原因**: +- SuperSlab メタデータが大きい +- Hot/Cold フィールドが混在 + +**対策**: +```c +// Hot fields を先頭64バイトに集約 +struct SuperSlab { + // Cache line 0 (HOT) + uint64_t magic; + void* freelist; + uint32_t used; + uint32_t capacity; + // ... + + // Cache line N (COLD) + uint64_t last_used_ns; + uint64_t generation; + // ... +} __attribute__((aligned(64))); +``` +**推定効果**: +3-5% cache efficiency + +--- + +## 🎯 最適化ロードマップ + +### Phase 1: Quick Wins (1-2日, +17% 目標) +1. ✅ **memset 削除** (lines 912-915) + - 4つの memset() をコメントアウト + - 効果: +12% + +2. ✅ **Front Gate に `__builtin_expect()` 追加** + - Tiny path を likely に設定 + - 効果: +2-3% + +3. ✅ **HAKMEM_DISABLE_MINCORE_CHECK=1 でビルド** + - mincore() syscall を削減 + - 効果: +2-3% + +**Phase 1 合計**: 55M → **65M ops/s** (system の 75%) + +--- + +### Phase 2: 構造的改善 (1週間, +24% 追加目標) +1. **Front Gate dispatch table 実装** + - サイズ → アロケータの直接マッピング + - 効果: +5-8% + +2. **SuperSlab サイズを 512KB に縮小** + - 初期化コストを半減 + - 効果: +5-7% + +3. **LTO 有効化** + - `-flto -fwhole-program` + - 効果: +3-5% + +4. **Cache line 最適化** + - SuperSlab 構造体の再配置 + - 効果: +3-5% + +**Phase 2 合計**: 65M → **77M ops/s** (system の 89%) + +--- + +### Phase 3: 詳細分析 (2週間) +- Valgrind/heaptrack でメモリプロファイリング +- マルチスレッドベンチマーク +- Workload 別の最適化 + +--- + +## 📈 予測効果まとめ + +| シナリオ | スループット | System比 | 実装期間 | +|---------|------------|---------|---------| +| 現状 | 55.7M ops/s | 64.3% | - | +| Phase 1 (保守的) | 65.2M ops/s | 75.2% | 1-2日 | +| Phase 2 (楽観的) | 77.5M ops/s | 89.4% | 1週間 | + +--- + +## 🛠️ すぐに試せるコマンド + +### 1. memset 削除版のビルド +```bash +cd /mnt/workdisk/public_share/hakmem +# Backup +cp core/hakmem_tiny_superslab.c core/hakmem_tiny_superslab.c.bak + +# Edit lines 912-915 (comment out memset) +sed -i '912,915s/^/\/\/ PERF_OPT: /' core/hakmem_tiny_superslab.c + +# Rebuild +make clean && make + +# Benchmark +./bench_random_mixed_hakmem 1000000 256 42 +``` + +### 2. mincore 無効化版のビルド +```bash +make clean +make CFLAGS="-DHAKMEM_DISABLE_MINCORE_CHECK=1" +./bench_random_mixed_hakmem 1000000 256 42 +``` + +### 3. 両方を適用 +```bash +make clean +make CFLAGS="-DHAKMEM_DISABLE_MINCORE_CHECK=1" +# + memset コメントアウト済み +./bench_random_mixed_hakmem 1000000 256 42 +``` + +**期待される結果**: 55M → **63-67M ops/s** (+13-20%) + +--- + +## 📁 生成ファイル一覧 + +1. **perf_analysis_summary.md** - 詳細分析レポート (このファイル) +2. **perf_comparison_chart.txt** - 視覚的比較チャート +3. **perf_hakmem_hotspots.txt** - ホットスポット詳細 +4. **perf_hakmem_stats.txt** - HAKMEM 統計 +5. **perf_system_stats.txt** - System malloc 統計 +6. **perf_hakmem_callgraph.txt** - コールグラフ +7. **perf_annotate_malloc.txt** - malloc 関数のアノテーション +8. **PERF_ANALYSIS_EXECUTIVE_SUMMARY.md** - エグゼクティブサマリー + +--- + +**分析完了日時**: 2025-11-28 +**使用ツール**: perf record/stat/report +**ベンチマーク**: bench_random_mixed (1M ops, WS=256) +**分析者**: Claude Code (Sonnet 4.5) diff --git a/README_PERF_ANALYSIS.md b/README_PERF_ANALYSIS.md new file mode 100644 index 00000000..37b29419 --- /dev/null +++ b/README_PERF_ANALYSIS.md @@ -0,0 +1,156 @@ +# HAKMEM Allocator Performance Analysis Results + +**分析実施日**: 2025-11-28 +**分析対象**: HAKMEM allocator (commit 0ce20bb83) +**ベンチマーク**: bench_random_mixed (1,000,000 ops, working set=256) +**ツール**: Linux perf (record/stat/report/annotate) + +--- + +## 📊 クイックサマリー + +| 指標 | HAKMEM | System malloc | 差分 | +|------|--------|---------------|------| +| **Throughput** | 55.7M ops/s | 86.7M ops/s | -35.7% ❌ | +| **IPC** | 2.12 | 2.09 | +1.4% ✅ | +| **Branch Miss** | 2.56% | 3.39% | -24.5% ✅ | +| **Cache Miss** | 9.28% | 13.26% | -30.0% ✅ | +| **Instructions** | 167M | 94M | +78.4% ❌ | +| **Cache Refs** | 1.86M | 340K | +448% ❌ | + +**結論**: 効率は良いが仕事量が多すぎる → 不要な処理の削減が最優先 + +--- + +## 📁 生成ファイル一覧 + +### メインレポート +1. **PERF_ANALYSIS_EXECUTIVE_SUMMARY.md** ⭐ + - エグゼクティブサマリー + - トップ3ボトルネック + - 最適化ロードマップ (Phase 1-3) + - すぐに試せるコマンド + +2. **perf_analysis_summary.md** + - 詳細分析レポート (9.4KB) + - 全ボトルネックの説明 + - 優先度付き最適化提案 (5項目) + - 実測効果予測 (楽観的/保守的シナリオ) + +3. **perf_comparison_chart.txt** + - 視覚的比較チャート + - ASCII バーグラフ形式 + +### 生データ +4. **perf_hakmem_stats.txt** - HAKMEM の perf stat 出力 +5. **perf_system_stats.txt** - System malloc の perf stat 出力 +6. **perf_hakmem_hotspots.txt** - ホットスポット詳細 (perf report) +7. **perf_hakmem_callgraph.txt** - コールグラフ (perf report -g) +8. **perf_annotate_malloc.txt** - malloc 関数のアセンブリアノテーション + +--- + +## 🔥 トップ3ボトルネック + +### 1. SuperSlab 初期化 (23.83% CPU時間) +- **原因**: 4つの memset() で 1MB-2MB をゼロクリア +- **対策**: memset 削除 (mmap は既にゼロ初期化済み) +- **効果**: +10-15% throughput +- **実装箇所**: `/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c:912-915` + +### 2. 多層分岐ルーティング (36M branches) +- **原因**: smallmid → tiny → mid → ACE の順次チェック +- **対策**: Dispatch table で一発判定 +- **効果**: +5-8% throughput + +### 3. 過剰なキャッシュアクセス (1.86M refs) +- **原因**: SuperSlab メタデータが大きい、Hot/Cold 混在 +- **対策**: Cache line 最適化 (hot fields を先頭64Bに集約) +- **効果**: +3-5% cache efficiency + +--- + +## 🎯 推奨アクション + +### すぐに試せる (1-2日) +```bash +cd /mnt/workdisk/public_share/hakmem + +# 1. memset 削除版 +cp core/hakmem_tiny_superslab.c core/hakmem_tiny_superslab.c.bak +sed -i '912,915s/^/\/\/ PERF_OPT: /' core/hakmem_tiny_superslab.c +make clean && make +./bench_random_mixed_hakmem 1000000 256 42 + +# 2. mincore 無効化版 +make clean +make CFLAGS="-DHAKMEM_DISABLE_MINCORE_CHECK=1" +./bench_random_mixed_hakmem 1000000 256 42 +``` + +**期待効果**: 55M → **63-67M ops/s** (+13-20%) + +--- + +## 📈 最適化ロードマップ + +| Phase | 実装期間 | 目標 | 施策 | +|-------|---------|------|------| +| **Phase 1** | 1-2日 | 65M ops/s (+17%) | memset削除, mincore無効化, likely hints | +| **Phase 2** | 1週間 | 77M ops/s (+39%) | dispatch table, 512KB SuperSlab, LTO, cache line | +| **Phase 3** | 2週間 | 詳細分析 | Valgrind, MT bench, workload別最適化 | + +--- + +## 🛠️ 使用したコマンド + +### プロファイリング +```bash +# ホットスポット分析 +perf record -g ./bench_random_mixed_hakmem 1000000 256 42 +perf report --stdio | head -100 > perf_hakmem_hotspots.txt + +# 統計比較 +perf stat -e cycles,instructions,cache-references,cache-misses,branches,branch-misses \ + ./bench_random_mixed_hakmem 1000000 256 42 2>&1 | tee perf_hakmem_stats.txt + +perf stat -e cycles,instructions,cache-references,cache-misses,branches,branch-misses \ + ./bench_random_mixed_system 1000000 256 42 2>&1 | tee perf_system_stats.txt + +# コールグラフ +perf report --stdio -g graph,0.5,caller --no-children | head -200 > perf_hakmem_callgraph.txt + +# アノテーション +perf annotate --stdio malloc > perf_annotate_malloc.txt +``` + +--- + +## 📚 関連ファイル + +### ソースコード +- `/mnt/workdisk/public_share/hakmem/core/box/hak_alloc_api.inc.h` - Alloc API +- `/mnt/workdisk/public_share/hakmem/core/box/hak_free_api.inc.h` - Free API +- `/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c` - SuperSlab 実装 +- `/mnt/workdisk/public_share/hakmem/core/hakmem_shared_pool.c` - Shared Pool + +### ベンチマーク +- `/mnt/workdisk/public_share/hakmem/bench_random_mixed_hakmem` - HAKMEM版 +- `/mnt/workdisk/public_share/hakmem/bench_random_mixed_system` - System malloc版 + +--- + +## 🔍 詳細を読むには + +1. **全体像を把握**: `PERF_ANALYSIS_EXECUTIVE_SUMMARY.md` を読む (5分) +2. **詳細な分析**: `perf_analysis_summary.md` を読む (15分) +3. **生データ確認**: `perf_hakmem_*.txt` ファイル群を参照 + +--- + +**次のステップ**: +1. `PERF_ANALYSIS_EXECUTIVE_SUMMARY.md` を開く +2. "すぐに試せるコマンド" を実行 +3. スループット改善を確認 + +**質問・フィードバック**: 分析者 Claude Code (Sonnet 4.5) diff --git a/perf_analysis_summary.md b/perf_analysis_summary.md new file mode 100644 index 00000000..1614c6f1 --- /dev/null +++ b/perf_analysis_summary.md @@ -0,0 +1,264 @@ +# HAKMEM アロケータ パフォーマンス分析レポート + +## 1. 実行環境 +- ベンチマーク: bench_random_mixed (1,000,000 ops, working set=256) +- プラットフォーム: Linux x86_64 +- perf_event_paranoid: 1 + +## 2. パフォーマンス統計比較 + +### HAKMEM アロケータ +``` +Throughput: 55,705,335 ops/s +Time: 0.018s +Cycles: 78,648,007 +Instructions: 167,028,675 +IPC: 2.12 +Cache References: 1,861,523 +Cache Misses: 172,740 (9.28%) +Branches: 35,993,722 +Branch Misses: 921,505 (2.56%) +``` + +### System malloc (glibc) +``` +Throughput: 86,683,664 ops/s (+55.6% faster) +Time: 0.012s +Cycles: 44,872,364 (-43.0% fewer cycles) +Instructions: 93,643,012 (-43.9% fewer instructions) +IPC: 2.09 (similar) +Cache References: 339,504 (-81.8% fewer) +Cache Misses: 45,009 (-73.9% fewer) +Branches: 16,572,153 (-53.9% fewer) +Branch Misses: 561,229 (-39.1% fewer) +``` + +## 3. ホットスポット分析 + +### CPU時間消費 (Top Functions) +1. **malloc**: 26.10% (self) / 39.22% (children) +2. **free**: 19.47% (self) / 40.23% (children) +3. **shared_pool_acquire_slab**: 23.83% (children only) +4. **Page fault handling**: 25.55% (kernel time) + +### 主要な発見 +- **Page faults が顕著**: 25.55% が asm_exc_page_fault 経由 + - `shared_pool_acquire_slab` → `__memset_avx2_unaligned_erms` → page fault + - `clear_page_erms` が 4.46% を消費 +- **memset overhead**: `__memset_avx2_unaligned_erms` が 6.41% +- **メモリ管理のオーバーヘッド**: kernel の folio/page 管理が目立つ + +## 4. ボトルネック特定 + +### 1. shared_pool_acquire_slab() の初期化コスト +- **問題**: memset → page fault → kernel page allocation +- **影響**: 23.83% の CPU 時間 +- **原因**: SuperSlab 獲得時の large memory clear (1MB/2MB) + +### 2. 過剰なキャッシュ参照 +- **HAKMEM**: 1,861,523 cache refs (system の 5.5倍) +- **Cache miss率**: 9.28% (system は 13.26% だがアクセス量が少ない) +- **分析**: データ構造のメモリフットプリントが大きい + +### 3. 分岐数の多さ +- **HAKMEM**: 35,993,722 branches (system の 2.2倍) +- **Branch miss率**: 2.56% (system は 3.39%) +- **分析**: 複雑な分岐ロジック (Front Gate, domain routing, etc.) + +### 4. 命令数の多さ +- **HAKMEM**: 167M instructions (system の 1.8倍) +- **分析**: 多層的なアロケーション戦略 (Tiny/Mid/ACE/BigCache) + +## 5. 最適化提案(優先度順) + +### 優先度1: SuperSlab 初期化の遅延化・削減 +**問題**: `shared_pool_acquire_slab()` で 23.83% の CPU 時間を消費 +- memset による 1MB-2MB のゼロクリア +- Page fault による kernel page allocation (clear_page_erms: 4.46%) + +**提案**: +1. **Lazy Initialization**: メタデータのゼロクリアを遅延化 + - mmap(MAP_ANONYMOUS) は既にゼロページを返すため、明示的な memset は不要 + - 4つの memset() 呼び出し(lines 912-915)を削除可能 + - 推定効果: **10-15% throughput 向上** + +2. **On-Demand Page Faulting**: + - MADV_DONTNEED または MADV_FREE を活用 + - 実際に使用される slab だけ page fault を起こす + - 推定効果: **5-10% throughput 向上** + +3. **SuperSlab Size 調整**: + - 現状: 1MB (lg=20) or 2MB (lg=21) + - 提案: 512KB (lg=19) or 256KB (lg=18) をデフォルトに + - 推定効果: **初期化コスト 50-75% 削減** + +**実装箇所**: `/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c:912-915` + +--- + +### 優先度2: Front Gate 分岐最適化 +**問題**: 35,993,722 branches (system の 2.2倍) +- Branch miss率は良好 (2.56%) だが絶対数が多い +- malloc/free の多層ルーティング (Tiny/Mid/ACE/BigCache) + +**提案**: +1. **Fast Path 統合**: + - 現状: smallmid → tiny → mid → ACE の順でチェック + - 提案: サイズレンジを統合して判定を1回に削減 + ```c + // Before: 4 separate checks + if (smallmid_is_in_range(size)) { ... } + if (size <= tiny_get_max_size()) { ... } + if (mid_is_in_range(size)) { ... } + if (size < threshold) { ... } + + // After: Single dispatch table + void* (*allocator)(size_t) = size_dispatch_table[size >> 8]; + return allocator(size); + ``` + - 推定効果: **5-8% throughput 向上** + +2. **Likely/Unlikely Hints 追加**: + - `/mnt/workdisk/public_share/hakmem/core/box/hak_alloc_api.inc.h:43-78` + - 使用頻度が高い Tiny path に `__builtin_expect()` + - 推定効果: **2-3% throughput 向上** + +--- + +### 優先度3: キャッシュライン最適化 +**問題**: 1,861,523 cache refs (system の 5.5倍) +- Cache miss率は 9.28% と許容範囲だが、アクセス回数が多すぎる + +**提案**: +1. **SuperSlab メタデータ構造の再配置**: + - Hot fields(freelist, used, capacity)を先頭 64 bytes に集約 + - Cold fields(LRU, statistics)を末尾に移動 + - `__attribute__((aligned(64)))` でキャッシュライン境界に整列 + - 推定効果: **3-5% cache miss 削減** + +2. **TLS Hot Slot の積極活用**: + - 現状: Stage 0 (L0 reuse) は既に実装済み (lines 802-832) + - 提案: L0 hit rate をモニタリングし、閾値調整 + - ENV: `HAKMEM_SS_L0_CAPACITY` でキャッシュサイズ拡大 + - 推定効果: **Stage 1-3 の呼び出し 20-30% 削減** + +--- + +### 優先度4: インライン化の最適化 +**問題**: 167M instructions (system の 1.8倍) +- 多層の関数呼び出しによる overhead + +**提案**: +1. **Critical Path のインライン化**: + - `fg_classify_domain()` - 既に static inline? + - `hak_tiny_free_fast_v2()` - 既に always_inline 化されている + - `smallmid_is_in_range()` / `mid_is_in_range()` を強制インライン + - 推定効果: **2-4% call overhead 削減** + +2. **LTO (Link Time Optimization) の有効化**: + - `-flto -fwhole-program` でコンパイル + - クロスモジュールのインライン化が可能に + - 推定効果: **5-8% code size 削減、2-3% throughput 向上** + +--- + +### 優先度5: mincore() 呼び出しの削減 +**問題**: free() 内の mincore() によるシステムコール overhead +- `/mnt/workdisk/public_share/hakmem/core/box/hak_free_api.inc.h:224-272` +- TLS page cache で緩和されているが、まだ overhead がある + +**提案**: +1. **Registry First Policy**: + - mincore() の前に必ず SuperSlab registry を先にチェック + - Registry hit ならヘッダー読み取り不要 + - 推定効果: **free() の 5-10% を高速化** + +2. **Compile-Time Option**: + - `HAKMEM_DISABLE_MINCORE_CHECK=1` を production default に + - Invalid pointer は極稀なので、クラッシュリスクは許容範囲 + - 推定効果: **free() の 10-15% を高速化** + +--- + +## 6. 実測効果の予測 + +### 楽観的シナリオ(全提案を実装) +| 最適化項目 | 予測効果 | +|-----------|---------| +| SuperSlab lazy init | +15% | +| Front Gate 統合 | +8% | +| Cache line 最適化 | +5% | +| Inline + LTO | +5% | +| mincore 削減 | +8% | +| **合計** | **+41%** (複合効果を考慮) | + +**目標スループット**: 55M → **77M ops/s** (system 86M の 89%) + +### 保守的シナリオ(優先度1-2のみ実装) +| 最適化項目 | 予測効果 | +|-----------|---------| +| SuperSlab lazy init | +12% | +| Front Gate 統合 | +5% | +| **合計** | **+17%** | + +**目標スループット**: 55M → **65M ops/s** (system 86M の 75%) + +--- + +## 7. 追加分析が必要な項目 + +### 7.1 メモリフットプリント +- **課題**: Cache refs が 5.5倍 → データ構造サイズが大きい可能性 +- **調査**: `sizeof(SuperSlab)`, `sizeof(TinySlabMeta)` の確認 +- **ツール**: Valgrind massif, heaptrack + +### 7.2 マルチスレッド性能 +- **課題**: 現在のベンチマークはシングルスレッド +- **調査**: pthread 環境での lock contention +- **ツール**: `perf record -e lock:contention_begin` + +### 7.3 Workload 別の最適戦略 +- **課題**: random_mixed 以外のパターン(sequential, burst, etc.) +- **調査**: ELO strategy の adaptive 効果測定 +- **ベンチマーク**: bench_comprehensive の全パターン実行 + +--- + +## 8. 次のステップ + +### Phase 1: Quick Wins (1-2日) +1. SuperSlab memset 削除 (lines 912-915) +2. HAKMEM_DISABLE_MINCORE_CHECK=1 でビルド・測定 +3. Front Gate に `__builtin_expect()` 追加 + +### Phase 2: 構造的改善 (1週間) +1. Front Gate dispatch table 実装 +2. SuperSlab size を 512KB に変更 +3. LTO 有効化 + +### Phase 3: 詳細分析 (2週間) +1. Valgrind/heaptrack でメモリプロファイリング +2. マルチスレッドベンチマーク追加 +3. Workload 別の最適化 + +--- + +## 9. 参考データ + +### ファイルパス +- perf データ: `/mnt/workdisk/public_share/hakmem/perf.data` +- ホットスポットレポート: `/mnt/workdisk/public_share/hakmem/perf_hakmem_hotspots.txt` +- 統計データ: `/mnt/workdisk/public_share/hakmem/perf_hakmem_stats.txt` +- コールグラフ: `/mnt/workdisk/public_share/hakmem/perf_hakmem_callgraph.txt` + +### 重要なソースファイル +- Alloc API: `/mnt/workdisk/public_share/hakmem/core/box/hak_alloc_api.inc.h` +- Free API: `/mnt/workdisk/public_share/hakmem/core/box/hak_free_api.inc.h` +- SuperSlab: `/mnt/workdisk/public_share/hakmem/core/hakmem_tiny_superslab.c` +- Shared Pool: `/mnt/workdisk/public_share/hakmem/core/hakmem_shared_pool.c` + +--- + +**レポート生成日**: 2025-11-28 +**分析対象**: HAKMEM allocator (commit 0ce20bb83) +**ベンチマーク**: bench_random_mixed_hakmem 1000000 256 42