Files
hakmem/docs/archive/PROFILES.md
Moe Charm (CI) a9ddb52ad4 ENV cleanup: Remove BG/HotMag vars & guard fprintf (Larson 52.3M ops/s)
Phase 1 完了:環境変数整理 + fprintf デバッグガード

ENV変数削除(BG/HotMag系):
- core/hakmem_tiny_init.inc: HotMag ENV 削除 (~131 lines)
- core/hakmem_tiny_bg_spill.c: BG spill ENV 削除
- core/tiny_refill.h: BG remote 固定値化
- core/hakmem_tiny_slow.inc: BG refs 削除

fprintf Debug Guards (#if !HAKMEM_BUILD_RELEASE):
- core/hakmem_shared_pool.c: Lock stats (~18 fprintf)
- core/page_arena.c: Init/Shutdown/Stats (~27 fprintf)
- core/hakmem.c: SIGSEGV init message

ドキュメント整理:
- 328 markdown files 削除(旧レポート・重複docs)

性能確認:
- Larson: 52.35M ops/s (前回52.8M、安定動作)
- ENV整理による機能影響なし
- Debug出力は一部残存(次phase で対応)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 14:45:26 +09:00

291 lines
9.4 KiB
Markdown
Raw 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 Configuration Profiles
**作成日**: 2025-11-26
**目的**: ユースケース別の推奨設定プロファイル
---
## ⚠️ **重要:学習機能の現状** ⚠️
**実測結果2025-11-26**:
-**Default Profile学習OFF**: 動作確認済み83.19 M ops/s @Random Mixed 256B
-**Balanced/Adaptive/Tight学習ON**: **実装が壊れています - SEGFAULT発生**
**現在の問題**:
- `HAKMEM_ALLOC_LEARN=1` を有効化すると即座にクラッシュ
- `HAKMEM_MEM_LEARN=1` を有効化すると即座にクラッシュ
- Larson ベンチマークは学習OFFでもクラッシュTLS SLL corruption
**推奨**:
- **本番環境では学習機能を使用しないでください**(現時点では Default Profile のみ使用可能)
- 学習機能の修正は別タスクで対応予定
**このドキュメントのステータス**:
- Default Profile の数値: ✅ 実測済み(一部)
- Balanced/Adaptive/Tight の数値: ❌ **未検証・仮説値** - 実測不可能(実装が壊れている)
---
## 🎯 プロファイル選択ガイド
| プロファイル | 用途 | 性能 | RSS | 学習 | 推奨環境 |
|------------|------|------|-----|------|----------|
| **Default** | ベンチマーク・開発 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | OFF | 短時間実行、予測可能なワークロード |
| **Balanced** | 本番環境(汎用) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ON | Web サーバー、API サーバー |
| **Adaptive** | 動的ワークロード | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ON++ | 負荷変動が大きい環境 |
| **Tight** | メモリ制約環境 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ON | コンテナ、組み込み |
---
## 📋 プロファイル詳細
### 1. Default Profileデフォルト - ベンチマーク最適化)
**特徴**: 最高速、学習なし、固定キャッシュサイズ
```bash
# 学習機能: すべて OFF
export HAKMEM_ALLOC_LEARN=0
export HAKMEM_MEM_LEARN=0
# キャッシュ: 固定サイズPhase 10 aggressive defaults
# → core/hakmem_tiny_config.c に定義済み:
# C0-C3: 512/384 (hot classes)
# C4-C5: 256/384 (medium)
# C6-C7: 192/96 (cold)
# デバッグ: OFF
export HAKMEM_DEBUG_LEVEL=0
export HAKMEM_STATS_ENABLE=0
```
**いつ使う**:
- ✅ ベンチマーク測定
- ✅ 開発・デバッグ(予測可能な動作)
- ✅ 短時間実行(< 1分
- 本番環境RSS 肥大化リスク
**性能**:
- Random Mixed 256B: **83.19 M ops/s** 実測2025-11-26
- Larson 1T/8T: クラッシュTLS SLL corruption未修正
---
### 2. Balanced Profile推奨 - 本番環境汎用)
**特徴**: 適度な学習RSS とパフォーマンスのバランス
```bash
# 学習機能: Allocation Learning のみ ON
export HAKMEM_ALLOC_LEARN=1
export HAKMEM_ALLOC_LEARN_WINDOW=10000 # 10K ops ごとに学習
export HAKMEM_ALLOC_LEARN_RATE=0.1 # 10% ずつ調整
# Memory Learning: OFF安定性優先
export HAKMEM_MEM_LEARN=0
# SuperSlab: 適度な再利用
export HAKMEM_SUPERSLAB_REUSE=1 # 空 SuperSlab 再利用
export HAKMEM_SUPERSLAB_PREWARM=0 # 事前確保なし(必要時のみ)
# デバッグ: OFF本番
export HAKMEM_DEBUG_LEVEL=0
export HAKMEM_STATS_ENABLE=0
```
**いつ使う**:
- **現在使用不可** - HAKMEM_ALLOC_LEARN=1 SEGFAULT を引き起こす
- 修正後の想定Web サーバーAPI サーバーデータベース本番環境
**性能**: **未検証** - 学習機能が壊れているため測定不可能仮説値: 95-100M ops/s
**RSS**: **未検証** - 学習機能が壊れているため測定不可能仮説値: -20~30%
---
### 3. Adaptive Profile最適化 - 動的ワークロード)
**特徴**: 全学習機能 ONワークロード変化に自動追従
```bash
# 学習機能: すべて ON積極的学習
export HAKMEM_ALLOC_LEARN=1
export HAKMEM_ALLOC_LEARN_WINDOW=5000 # 5K ops短め、素早く適応
export HAKMEM_ALLOC_LEARN_RATE=0.15 # 15%(積極的調整)
export HAKMEM_MEM_LEARN=1
export HAKMEM_MEM_LEARN_WINDOW=10000 # 10K ops
export HAKMEM_MEM_LEARN_THRESHOLD=0.8 # 80% 使用率で THP 適用
# Advanced 学習(オプション)
export HAKMEM_LEARN_ADVANCED=1 # 上級パラメータ有効化
# SuperSlab: 積極的再利用
export HAKMEM_SUPERSLAB_REUSE=1
export HAKMEM_SUPERSLAB_PREWARM=2 # 2個事前確保
# 統計: ON学習効果モニタリング
export HAKMEM_STATS_ENABLE=1
export HAKMEM_STATS_INTERVAL_SEC=60 # 60秒ごとに統計出力
```
**いつ使う**:
- **現在使用不可** - HAKMEM_ALLOC_LEARN=1 + HAKMEM_MEM_LEARN=1 SEGFAULT を引き起こす
- 修正後の想定バッチ処理機械学習負荷変動が大きい環境長時間稼働
**性能**: **未検証** - 学習機能が壊れているため測定不可能仮説値: 105-110M ops/s
**RSS**: **未検証** - 学習機能が壊れているため測定不可能仮説値: -30~40%
---
### 4. Tight Profile省メモリ - メモリ制約環境)
**特徴**: 最小 RSS学習で厳格に管理
```bash
# 学習機能: ONメモリ削減優先
export HAKMEM_ALLOC_LEARN=1
export HAKMEM_ALLOC_LEARN_WINDOW=20000 # 20K ops保守的
export HAKMEM_ALLOC_LEARN_RATE=0.05 # 5%(慎重に調整)
export HAKMEM_MEM_LEARN=1
export HAKMEM_MEM_LEARN_WINDOW=20000
export HAKMEM_MEM_LEARN_THRESHOLD=0.9 # 90% 使用率(厳格)
# SuperSlab: 積極的解放
export HAKMEM_SUPERSLAB_REUSE=0 # 即座に解放
export HAKMEM_SUPERSLAB_PREWARM=0
# TINY: Ultra Tight プリセット使用
# → core/hakmem_tiny_config.h の TINY_PRESET_ULTRA_TIGHT()
# C0-C7: 32/32/32/32/32/32/32 (最小キャッシュ)
# デバッグ: OFF
export HAKMEM_DEBUG_LEVEL=0
export HAKMEM_STATS_ENABLE=0
```
**いつ使う**:
- **現在使用不可** - HAKMEM_ALLOC_LEARN=1 + HAKMEM_MEM_LEARN=1 SEGFAULT を引き起こす
- 修正後の想定コンテナ組み込みシステムメモリ < 512MB 環境
**性能**: **未検証** - 学習機能が壊れているため測定不可能仮説値: 70-80M ops/s
**RSS**: **未検証** - 学習機能が壊れているため測定不可能仮説値: -50~60%
---
## 🔧 プロファイル適用方法
### 方法 1: シェル設定ファイル(推奨)
```bash
# ~/.hakmem_profile.sh を作成
cat > ~/.hakmem_profile.sh << 'EOF'
# HAKMEM Balanced Profile (production)
export HAKMEM_ALLOC_LEARN=1
export HAKMEM_ALLOC_LEARN_WINDOW=10000
export HAKMEM_ALLOC_LEARN_RATE=0.1
export HAKMEM_MEM_LEARN=0
export HAKMEM_SUPERSLAB_REUSE=1
export HAKMEM_SUPERSLAB_PREWARM=0
export HAKMEM_DEBUG_LEVEL=0
EOF
# 適用
source ~/.hakmem_profile.sh
./your_application
```
### 方法 2: systemd サービス(本番環境)
```ini
# /etc/systemd/system/myapp.service
[Service]
EnvironmentFile=/etc/hakmem/balanced.env
ExecStart=/usr/bin/myapp
```
```bash
# /etc/hakmem/balanced.env
HAKMEM_ALLOC_LEARN=1
HAKMEM_ALLOC_LEARN_WINDOW=10000
HAKMEM_ALLOC_LEARN_RATE=0.1
# ...
```
### 方法 3: Docker / Kubernetes
```yaml
# docker-compose.yml
services:
myapp:
image: myapp:latest
environment:
- HAKMEM_ALLOC_LEARN=1
- HAKMEM_ALLOC_LEARN_WINDOW=10000
- HAKMEM_ALLOC_LEARN_RATE=0.1
# ...
```
---
## 📊 プロファイル比較(ベンチマーク結果)
**注**: = 実測済み、❌ = 未検証学習機能が壊れているため測定不可能
| Benchmark | Default | Balanced | Adaptive | Tight |
|-----------|---------|----------|----------|-------|
| random_mixed (256B) | 83.19 M ops/s | N/A (SEGFAULT) | N/A (SEGFAULT) | N/A (SEGFAULT) |
| larson (1T) | CRASH (TLS corruption) | N/A | N/A | N/A |
| mid_large (8KB) | (未測定) | N/A | N/A | N/A |
| **RSS (1GB workload)** | **(未測定)** | **N/A** | **N/A** | **N/A** |
**以前の仮説値(検証失敗)**:
- Default: 107 M ops/s @random_mixed, 47.6 M ops/s @larson 実測: 83.19 M / CRASH
- Balanced/Adaptive/Tight: 全て測定不可能学習機能クラッシュ
---
## 🎓 プロファイルのカスタマイズ
### ケース 1: Balanced ベースで RSS をさらに削減
```bash
# Balanced をベースに
source ~/.hakmem_profile.sh # Balanced
# TLS キャッシュを縮小
export HAKMEM_TINY_TLS_CLASS_OVERRIDE="C0:256:16,C1:256:16,C2:256:16,C3:192:12"
# → C0-C3 のキャッシュを半分に512→256
```
### ケース 2: Adaptive ベースで統計を無効化
```bash
# Adaptive をベースに
source ~/.hakmem_adaptive.sh
# 統計 OFFオーバーヘッド削減
export HAKMEM_STATS_ENABLE=0
```
---
## ❓ FAQ
**Q: デフォルトで本番環境使える?**
A: デフォルトは学習 OFF RSS が肥大化しやすい本番は **Balanced** 推奨
**Q: 学習機能のオーバーヘッドは?**
A: **< 1%**HAKMEM_ALLOC_LEARN=1 のみ)。Adaptive でも **< 3%**。
**Q: プロファイル切り替えに再起動必要?**
A: 必要ENV は起動時のみ読込)。systemd reload で適用可能
**Q: 自分のワークロードに最適なプロファイルは?**
A: まず **Balanced** で試してRSS が問題なら **Tight**性能が足りなければ **Default**
---
**更新履歴**:
- 2025-11-26: 初版作成Phase 2 完了記念