212 lines
4.2 KiB
Markdown
212 lines
4.2 KiB
Markdown
|
|
# hakmem Setup Guide - インストール&使用ガイド
|
|||
|
|
|
|||
|
|
**対象**: 新規利用者・評価者
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🛠️ インストール
|
|||
|
|
|
|||
|
|
### **1. ビルド準備**
|
|||
|
|
```bash
|
|||
|
|
git clone <repository>
|
|||
|
|
cd hakmem
|
|||
|
|
make clean && make libhakmem.so
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **2. 動作確認**
|
|||
|
|
```bash
|
|||
|
|
make test # 基本機能テスト
|
|||
|
|
./test_bridge # Bridge Classes確認 ✅
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 基本使用法
|
|||
|
|
|
|||
|
|
### **方法1: LD_PRELOAD推奨**
|
|||
|
|
```bash
|
|||
|
|
# モード選択 + 実行
|
|||
|
|
HAKMEM_MODE=balanced LD_PRELOAD=./libhakmem.so your_program
|
|||
|
|
|
|||
|
|
# 既存コード変更不要
|
|||
|
|
HAKMEM_MODE=balanced LD_PRELOAD=./libhakmem.so redis-server
|
|||
|
|
HAKMEM_MODE=balanced LD_PRELOAD=./libhakmem.so nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **方法2: コード埋め込み**
|
|||
|
|
```c
|
|||
|
|
#include "hakmem.h"
|
|||
|
|
|
|||
|
|
// 簡単API
|
|||
|
|
void* ptr = hak_alloc_cs(1024);
|
|||
|
|
hak_free_cs(ptr, 1024);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ モード選択ガイド
|
|||
|
|
|
|||
|
|
### **balanced (推奨)**
|
|||
|
|
- **用途**: 一般アプリケーション
|
|||
|
|
- **機能**: BigCache + TLS最適化 + FROZENモード
|
|||
|
|
- **メモリ**: 中程度
|
|||
|
|
- **速度**: 高速
|
|||
|
|
|
|||
|
|
### **minimal (ベンチマーク用)**
|
|||
|
|
- **用途**: ベースライン測定
|
|||
|
|
- **機能**: 全機能OFF
|
|||
|
|
- **メモリ**: 最小
|
|||
|
|
- **速度**: 比較基準
|
|||
|
|
|
|||
|
|
### **fast (本番用)**
|
|||
|
|
- **用途**: 高性能サーバー
|
|||
|
|
- **機能**: TLS最適化 + FROZEN
|
|||
|
|
- **メモリ**: 小
|
|||
|
|
- **速度**: 最高速
|
|||
|
|
|
|||
|
|
### **learning/research**
|
|||
|
|
- **用途**: 開発・デバッグ
|
|||
|
|
- **機能**: 全機能 + 詳細ログ
|
|||
|
|
- **メモリ**: 大
|
|||
|
|
- **速度**: 遅い(デバッグ用)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 性能測定
|
|||
|
|
|
|||
|
|
### **快速ベンチマーク**
|
|||
|
|
```bash
|
|||
|
|
# 基本測定
|
|||
|
|
./bench_comprehensive_hakmem --scenario tiny
|
|||
|
|
|
|||
|
|
# mimalloc比較
|
|||
|
|
./bench_comprehensive_system --scenario tiny
|
|||
|
|
|
|||
|
|
# 結果比較
|
|||
|
|
HAKMEM_MODE=balanced ./bench_hakmem.sh && echo "vs mimalloc baseline"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **Larsonスレッドテスト**
|
|||
|
|
```bash
|
|||
|
|
# 1スレッド
|
|||
|
|
scripts/run_larson.sh -d 10 -t 1 -p burst
|
|||
|
|
|
|||
|
|
# 4スレッド(本番想定)
|
|||
|
|
scripts/run_larson.sh -d 10 -t 4 -p burst
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔧 詳細設定
|
|||
|
|
|
|||
|
|
### **環境変数一覧**
|
|||
|
|
```bash
|
|||
|
|
export HAKMEM_MODE=balanced # メイン設定
|
|||
|
|
export HAKMEM_WRAP_TINY=1 # Tiny Pool有効化
|
|||
|
|
export HAKMEM_TINY_MAG_CAP=1024 # Tiny Magazine容量
|
|||
|
|
export HAKMEM_SITE_RULES=1 # Site Rules(非推奨)
|
|||
|
|
export HAKMEM_PROF=1 # プロファイラ
|
|||
|
|
export HAKMEM_PROF_SAMPLE=12 # サンプリング率
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **ペリメータ調整**
|
|||
|
|
```bash
|
|||
|
|
# Tiny Pool最適化(16B勝利の秘訣)
|
|||
|
|
export HAKMEM_TINY_MAG_CAP=2048 # Magazine拡大
|
|||
|
|
|
|||
|
|
# スレッド競合削減
|
|||
|
|
export HAKMEM_WRAP_TINY=1 # 有効化推奨
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 アプリケーション別設定
|
|||
|
|
|
|||
|
|
### **Web Server (nginx)**
|
|||
|
|
```bash
|
|||
|
|
# 推奨設定
|
|||
|
|
HAKMEM_MODE=balanced \
|
|||
|
|
HAKMEM_WRAP_TINY=1 \
|
|||
|
|
LD_PRELOAD=./libhakmem.so nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **Database (Redis)**
|
|||
|
|
```bash
|
|||
|
|
# 高速性優先
|
|||
|
|
HAKMEM_MODE=fast \
|
|||
|
|
LD_PRELOAD=./libhakmem.so redis-server
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **ベンチマーク**
|
|||
|
|
```bash
|
|||
|
|
# 公平比較
|
|||
|
|
HAKMEM_MODE=minimal \
|
|||
|
|
LD_PRELOAD=./libhakmem.so ./benchmark_app
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🐛 トラブルシューティング
|
|||
|
|
|
|||
|
|
### **動作確認**
|
|||
|
|
```bash
|
|||
|
|
# Bridge Classes動作確認
|
|||
|
|
./test_bridge
|
|||
|
|
|
|||
|
|
# Tiny Pool確認
|
|||
|
|
./test_tiny
|
|||
|
|
|
|||
|
|
# 全体テスト
|
|||
|
|
make test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **性能低下時**
|
|||
|
|
```bash
|
|||
|
|
# プロファイラ有効化
|
|||
|
|
HAKMEM_MODE=research HAKMEM_PROF=1 \
|
|||
|
|
LD_PRELOAD=./libhakmem.so your_program
|
|||
|
|
|
|||
|
|
# 詳細分析
|
|||
|
|
./view_perf_analysis.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **メモリ使用量**
|
|||
|
|
```bash
|
|||
|
|
# フットプリント測定
|
|||
|
|
./test_memory_footprint
|
|||
|
|
|
|||
|
|
# エコモード
|
|||
|
|
HAKMEM_MODE=minimal LD_PRELOAD=./libhakmem.so
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📈 成功事例
|
|||
|
|
|
|||
|
|
### **16B小規模アロケーション**
|
|||
|
|
```bash
|
|||
|
|
HAKMEM_MODE=balanced \
|
|||
|
|
LD_PRELOAD=./libhakmem.so micro_benchmark
|
|||
|
|
# 結果: mimalloc +3%勝利 ✅
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### **混合サイズワークロード**
|
|||
|
|
```bash
|
|||
|
|
HAKMEM_MODE=balanced \
|
|||
|
|
LD_PRELOAD=./libhakmem.so web_server
|
|||
|
|
# 結果: 全体+7.5%勝利 🔥
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎓 次のステップ
|
|||
|
|
|
|||
|
|
1. **基本評価**: `HAKMEM_MODE=balanced` で既存アプリを実行
|
|||
|
|
2. **ベンチマーク**: `./bench_comprehensive_*` で測定
|
|||
|
|
3. **最適化**: モード切り替えで性能調整
|
|||
|
|
4. **本番デプロイ**: `balanced` + `HAKMEM_WRAP_TINY=1`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**サポート**: README.mdで詳細な技術情報、ソースコード参照
|