Document learning system critical bugs discovered during benchmark validation
(cherry-picked from 2c99afa49)
This commit is contained in:
255
LEARNING_BENCHMARK_TASK.md
Normal file
255
LEARNING_BENCHMARK_TASK.md
Normal file
@ -0,0 +1,255 @@
|
||||
# Learning System Benchmark Task
|
||||
|
||||
**目的**: PROFILES.md の数値を実測データで裏付ける
|
||||
**提案者**: ChatGPT先生
|
||||
**実測者**: Task先生(この文書を元に計測)
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ **実測結果:学習機能が壊れています** ⚠️
|
||||
|
||||
**測定日**: 2025-11-26
|
||||
|
||||
**発見された重大バグ**:
|
||||
1. ❌ `HAKMEM_ALLOC_LEARN=1` を有効化すると即座に SEGFAULT
|
||||
2. ❌ `HAKMEM_MEM_LEARN=1` を有効化すると即座に SEGFAULT
|
||||
3. ❌ Larson ベンチマーク: 学習OFFでも SEGFAULT(TLS SLL corruption)
|
||||
|
||||
**測定可能だった項目**:
|
||||
- ✅ Baseline Random Mixed 256B: **83.19 M ops/s** (学習OFF)
|
||||
|
||||
**測定不可能だった項目**:
|
||||
- ❌ Pattern 1 (Alloc Learning): SEGFAULT
|
||||
- ❌ Pattern 2 (Memory Learning): SEGFAULT
|
||||
- ❌ Pattern 3 (Both ON): SEGFAULT
|
||||
- ❌ Larson 1T/8T: SEGFAULT (学習OFF含む全設定)
|
||||
|
||||
**結論**:
|
||||
- PROFILES.md の学習関連の全ての数値は **検証不可能** です
|
||||
- 学習機能の実装に重大なバグが存在します
|
||||
- 修正後に再測定が必要です
|
||||
|
||||
**詳細レポート**: このタスクで生成されたレポートを参照
|
||||
|
||||
---
|
||||
|
||||
## 📊 検証パターン(3パターン)
|
||||
|
||||
### Pattern 1: Alloc Learning のみ ON
|
||||
|
||||
```bash
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=10000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.08
|
||||
export HAKMEM_MEM_LEARN=0
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
```
|
||||
|
||||
**期待**: 性能 ±3%以内、RSS -10~20%
|
||||
|
||||
---
|
||||
|
||||
### Pattern 2: Memory Learning のみ ON
|
||||
|
||||
```bash
|
||||
export HAKMEM_ALLOC_LEARN=0
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=20000
|
||||
export HAKMEM_MEM_LEARN_THRESHOLD=0.7
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
```
|
||||
|
||||
**期待**: 性能 ±3%以内、RSS -10~30%
|
||||
|
||||
---
|
||||
|
||||
### Pattern 3: 両方 ON(攻め)
|
||||
|
||||
```bash
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=8000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.12
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=12000
|
||||
export HAKMEM_MEM_LEARN_THRESHOLD=0.8
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
```
|
||||
|
||||
**期待**: 性能 -0~5%、RSS -20~40%
|
||||
|
||||
---
|
||||
|
||||
## 🔧 ベンチマーク実行方法
|
||||
|
||||
### Baseline (学習 OFF - 現在のデフォルト)
|
||||
|
||||
```bash
|
||||
# 学習機能を明示的に OFF
|
||||
unset HAKMEM_ALLOC_LEARN
|
||||
unset HAKMEM_MEM_LEARN
|
||||
unset HAKMEM_ALLOC_LEARN_WINDOW
|
||||
unset HAKMEM_ALLOC_LEARN_RATE
|
||||
unset HAKMEM_MEM_LEARN_WINDOW
|
||||
unset HAKMEM_MEM_LEARN_THRESHOLD
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
# Random Mixed 256B (10M iterations)
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
|
||||
# Larson 1T (10秒)
|
||||
./out/release/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
|
||||
# Larson 8T (10秒)
|
||||
./out/release/larson_hakmem 8 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
**記録項目**:
|
||||
- Random Mixed: ops/s
|
||||
- Larson 1T: ops/s
|
||||
- Larson 8T: ops/s
|
||||
- RSS: /proc/self/status の VmRSS(開始時・終了時)
|
||||
|
||||
---
|
||||
|
||||
### Pattern 1 測定
|
||||
|
||||
```bash
|
||||
# Pattern 1 設定
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=10000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.08
|
||||
export HAKMEM_MEM_LEARN=0
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
# 同じベンチマーク3つ実行
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
./out/release/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
./out/release/larson_hakmem 8 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
**記録項目**: 同上
|
||||
|
||||
---
|
||||
|
||||
### Pattern 2 測定
|
||||
|
||||
```bash
|
||||
# Pattern 2 設定
|
||||
export HAKMEM_ALLOC_LEARN=0
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=20000
|
||||
export HAKMEM_MEM_LEARN_THRESHOLD=0.7
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
# 同じベンチマーク3つ実行
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
./out/release/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
./out/release/larson_hakmem 8 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
**記録項目**: 同上
|
||||
|
||||
---
|
||||
|
||||
### Pattern 3 測定
|
||||
|
||||
```bash
|
||||
# Pattern 3 設定
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=8000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.12
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=12000
|
||||
export HAKMEM_MEM_LEARN_THRESHOLD=0.8
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
# 同じベンチマーク3つ実行
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
./out/release/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
./out/release/larson_hakmem 8 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
**記録項目**: 同上
|
||||
|
||||
---
|
||||
|
||||
## 📋 結果フォーマット
|
||||
|
||||
各パターンについて以下を記録:
|
||||
|
||||
```
|
||||
Pattern: [Baseline/Pattern1/Pattern2/Pattern3]
|
||||
Random Mixed 256B (10M):
|
||||
- ops/s: XXX.XX M ops/s
|
||||
- RSS start: XXX MB
|
||||
- RSS end: XXX MB
|
||||
- RSS delta: +XXX MB
|
||||
|
||||
Larson 1T (10s):
|
||||
- ops/s: XXX.XX M ops/s
|
||||
- RSS start: XXX MB
|
||||
- RSS end: XXX MB
|
||||
- RSS delta: +XXX MB
|
||||
|
||||
Larson 8T (10s):
|
||||
- ops/s: XXX.XX M ops/s
|
||||
- RSS start: XXX MB
|
||||
- RSS end: XXX MB
|
||||
- RSS delta: +XXX MB
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 成功基準
|
||||
|
||||
### Pattern 1 (Alloc Learning のみ)
|
||||
|
||||
- ✅ **性能**: Random Mixed/Larson が Baseline 比 -3% 以内
|
||||
- ✅ **RSS**: Baseline 比 -10% 以上削減
|
||||
|
||||
### Pattern 2 (Memory Learning のみ)
|
||||
|
||||
- ✅ **性能**: Random Mixed/Larson が Baseline 比 -3% 以内
|
||||
- ✅ **RSS**: Baseline 比 -10% 以上削減
|
||||
|
||||
### Pattern 3 (両方 ON)
|
||||
|
||||
- ✅ **性能**: Random Mixed/Larson が Baseline 比 -5% 以内
|
||||
- ✅ **RSS**: Baseline 比 -20% 以上削減
|
||||
|
||||
---
|
||||
|
||||
## 📊 期待される結果(仮説)
|
||||
|
||||
| Pattern | Random Mixed | Larson 1T | Larson 8T | RSS 削減 |
|
||||
|---------|--------------|-----------|-----------|----------|
|
||||
| Baseline | 107 M ops/s | 47.6 M ops/s | 48.2 M ops/s | 0% (基準) |
|
||||
| Pattern 1 | 104-107 M ops/s | 46-48 M ops/s | 47-49 M ops/s | -10~20% |
|
||||
| Pattern 2 | 104-107 M ops/s | 46-48 M ops/s | 47-49 M ops/s | -10~30% |
|
||||
| Pattern 3 | 102-107 M ops/s | 45-48 M ops/s | 46-49 M ops/s | -20~40% |
|
||||
|
||||
**注**: これらは仮説値。実測で検証する。
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Task先生への依頼
|
||||
|
||||
1. **ビルド確認**: `./build.sh bench_random_mixed_hakmem larson_hakmem`
|
||||
2. **Baseline 測定**: 学習 OFF で3ベンチマーク実行
|
||||
3. **Pattern 1-3 測定**: 各パターンで3ベンチマーク実行
|
||||
4. **結果レポート**: 上記フォーマットで結果を報告
|
||||
5. **PROFILES.md 更新**: 実測データで数値を差し替え
|
||||
|
||||
**所要時間**: 約 10-15分(4パターン × 3ベンチマーク)
|
||||
|
||||
---
|
||||
|
||||
**作成日**: 2025-11-26
|
||||
**ChatGPT先生からの指摘**: 「数値に根拠がない」 → 実測で検証!
|
||||
284
LEARNING_SYSTEM_BUGS_P0.md
Normal file
284
LEARNING_SYSTEM_BUGS_P0.md
Normal file
@ -0,0 +1,284 @@
|
||||
# P0: Learning System Critical Bugs
|
||||
|
||||
**発見日**: 2025-11-26
|
||||
**発見者**: Benchmark validation task (LEARNING_BENCHMARK_TASK.md 実行中)
|
||||
**重要度**: **P0 - CRITICAL** (本番環境使用不可)
|
||||
|
||||
---
|
||||
|
||||
## 📋 バグサマリー
|
||||
|
||||
学習機能を有効化すると即座にクラッシュします。PROFILES.md で推奨していた Balanced/Adaptive/Tight プロファイルは **全て使用不可能** です。
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Bug #1: HAKMEM_ALLOC_LEARN=1 で即座に SEGFAULT
|
||||
|
||||
### 再現手順
|
||||
|
||||
```bash
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=10000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.08
|
||||
export HAKMEM_MEM_LEARN=0
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
```
|
||||
|
||||
### 期待される動作
|
||||
|
||||
ベンチマークが正常に実行され、学習機能が TLS キャッシュ容量を動的に調整する。
|
||||
|
||||
### 実際の動作
|
||||
|
||||
```
|
||||
Segmentation fault (exit code 139)
|
||||
```
|
||||
|
||||
即座にクラッシュ。ベンチマークは 1 iteration も実行されない。
|
||||
|
||||
### 影響範囲
|
||||
|
||||
- ❌ Balanced Profile (HAKMEM_ALLOC_LEARN=1 使用) → 使用不可能
|
||||
- ❌ Adaptive Profile (HAKMEM_ALLOC_LEARN=1 使用) → 使用不可能
|
||||
- ❌ Tight Profile (HAKMEM_ALLOC_LEARN=1 使用) → 使用不可能
|
||||
|
||||
### 関連ファイル
|
||||
|
||||
- `core/hakmem_alloc_learner.c` - Allocation learning 実装
|
||||
- `core/hakmem_learner.c` - Learning system 基盤
|
||||
- `core/tiny_adaptive_sizing.c` - Adaptive sizing (学習駆動)
|
||||
|
||||
### デバッグ情報
|
||||
|
||||
**初期調査推奨コマンド**:
|
||||
```bash
|
||||
# AddressSanitizer で実行
|
||||
./build.sh debug bench_random_mixed_hakmem
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
export HAKMEM_ALLOC_LEARN_WINDOW=10000
|
||||
export HAKMEM_ALLOC_LEARN_RATE=0.08
|
||||
./out/debug/bench_random_mixed_hakmem 1000 256 42 # 短い実行で確認
|
||||
```
|
||||
|
||||
**予想される原因**:
|
||||
- 未初期化ポインタ / null pointer dereference
|
||||
- Learning system constructor の初期化順序問題
|
||||
- TLS storage との競合
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Bug #2: HAKMEM_MEM_LEARN=1 で即座に SEGFAULT
|
||||
|
||||
### 再現手順
|
||||
|
||||
```bash
|
||||
export HAKMEM_ALLOC_LEARN=0
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=20000
|
||||
export HAKMEM_MEM_LEARN_THRESHOLD=0.7
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
```
|
||||
|
||||
### 期待される動作
|
||||
|
||||
ベンチマークが正常に実行され、Memory Learning が THP/WMAX 閾値を動的に調整する。
|
||||
|
||||
### 実際の動作
|
||||
|
||||
```
|
||||
Segmentation fault (exit code 139)
|
||||
```
|
||||
|
||||
即座にクラッシュ。
|
||||
|
||||
### 影響範囲
|
||||
|
||||
- ❌ Adaptive Profile (HAKMEM_MEM_LEARN=1 使用) → 使用不可能
|
||||
- ❌ Tight Profile (HAKMEM_MEM_LEARN=1 使用) → 使用不可能
|
||||
|
||||
### 関連ファイル
|
||||
|
||||
- `core/hakmem_mem_learner.c` - Memory learning 実装
|
||||
- `core/hakmem_learner.c` - Learning system 基盤
|
||||
|
||||
### デバッグ情報
|
||||
|
||||
**初期調査推奨コマンド**:
|
||||
```bash
|
||||
./build.sh debug bench_random_mixed_hakmem
|
||||
export HAKMEM_MEM_LEARN=1
|
||||
export HAKMEM_MEM_LEARN_WINDOW=20000
|
||||
./out/debug/bench_random_mixed_hakmem 1000 256 42
|
||||
```
|
||||
|
||||
**予想される原因**:
|
||||
- Bug #1 と同様の初期化問題
|
||||
- Memory statistics 収集インフラとの連携不備
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Bug #3: Larson ベンチマークで TLS SLL corruption
|
||||
|
||||
### 再現手順
|
||||
|
||||
```bash
|
||||
# 学習機能は OFF(デフォルト)
|
||||
unset HAKMEM_ALLOC_LEARN
|
||||
unset HAKMEM_MEM_LEARN
|
||||
|
||||
./out/release/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
### 期待される動作
|
||||
|
||||
Larson ベンチマークが正常に実行され、alloc/free の混合ワークロードを 10 秒間実行する。
|
||||
|
||||
### 実際の動作
|
||||
|
||||
```
|
||||
TLS_SLL_NORMALIZE_USERPTR error
|
||||
Segmentation fault (exit code 139)
|
||||
```
|
||||
|
||||
学習機能OFFでもクラッシュ。
|
||||
|
||||
### マルチスレッド版(8T)
|
||||
|
||||
```bash
|
||||
./out/release/larson_hakmem 8 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
**結果**:
|
||||
```
|
||||
TLS_SLL_PUSH_META_MISMATCH: cls=0 meta_cls=1
|
||||
Segmentation fault (exit code 139)
|
||||
```
|
||||
|
||||
### 影響範囲
|
||||
|
||||
- ❌ Larson 1T: 使用不可能(全プロファイル)
|
||||
- ❌ Larson 8T: 使用不可能(全プロファイル)
|
||||
- ❌ PROFILES.md の Larson 性能値: 全て検証不可能
|
||||
|
||||
### 関連ファイル
|
||||
|
||||
- `benchmarks/larson.c` - Larson ベンチマーク実装
|
||||
- `core/box/tls_sll_box.h` - TLS SLL (Single Linked List) 実装
|
||||
- `core/hakmem_tiny.c` - TINY allocator core
|
||||
|
||||
### デバッグ情報
|
||||
|
||||
**エラーメッセージの意味**:
|
||||
- `TLS_SLL_NORMALIZE_USERPTR error`: User pointer から base pointer への変換失敗
|
||||
- `TLS_SLL_PUSH_META_MISMATCH`: Metadata の class index 不一致
|
||||
|
||||
**予想される原因**:
|
||||
- マルチスレッド環境での TLS state corruption
|
||||
- Class index の誤判定(cls=0 vs meta_cls=1)
|
||||
- Race condition in freelist management
|
||||
|
||||
**初期調査推奨コマンド**:
|
||||
```bash
|
||||
# ThreadSanitizer で実行
|
||||
./build.sh debug larson_hakmem
|
||||
export TSAN_OPTIONS="halt_on_error=1"
|
||||
./out/debug/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 動作確認済みの設定
|
||||
|
||||
### ✅ Baseline (学習OFF, Random Mixed のみ)
|
||||
|
||||
```bash
|
||||
unset HAKMEM_ALLOC_LEARN
|
||||
unset HAKMEM_MEM_LEARN
|
||||
export HAKMEM_SUPERSLAB_REUSE=1
|
||||
export HAKMEM_SUPERSLAB_PREWARM=0
|
||||
|
||||
./out/release/bench_random_mixed_hakmem 10000000 256 42
|
||||
```
|
||||
|
||||
**結果**: **83.19 M ops/s** ✅
|
||||
|
||||
これは **唯一動作確認できた設定** です。
|
||||
|
||||
---
|
||||
|
||||
## 🔧 修正優先順位
|
||||
|
||||
### P0 (即座に修正が必要)
|
||||
|
||||
1. **Bug #1: HAKMEM_ALLOC_LEARN=1 crash**
|
||||
- 影響: Balanced/Adaptive/Tight プロファイル全滅
|
||||
- 修正なしでは学習機能が一切使えない
|
||||
|
||||
2. **Bug #2: HAKMEM_MEM_LEARN=1 crash**
|
||||
- 影響: Adaptive/Tight プロファイル
|
||||
- Bug #1 と同時修正推奨(共通の初期化問題の可能性)
|
||||
|
||||
3. **Bug #3: Larson benchmark crash**
|
||||
- 影響: 全プロファイルで Larson が使えない
|
||||
- TLS corruption は他のワークロードにも影響の可能性
|
||||
|
||||
---
|
||||
|
||||
## 📝 次のステップ
|
||||
|
||||
### 1. デバッグビルドで原因特定
|
||||
|
||||
```bash
|
||||
# ASan + TSan ビルド
|
||||
./build.sh debug bench_random_mixed_hakmem
|
||||
./build.sh debug larson_hakmem
|
||||
|
||||
# Bug #1 調査
|
||||
export HAKMEM_ALLOC_LEARN=1
|
||||
./out/debug/bench_random_mixed_hakmem 1000 256 42
|
||||
|
||||
# Bug #3 調査
|
||||
./out/debug/larson_hakmem 1 10 1 1000 100 10000 42
|
||||
```
|
||||
|
||||
### 2. Learning system の無効化パッチ(暫定対応)
|
||||
|
||||
学習機能を完全に無効化するコンパイル時フラグを追加:
|
||||
|
||||
```c
|
||||
// core/hakmem_learner.c
|
||||
#ifndef HAKMEM_DISABLE_LEARNING
|
||||
// learning code here
|
||||
#else
|
||||
// no-op stubs
|
||||
#endif
|
||||
```
|
||||
|
||||
これにより、修正完了まで学習機能を安全に無効化できる。
|
||||
|
||||
### 3. ドキュメント更新(完了)
|
||||
|
||||
- ✅ PROFILES.md: 警告追加、学習関連数値を「未検証」に変更
|
||||
- ✅ LEARNING_BENCHMARK_TASK.md: 実測結果を反映
|
||||
- ✅ このバグレポート作成
|
||||
|
||||
---
|
||||
|
||||
## 📚 関連ドキュメント
|
||||
|
||||
- `PROFILES.md` - 設定プロファイル(学習機能が壊れていることを記載済み)
|
||||
- `LEARNING_BENCHMARK_TASK.md` - ベンチマーク計測タスク(実測結果を記載済み)
|
||||
- `DEPRECATED.md` - 学習関連の環境変数マッピング
|
||||
- `CLAUDE.md` - 開発ログ(学習機能の期待値が記載されている)
|
||||
|
||||
---
|
||||
|
||||
**作成日**: 2025-11-26
|
||||
**ステータス**: 🔴 OPEN - 修正待ち
|
||||
**担当者**: TBD
|
||||
290
PROFILES.md
Normal file
290
PROFILES.md
Normal file
@ -0,0 +1,290 @@
|
||||
# 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 完了記念)
|
||||
Reference in New Issue
Block a user