Files
hakmem/docs/paper/ACE_ALLOC_NOTES.md
Moe Charm (CI) 0546454168 WIP: Add TLS SLL validation and SuperSlab registry fallback
ChatGPT's diagnostic changes to address TLS_SLL_HDR_RESET issue.
Current status: Partial mitigation, but root cause remains.

Changes Applied:
1. SuperSlab Registry Fallback (hakmem_super_registry.h)
   - Added legacy table probe when hash map lookup misses
   - Prevents NULL returns for valid SuperSlabs during initialization
   - Status:  Works but may hide underlying registration issues

2. TLS SLL Push Validation (tls_sll_box.h)
   - Reject push if SuperSlab lookup returns NULL
   - Reject push if class_idx mismatch detected
   - Added [TLS_SLL_PUSH_NO_SS] diagnostic message
   - Status:  Prevents list corruption (defensive)

3. SuperSlab Allocation Class Fix (superslab_allocate.c)
   - Pass actual class_idx to sp_internal_allocate_superslab
   - Prevents dummy class=8 causing OOB access
   - Status:  Root cause fix for allocation path

4. Debug Output Additions
   - First 256 push/pop operations traced
   - First 4 mismatches logged with details
   - SuperSlab registration state logged
   - Status:  Diagnostic tool (not a fix)

5. TLS Hint Box Removed
   - Deleted ss_tls_hint_box.{c,h} (Phase 1 optimization)
   - Simplified to focus on stability first
   - Status:  Can be re-added after root cause fixed

Current Problem (REMAINS UNSOLVED):
- [TLS_SLL_HDR_RESET] still occurs after ~60 seconds of sh8bench
- Pointer is 16 bytes offset from expected (class 1 → class 2 boundary)
- hak_super_lookup returns NULL for that pointer
- Suggests: Use-After-Free, Double-Free, or pointer arithmetic error

Root Cause Analysis:
- Pattern: Pointer offset by +16 (one class 1 stride)
- Timing: Cumulative problem (appears after 60s, not immediately)
- Location: Header corruption detected during TLS SLL pop

Remaining Issues:
⚠️ Registry fallback is defensive (may hide registration bugs)
⚠️ Push validation prevents symptoms but not root cause
⚠️ 16-byte pointer offset source unidentified

Next Steps for Investigation:
1. Full pointer arithmetic audit (Magazine ⇔ TLS SLL paths)
2. Enhanced logging at HDR_RESET point:
   - Expected vs actual pointer value
   - Pointer provenance (where it came from)
   - Allocation trace for that block
3. Verify Headerless flag is OFF throughout build
4. Check for double-offset application in conversions

Technical Assessment:
- 60% root cause fixes (allocation class, validation)
- 40% defensive mitigation (registry fallback, push rejection)

Performance Impact:
- Registry fallback: +10-30 cycles on cold path (negligible)
- Push validation: +5-10 cycles per push (acceptable)
- Overall: < 2% performance impact estimated

Related Issues:
- Phase 1 TLS Hint Box removed temporarily
- Phase 2 Headerless blocked until stability achieved

🤖 Generated with Claude Code (https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-03 20:42:28 +09:00

26 lines
1.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.

# ACE-Alloc Paper Notes (Scratchpad)
このファイルは、ACE / 学習機能まわりの実験メモ・アイデア・ストーリー断片を雑に書き溜めるためのスクラッチパッドです。
後で `docs/paper/ACE-Alloc/main.md` にまとめ直す前提の「素材置き場」として使います。
## アイデアメモ(例)
- Tiny Headerless + Superslab + ACE の組み合わせで:
- Headerless: free パスでの class 決定を Superslab/region に移し、per-object header を除去。
- ACE Controller: Mid/Large の TLS CAP / drain をオフパスで学習。
- CAP Learner: Mid/Large の CAP / W_MAX をヒット率ベースで調整。
- → 「ヘッダレス+学習」で、密度と性能を両立できるか?
- 学習の「層ごとの役割分担」:
- L0 Tiny: 原則固定(学習対象外)。ただし Observer だけ Tiny を見る。
- L1 ACE: キャッシュ構成CAP / drain / bundleを学習。
- L2 ELO+Evolution: しきい値・戦略の切り替えを学習。
- → Box Theory 的には、学習そのものも「上層の箱」として Tiny/SuperSlab から分離されている。
## 実験ネタ候補
- ACE ON/OFF が Tiny Headerless の性能・安定性に与える影響。
- HAKMEM_MODE=balanced vs learning vs research での学習挙動の違い。
- LD_PRELOAD モードで学習機能をどこまで有効にできるか(安全性とのトレードオフ)。