Files
hakmem/docs/archive/LEARNING_SYSTEM_BUGS_P0.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

8.5 KiB
Raw Blame History

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

再現手順

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 (学習駆動)

デバッグ情報

初期調査推奨コマンド:

# 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

再現手順

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 基盤

デバッグ情報

初期調査推奨コマンド:

./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

⚠️ 根本原因特定済み2025-11-26

First Bad Commit: 19c1abfe7 "Fix Unified Cache TLS SLL bypass" Last Working Commit: 5c8567562 "Add callsite tracking for tls_sll_push/pop"

🔧 回避策(即座に利用可能)

# larson-fix ブランチに切り替え(動作確認済み: 51.54 M ops/s
git checkout larson-fix
./build.sh larson_hakmem
./out/release/larson_hakmem 1 5 1 1000 100 10000 42

再現手順

# master ブランチ(クラッシュする)
git checkout master
./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でもクラッシュ。

技術的分析

問題のコミット: 19c1abfe7 が導入した Step 2.5 in unified_cache_refill():

  • TLS SLL から pop して Unified Cache に入れる処理を追加
  • Cross-thread free されたブロックが TLS SLL に混入
  • Header restoration だけでは解決しない深い設計問題

35+ コミットで「修正」を試みたが全て失敗:

  • 1a301c1a2 Add header restoration for TLS SLL pop
  • 78df6756e Fix header restoration in 4 TLS SLL pop paths
  • a941043f2 Box Theory: Encapsulate header restoration in tls_sll_pop
  • 165c33bc2 Fix Larson regression: Add SuperSlab fallback
  • ... 全て Larson は依然クラッシュ

影響範囲

  • Larson 1T: 使用不可能master ブランチ)
  • Larson 8T: 使用不可能master ブランチ)
  • Larson 1T: 51.54 M ops/s (larson-fix ブランチ)
  • PROFILES.md の Larson 性能値: 全て検証不可能master

関連ファイル

  • core/front/tiny_unified_cache.c:434-463 - Step 2.5 (問題のコード)
  • core/box/tls_sll_box.h - TLS SLL (Single Linked List) 実装
  • core/tiny_free_fast_v2.inc.h - Fast free with cross-thread detection

デバッグ情報

エラーメッセージの意味:

  • TLS_SLL_NORMALIZE_USERPTR error: User pointer から base pointer への変換失敗
  • TLS_SLL_PUSH_META_MISMATCH: Metadata の class index 不一致
  • FREE_FAST_HDR_META_MISMATCH: Header と Meta の class 不一致hdr_cls=-1 = 無効なヘッダー)

根本原因:

  • Step 2.5 が cross-thread free されたブロックを TLS SLL から pop
  • これらのブロックは他スレッドの SuperSlab に所属
  • Header restoration だけでは所有権問題を解決できない
  • HAKMEM_TINY_LARSON_FIX=1 (cross-thread detection) を有効化しても解決しない

正しい修正方法:

  1. Step 2.5 を完全に削除(larson-fix ブランチの状態に戻す)
  2. または、TLS SLL に cross-thread isolation を実装

📊 動作確認済みの設定

Baseline (学習OFF, Random Mixed のみ)

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

Larson (larson-fix ブランチ使用)

git checkout larson-fix
./build.sh larson_hakmem
./out/release/larson_hakmem 1 5 1 1000 100 10000 42

結果: 51.54 M ops/s

注意: master ブランチでは Larson はクラッシュします。


🔧 修正優先順位

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. デバッグビルドで原因特定

# 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 の無効化パッチ(暫定対応)

学習機能を完全に無効化するコンパイル時フラグを追加:

// 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