121 lines
3.6 KiB
Markdown
121 lines
3.6 KiB
Markdown
|
|
# ENV Profile Presets (HAKMEM)
|
|||
|
|
|
|||
|
|
よく使う構成を 3 つのプリセットにまとめました。まずここからコピペし、必要な ENV だけを追加してください。v2 系や LEGACY 専用オプションは明示 opt-in で扱います。
|
|||
|
|
ベンチバイナリでは `HAKMEM_PROFILE=<名前>` をセットすると、ここで定義した ENV を自動で注入します(既に設定済みの ENV は上書きしません)。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Profile 1: MIXED_TINYV3_C7_SAFE(標準 Mixed 16–1024B)
|
|||
|
|
|
|||
|
|
### 目的
|
|||
|
|
- Mixed 16–1024B の標準ベンチ用。
|
|||
|
|
- C7-only SmallObject v3 + Tiny front v3 + LUT + fast classify ON。
|
|||
|
|
- Tiny/Pool v2 はすべて OFF。
|
|||
|
|
|
|||
|
|
### ENV 最小セット(Release)
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_BENCH_MIN_SIZE=16
|
|||
|
|
HAKMEM_BENCH_MAX_SIZE=1024
|
|||
|
|
HAKMEM_TINY_HEAP_PROFILE=C7_SAFE
|
|||
|
|
HAKMEM_TINY_C7_HOT=1
|
|||
|
|
HAKMEM_TINY_HOTHEAP_V2=0
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_ENABLED=1
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_CLASSES=0x80
|
|||
|
|
HAKMEM_POOL_V2_ENABLED=0
|
|||
|
|
HAKMEM_TINY_FRONT_V3_ENABLED=1
|
|||
|
|
HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1
|
|||
|
|
HAKMEM_TINY_PTR_FAST_CLASSIFY_ENABLED=1
|
|||
|
|
HAKMEM_FREE_POLICY=batch
|
|||
|
|
HAKMEM_THP=auto
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 任意オプション
|
|||
|
|
- stats を見たいとき:
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_TINY_HEAP_STATS=1
|
|||
|
|
HAKMEM_TINY_HEAP_STATS_DUMP=1
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_STATS=1
|
|||
|
|
```
|
|||
|
|
- v2 系は触らない(C7_SAFE では Pool v2 / Tiny v2 は常時 OFF)。
|
|||
|
|
- vm.max_map_count が厳しい環境で Fail-Fast を避けたいときの応急処置(性能はほぼ同等〜微減):
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_FREE_POLICY=keep
|
|||
|
|
HAKMEM_DISABLE_BATCH=1
|
|||
|
|
HAKMEM_SS_MADVISE_STRICT=0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Profile 2: C6_HEAVY_LEGACY_POOLV1(mid/smallmid C6-heavy ベンチ)
|
|||
|
|
|
|||
|
|
### 目的
|
|||
|
|
- C6-heavy mid/smallmid のベンチ用。
|
|||
|
|
- C6 は v1 固定(C6 v3 OFF)、Pool v2 OFF。Pool v1 flatten は bench 用に opt-in。
|
|||
|
|
|
|||
|
|
### ENV(v1 基準線)
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_BENCH_MIN_SIZE=257
|
|||
|
|
HAKMEM_BENCH_MAX_SIZE=768
|
|||
|
|
HAKMEM_TINY_HEAP_PROFILE=C7_SAFE
|
|||
|
|
HAKMEM_TINY_C6_HOT=1
|
|||
|
|
HAKMEM_TINY_HOTHEAP_V2=0
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_ENABLED=1
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_CLASSES=0x80 # C7-only v3, C6 v3 は OFF
|
|||
|
|
HAKMEM_POOL_V2_ENABLED=0
|
|||
|
|
HAKMEM_POOL_V1_FLATTEN_ENABLED=0 # flatten は初回 OFF
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Pool v1 flatten A/B 用(LEGACY 専用)
|
|||
|
|
```sh
|
|||
|
|
# LEGACY + flatten ON (研究/bench専用)
|
|||
|
|
HAKMEM_TINY_HEAP_PROFILE=LEGACY
|
|||
|
|
HAKMEM_POOL_V2_ENABLED=0
|
|||
|
|
HAKMEM_POOL_V1_FLATTEN_ENABLED=1
|
|||
|
|
HAKMEM_POOL_V1_FLATTEN_STATS=1
|
|||
|
|
```
|
|||
|
|
- flatten は LEGACY 専用。C7_SAFE / C7_ULTRA_BENCH ではコード側で強制 OFF になる前提。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## Profile 3: DEBUG_TINY_FRONT_PERF(perf 用 DEBUG プロファイル)
|
|||
|
|
|
|||
|
|
### 目的
|
|||
|
|
- Tiny front v3(C7 v3 含む)の perf record 用。
|
|||
|
|
- -O0 / -g / LTO OFF でシンボル付き計測。
|
|||
|
|
|
|||
|
|
### ビルド例
|
|||
|
|
```sh
|
|||
|
|
make clean
|
|||
|
|
CFLAGS='-O0 -g' USE_LTO=0 OPT_LEVEL=0 NATIVE=0 \
|
|||
|
|
make bench_random_mixed_hakmem -j4
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### ENV
|
|||
|
|
```sh
|
|||
|
|
HAKMEM_BENCH_MIN_SIZE=16
|
|||
|
|
HAKMEM_BENCH_MAX_SIZE=1024
|
|||
|
|
HAKMEM_TINY_HEAP_PROFILE=C7_SAFE
|
|||
|
|
HAKMEM_TINY_C7_HOT=1
|
|||
|
|
HAKMEM_TINY_HOTHEAP_V2=0
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_ENABLED=1
|
|||
|
|
HAKMEM_SMALL_HEAP_V3_CLASSES=0x80
|
|||
|
|
HAKMEM_POOL_V2_ENABLED=0
|
|||
|
|
HAKMEM_TINY_FRONT_V3_ENABLED=1
|
|||
|
|
HAKMEM_TINY_FRONT_V3_LUT_ENABLED=1
|
|||
|
|
HAKMEM_TINY_PTR_FAST_CLASSIFY_ENABLED=1
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### perf 例
|
|||
|
|
```sh
|
|||
|
|
perf record -F 5000 --call-graph dwarf -e cycles:u \
|
|||
|
|
-o perf.data.tiny_front_tf3 \
|
|||
|
|
./bench_random_mixed_hakmem 1000000 400 1
|
|||
|
|
```
|
|||
|
|
- perf 計測時はログを極力 OFF、ENV は MIXED_TINYV3_C7_SAFE をベースにする。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 共通注意
|
|||
|
|
- プリセットから外れて単発の ENV を積み足すと再現が難しくなるので、まずは上記いずれかからスタートし、変更点を必ずメモしてください。
|
|||
|
|
- v2 系(Pool v2 / Tiny v2)はベンチごとに opt-in。不要なら常に 0。
|