280 lines
5.9 KiB
Markdown
280 lines
5.9 KiB
Markdown
|
|
# hakmem Migration Guide - 移行ガイド
|
||
|
|
|
||
|
|
**対象**: 現行ユーザー・バージョンアップ・移行検討者
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚨 重要: Phase 6.21 重大変更
|
||
|
|
|
||
|
|
### **廃止された機能**
|
||
|
|
```c
|
||
|
|
// ❌ もう使えない
|
||
|
|
- DYN1/DYN2 (動的サイズクラス)
|
||
|
|
- Call-siteプロファイリング
|
||
|
|
- UCB1/ELO自動学習
|
||
|
|
- 複雑なACE学習ループ
|
||
|
|
```
|
||
|
|
|
||
|
|
### **新しくなったコア**
|
||
|
|
```c
|
||
|
|
// ✅ 今の仕様
|
||
|
|
- 7固定クラス (+Bridge Classes)
|
||
|
|
- SACS-3 (Size-Only Allocation Strategy)
|
||
|
|
- TLS Active Slab
|
||
|
|
- シンプルな3階層
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 移行マトリクス
|
||
|
|
|
||
|
|
| 変更項目 | 従来 | 新仕様 | 影響度 | 対応 |
|
||
|
|
|----------|------|--------|--------|------|
|
||
|
|
| **サイズクラス** | 動的DYN1 | 固定Bridge (40KB,52KB) | 高 | 環境変数変更 |
|
||
|
|
| **学習機能** | ON (学習) | OFF (固定) | 中 | 設定調整 |
|
||
|
|
| **プロファイラ** | Call-site | なし | 低 | 無視 |
|
||
|
|
| **API互換性** | 互換性あり | 互換性あり | なし | 変更不要 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 パフォーマンス影響分析
|
||
|
|
|
||
|
|
### **変化がある領域**
|
||
|
|
```bash
|
||
|
|
# 1T (シングルスレッド)
|
||
|
|
従来: 4.3M ops/sec
|
||
|
|
新仕様: 3.9M ops/sec (-8.6%)
|
||
|
|
|
||
|
|
# 4T (マルチスレッド)
|
||
|
|
従来: 9.6M ops/sec
|
||
|
|
新仕様: 10.0M ops/sec (+4.2%)
|
||
|
|
```
|
||
|
|
|
||
|
|
### **変化がない領域**
|
||
|
|
| 領域 | 影響 | 理由 |
|
||
|
|
|------|------|------|
|
||
|
|
| 16B-64KB | なし | Tiny Poolは変更なし |
|
||
|
|
| TLS機能 | なし | TLS Active Slabは維持 |
|
||
|
|
| API | なし | 互換性維持 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🛠️ 移行手順
|
||
|
|
|
||
|
|
### **ステップ1: 現行バージョン確認**
|
||
|
|
```bash
|
||
|
|
# 現在の設定を保存
|
||
|
|
env | grep HAKMEM > hakmem_old_config.txt
|
||
|
|
|
||
|
|
# 学習機能使用確認
|
||
|
|
if [[ -n "${HAKMEM_LEARN}" ]]; then
|
||
|
|
echo "学習機能使用中 → 移行必要"
|
||
|
|
fi
|
||
|
|
```
|
||
|
|
|
||
|
|
### **ステップ2: コード更新**
|
||
|
|
```bash
|
||
|
|
# 古いドキュメント削除
|
||
|
|
rm PHASE_6.*_COMPLETION_REPORT.md
|
||
|
|
rm *_LEARN_*.md
|
||
|
|
|
||
|
|
# 新ファイル確認
|
||
|
|
ls CURRENT_ARCHITECTURE.md QUICK_REFERENCE.md
|
||
|
|
```
|
||
|
|
|
||
|
|
### **ステップ3: 環境変数更新**
|
||
|
|
```bash
|
||
|
|
# 旧設定 (これらを削除)
|
||
|
|
unset HAKMEM_DYN1
|
||
|
|
unset HAKMEM_DYN2
|
||
|
|
unset HAKMEM_LEARN
|
||
|
|
unset HAKMEM_UCB1
|
||
|
|
|
||
|
|
# 新設定 (これに置換)
|
||
|
|
export HAKMEM_MODE=balanced
|
||
|
|
export HAKMEM_WRAP_TINY=1 # Tiny Pool有効化
|
||
|
|
```
|
||
|
|
|
||
|
|
### **ステップ4: 再ビルド**
|
||
|
|
```bash
|
||
|
|
make clean
|
||
|
|
make libhakmem.so
|
||
|
|
make test # 動作確認
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 ケース別移行例
|
||
|
|
|
||
|
|
### **ケース1: Webサーバー (高接続)**
|
||
|
|
```bash
|
||
|
|
# 旧設定
|
||
|
|
HAKMEM_LEARN=1 HAKMEM_DYN1=6144 LD_PRELOAD=./libhakmem.so nginx
|
||
|
|
|
||
|
|
# 新設定
|
||
|
|
HAKMEM_MODE=fast HAKMEM_WRAP_TINY=1 LD_PRELOAD=./libhakmem.so nginx
|
||
|
|
```
|
||
|
|
|
||
|
|
### **ケース2: ベンチマーク環境**
|
||
|
|
```bash
|
||
|
|
# 旧設定
|
||
|
|
HAKMEM_MODE=research HAKMEM_PROF=1 LD_PRELOAD=./libhakmem.so benchmark
|
||
|
|
|
||
|
|
# 新設定
|
||
|
|
HAKMEM_MODE=minimal LD_PRELOAD=./libhakmem.so benchmark
|
||
|
|
```
|
||
|
|
|
||
|
|
### **ケース3: 開発/テスト**
|
||
|
|
```bash
|
||
|
|
# 旧設定
|
||
|
|
HAKMEM_MODE=learning HAKMEM_LEARN=1 LD_PRELOAD=./libhakmem.so dev_app
|
||
|
|
|
||
|
|
# 新設定
|
||
|
|
HAKMEM_MODE=balanced LD_PRELOAD=./libhakmem.so dev_app
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚠️ 既知の移行問題
|
||
|
|
|
||
|
|
### **問題1: 性能低下 (1Tアプリ)**
|
||
|
|
```c
|
||
|
|
// 原因: CAP削除によるmiss頻度増加
|
||
|
|
// 対策: TLS Ring拡大
|
||
|
|
export HAKMEM_TLS_RING_CAP=32 // 16→32
|
||
|
|
```
|
||
|
|
|
||
|
|
### **問題2: Bridge動作不安定**
|
||
|
|
```bash
|
||
|
|
# 検証
|
||
|
|
./test_bridge
|
||
|
|
|
||
|
|
# 動作しない場合
|
||
|
|
export HAKMEM_MODE=minimal # 一時的回避
|
||
|
|
```
|
||
|
|
|
||
|
|
### **問題3: メモリ使用量増加**
|
||
|
|
```c
|
||
|
|
// 原因: 新Bridgeクラス追加
|
||
|
|
// 影響: +2MB (無視できるレベル)
|
||
|
|
// 対策: 特になし
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔧 移行チェックリスト
|
||
|
|
|
||
|
|
### **前もって確認**
|
||
|
|
- [ ] 現行HAKMEMバージョン特定
|
||
|
|
- [ ] 使用中の環境変数リストアップ
|
||
|
|
- [ ] 学習機能使用有無確認
|
||
|
|
- [ ] パフォーマンスベースライン記録
|
||
|
|
|
||
|
|
### **移行作業中**
|
||
|
|
- [ ] 旧環境変数クリア
|
||
|
|
- [ ] 新モード選択
|
||
|
|
- [ ] 再ビルド&テスト
|
||
|
|
- [ ] Bridge Classes動作確認
|
||
|
|
|
||
|
|
### **移行後**
|
||
|
|
- [ ] パフォーマンス再測定
|
||
|
|
- [ ] エラーログ確認
|
||
|
|
- [ ] 安定性検証
|
||
|
|
- [ ] ユーザー通知
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 移行ROI分析
|
||
|
|
|
||
|
|
### **移行コスト**
|
||
|
|
```c
|
||
|
|
工数: 2-4時間 (標準アプリ)
|
||
|
|
リスク: 中 (1Tのみ性能低下)
|
||
|
|
学習コスト: 低 (後方互換性あり)
|
||
|
|
```
|
||
|
|
|
||
|
|
### **移行メリット**
|
||
|
|
```c
|
||
|
|
- メモリ使用量: 69%削減 (78MB→24MB)
|
||
|
|
- コード量: 33%削減 (899行→600行)
|
||
|
|
- 保守性: 大幅向上
|
||
|
|
- マルチスレッド: +4%改善
|
||
|
|
```
|
||
|
|
|
||
|
|
### **判定**: 移行推奨
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 移行後のパフォーマンス最適化
|
||
|
|
|
||
|
|
### **チューニング項目**
|
||
|
|
```bash
|
||
|
|
# TLS Ring (1T性能回復)
|
||
|
|
export HAKMEM_TLS_RING_CAP=32
|
||
|
|
|
||
|
|
# Tiny Magazine (小規模最適化)
|
||
|
|
export HAKMEM_TINY_MAG_CAP=2048
|
||
|
|
|
||
|
|
# 環境別最適モード
|
||
|
|
本番: HAKMEM_MODE=fast
|
||
|
|
テスト: HAKMEM_MODE=minimal
|
||
|
|
開発: HAKMEM_MODE=balanced
|
||
|
|
```
|
||
|
|
|
||
|
|
### **検証コマンド**
|
||
|
|
```bash
|
||
|
|
# 基本動作
|
||
|
|
make test && ./test_bridge
|
||
|
|
|
||
|
|
# パフォーマンス測定
|
||
|
|
./bench_comprehensive_hakmem --scenario tiny
|
||
|
|
|
||
|
|
# マルチスレッド確認
|
||
|
|
./test_scaling 4
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🆘 トラブルシューティング
|
||
|
|
|
||
|
|
### **移行失敗時の対応**
|
||
|
|
```bash
|
||
|
|
# 1. ロールバック準備
|
||
|
|
git checkout previous_version_tag
|
||
|
|
|
||
|
|
# 2. 最小構成でテスト
|
||
|
|
HAKMEM_MODE=minimal LD_PRELOAD=./libhakmem.so test_app
|
||
|
|
|
||
|
|
# 3. ステップアップ
|
||
|
|
# minimal -> balanced -> fast
|
||
|
|
```
|
||
|
|
|
||
|
|
### **サポート**
|
||
|
|
```bash
|
||
|
|
# 詳細なログ取得
|
||
|
|
HAKMEM_MODE=research HAKMEM_PROF=1 LD_PRELOAD=./libhakmem.so app 2>hakmem.log
|
||
|
|
|
||
|
|
# 問題報告用情報収集
|
||
|
|
./collect_debug_info.sh
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 まとめ
|
||
|
|
|
||
|
|
Phase 6.21への移行は**推奨**されます:
|
||
|
|
|
||
|
|
- **機能削除**: 複雑な学習機能 (不要)
|
||
|
|
- **性能改善**: 4T +4%、メモリ -69%
|
||
|
|
- **保守性**: コード量33%削減
|
||
|
|
- **リスク管理**: 1Tのみ-8% (チューニングで回復可能)
|
||
|
|
|
||
|
|
**移行判断基準**:
|
||
|
|
- マルチスレッド利用→ **即時移行** ✅
|
||
|
|
- シングルスレッドのみ→ **慎重評価** ⚠️
|
||
|
|
- 学習機能不要→ **移行推奨** ✅
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
*移行に関する技術的な質問は docs/CURRENT_ARCHITECTURE.md を参照してください。*
|