Files
hakmem/core/hakmem_phase7_config.h
Moe Charm (CI) acc64f2438 Phase ML1: Pool v1 memset 89.73% overhead 軽量化 (+15.34% improvement)
## Summary
- ChatGPT により bench_profile.h の setenv segfault を修正(RTLD_NEXT 経由に切り替え)
- core/box/pool_zero_mode_box.h 新設:ENV キャッシュ経由で ZERO_MODE を統一管理
- core/hakmem_pool.c で zero mode に応じた memset 制御(FULL/header/off)
- A/B テスト結果:ZERO_MODE=header で +15.34% improvement(1M iterations, C6-heavy)

## Files Modified
- core/box/pool_api.inc.h: pool_zero_mode_box.h include
- core/bench_profile.h: glibc setenv → malloc+putenv(segfault 回避)
- core/hakmem_pool.c: zero mode 参照・制御ロジック
- core/box/pool_zero_mode_box.h (新設): enum/getter
- CURRENT_TASK.md: Phase ML1 結果記載

## Test Results
| Iterations | ZERO_MODE=full | ZERO_MODE=header | Improvement |
|-----------|----------------|-----------------|------------|
| 10K       | 3.06 M ops/s   | 3.17 M ops/s    | +3.65%     |
| 1M        | 23.71 M ops/s  | 27.34 M ops/s   | **+15.34%** |

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

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2025-12-10 09:08:18 +09:00

138 lines
5.0 KiB
C
Raw Permalink 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.

// hakmem_phase7_config.h - Phase 7 定数・パラメータ集約ヘッダー
// Purpose: Phase 7の重要な定数数値・閾値を一箇所に集約忘れないように
// Usage: Phase 7のコードから include される
//
// 注意: コンパイル時フラグON/OFFは hakmem_build_flags.h で定義
// このファイルは数値定数・パラメータのみ!
#ifndef HAKMEM_PHASE7_CONFIG_H
#define HAKMEM_PHASE7_CONFIG_H
#include "hakmem_build_flags.h" // Phase 7 フラグを取得
// ========================================
// 【重要】フラグと定数の役割分担
// ========================================
//
// hakmem_build_flags.h (既存):
// - コンパイル時 ON/OFF フラグ
// - HAKMEM_TINY_HEADER_CLASSIDX (Task 1)
// - HAKMEM_TINY_AGGRESSIVE_INLINE (Task 2)
// - HAKMEM_TINY_PREWARM_TLS (Task 3)
// - HAKMEM_TINY_REFILL_DEFAULT (16)
//
// hakmem_phase7_config.h (このファイル):
// - Phase 7 専用の数値定数・閾値
// - 性能目標値
// - チューニングパラメータ
// - ドキュメント・使い方
// ========================================
// ========================================
// Phase 7 重要定数(チューニングパラメータ)
// ========================================
// Refill count 範囲hakmem_build_flags.h で HAKMEM_TINY_REFILL_DEFAULT=16 が定義済み)
// 環境変数 HAKMEM_TINY_REFILL_COUNT で上書き可能
#ifndef HAKMEM_TINY_REFILL_MIN
# define HAKMEM_TINY_REFILL_MIN 8
#endif
#ifndef HAKMEM_TINY_REFILL_MAX
# define HAKMEM_TINY_REFILL_MAX 256
#endif
// TLS cache capacity デフォルト値
// 小さすぎる: 頻繁な refill → 遅い
// 大きすぎる: メモリ浪費、cache miss 増加
#ifndef HAKMEM_TINY_TLS_CAP_DEFAULT
# define HAKMEM_TINY_TLS_CAP_DEFAULT 64
#endif
// Pre-warm count (Task 3)
// 初期化時に各クラスに何個のブロックを事前割り当てするか
#ifndef HAKMEM_TINY_PREWARM_COUNT
# define HAKMEM_TINY_PREWARM_COUNT 16
#endif
// ========================================
// Phase 7 Header Magic (Task 1)
// ========================================
// Note: これらの定数は tiny_region_id.h でも定義されています
// ここは参照・ドキュメント用です
// Header format: 1 byte before each block
// Bits 0-3: class_idx (0-15, only 0-7 used for Tiny)
// Bits 4-7: magic (0xA for validation)
// 実装: core/tiny_region_id.h:36-37 を参照
// ========================================
// Phase 7 Performance Targets
// ========================================
// Target: 40-55% of System malloc (27-37M ops/s on typical hardware)
// Current baseline: 21M ops/s (31% of System)
// After Tasks 1-5: 27-37M ops/s (40-55% of System) ← 目標!
#ifndef HAKMEM_PHASE7_TARGET_MIN_PERCENT
# define HAKMEM_PHASE7_TARGET_MIN_PERCENT 40 // 最低目標: 40% of System
#endif
#ifndef HAKMEM_PHASE7_TARGET_MAX_PERCENT
# define HAKMEM_PHASE7_TARGET_MAX_PERCENT 55 // 最高目標: 55% of System
#endif
// ========================================
// Phase 7 環境変数リスト(ドキュメント用)
// ========================================
// Runtime tunable via environment variables:
//
// HAKMEM_TINY_REFILL_COUNT=<n> 全クラスの refill count
// HAKMEM_TINY_REFILL_COUNT_HOT=<n> class 0-3 の refill count
// HAKMEM_TINY_REFILL_COUNT_MID=<n> class 4-7 の refill count
// HAKMEM_TINY_REFILL_COUNT_C0=<n> class 0 の refill count (個別設定)
// HAKMEM_TINY_REFILL_COUNT_C1=<n> class 1 の refill count
// ... (C2-C7も同様)
//
// HAKMEM_TINY_TLS_CAP=<n> TLS cache capacity (default: 64)
// HAKMEM_TINY_PREWARM=<0|1> Pre-warm TLS cache at init
// HAKMEM_TINY_PROFILE=<0|1> Enable profiling counters
//
// Example:
// HAKMEM_TINY_REFILL_COUNT=32 ./bench_random_mixed_hakmem 100000 128 1234567
// ========================================
// Phase 7 ステータス2025-11-08 現在)
// ========================================
// Task 1: ✅ COMPLETE (Skip magic validation in release)
// Task 2: ✅ COMPLETE (Aggressive inline TLS macros)
// Task 3: 🔄 IN PROGRESS (Pre-warm + refill simplification)
// Task 4: ⏳ PENDING (PGO)
// Task 5: ⏳ PENDING (Full validation)
// Task 6: ✅ COMPLETE (このファイル!)
// ========================================
// 使い方(忘れないように!)
// ========================================
// 1. 開発中(デバッグ):
// make clean && make bench_random_mixed_hakmem larson_hakmem
//
// 2. Phase 7 最適化テスト:
// make phase7-bench
//
// 3. Phase 7 完全ビルド:
// make HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1 PREWARM_TLS=1
// bench_random_mixed_hakmem larson_hakmem
//
// 4. PGO ビルド (Task 4):
// make PROFILE_GEN=1 bench_random_mixed_hakmem
// ./bench_random_mixed_hakmem 100000 128 1234567 # プロファイル収集
// make clean
// make PROFILE_USE=1 HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1
// bench_random_mixed_hakmem
#endif // HAKMEM_PHASE7_CONFIG_H