## 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>
138 lines
5.0 KiB
C
138 lines
5.0 KiB
C
// 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
|