2025-11-08 12:54:52 +09:00
|
|
|
|
// 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 完全ビルド:
|
2025-12-10 09:08:18 +09:00
|
|
|
|
// make HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1 PREWARM_TLS=1
|
2025-11-08 12:54:52 +09:00
|
|
|
|
// 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
|
2025-12-10 09:08:18 +09:00
|
|
|
|
// make PROFILE_USE=1 HEADER_CLASSIDX=1 AGGRESSIVE_INLINE=1
|
2025-11-08 12:54:52 +09:00
|
|
|
|
// bench_random_mixed_hakmem
|
|
|
|
|
|
|
|
|
|
|
|
#endif // HAKMEM_PHASE7_CONFIG_H
|