44 lines
2.3 KiB
Markdown
44 lines
2.3 KiB
Markdown
|
|
# Phase 6.19 Results (2025-10-23)
|
|||
|
|
|
|||
|
|
実装概要
|
|||
|
|
- L2.5: bump-run + ActiveRun を導入(TLS直詰め)。`HAKMEM_L25_RUN_BLOCKS` で上書き可。
|
|||
|
|
- L2.5: シャードハッシュ(splitmix64)を追加(`HAKMEM_SHARD_MIX=1`)。
|
|||
|
|
- ログ抑制: `HAKMEM_INVALID_FREE_LOG=0` 追加(既定OFF)。
|
|||
|
|
- 計測: `l25_get`, `l25_alloc_tls_page` を HKM_TIMING に追加。
|
|||
|
|
|
|||
|
|
10s Large 4T(64KB–1MB, wrap=ON, timing=ON)
|
|||
|
|
- 変更前ベスト(A/B): ~103,435 ops/s
|
|||
|
|
- bump-run既定: ~44,099 ops/s(l25_get支配)
|
|||
|
|
- bump-run + shard-mix: ~50,619 ops/s(l25_get平均サイクル低下)
|
|||
|
|
- head-to-head: system 2.56M, mimalloc 5.99M, hakmem 51.5k ops/s(タイミングON)
|
|||
|
|
|
|||
|
|
所感
|
|||
|
|
- ロック/シスコールは支配的でなく、l25_get/hak_alloc が大半。bump-run導入で「ミス時の書込み」は減らせたが、mmap頻度とホット書込み(ヘッダ)が残っており、まだ重い。
|
|||
|
|
|
|||
|
|
次の一手(P0続き → P1)
|
|||
|
|
- P0: Remote-first 順序を既定化し、run補充を二段目へ。nonempty選択と trylock回数を抑制。
|
|||
|
|
- P1: L2.5のヘッダライト縮小/ヘッダレス化(ページ記述子)で l25_get の memcpy/書込みを除去。
|
|||
|
|
- P1: ラン長のA/B(特に64/128KBクラスの倍化)で mmap 回数をさらに圧縮。
|
|||
|
|
|
|||
|
|
ログ
|
|||
|
|
- ベンチログおよびタイミングは `docs/benchmarks/*_L25_BUMPRUN_10s*` および `*_L25_HEAD2HEAD_BUMPRUN*` を参照。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
追加(P2 + free最適化, 2025-10-23 later)
|
|||
|
|
|
|||
|
|
- 変更点
|
|||
|
|
- L2.5 page‑desc(64KBページ→{class, owner_tid})導入。hak_free_atでheaderless route
|
|||
|
|
- L2.5 Transfer Cache(TC): freeは per-thread outboxへappend、閾値で一括remote‑flush
|
|||
|
|
- same‑thread freeはTLSへ直帰(リング/LIFO)
|
|||
|
|
- A/B(10s, Large 4T, remote, factor=4, shard‑mix=1)
|
|||
|
|
- HDR=2 + TC_SPILL=16 → ~98.7k ops/s(最良)
|
|||
|
|
- HDR=2 + TC_SPILL=32 → ~88.3k ops/s
|
|||
|
|
- HDR=1 → ~79.0k ops/s
|
|||
|
|
- 代表タイミング(HDR=2, SPILL=16)
|
|||
|
|
- l25_get ≈ 2%(alloc側軽量化達成)
|
|||
|
|
- hak_free ≈ 44%(free支配、ただし CAS はほぼ消失)
|
|||
|
|
- 推奨プロファイル(Large 10s)
|
|||
|
|
- P1: `L25_PREF=remote, L25_RUN_FACTOR=4, HDR_LIGHT=1, SHARD_MIX=1`(~102k)
|
|||
|
|
- P2+TC: `L25_PREF=remote, L25_RUN_FACTOR=4, HDR_LIGHT=2, L25_TC_SPILL=16, SHARD_MIX=1`(~99k)
|