Guard madvise ENOMEM and stabilize pool/tiny front v3
This commit is contained in:
@ -1,12 +1,17 @@
|
||||
## HAKMEM 状況メモ (2025-12-05 更新 / C7 Warm/TLS Bind 反映)
|
||||
|
||||
### Hotfix: madvise(ENOMEM) を握りつぶし、以降の madvise を停止(Superslab OS Box)
|
||||
- 変更: `ss_os_madvise_guarded()` を追加し、madvise が ENOMEM を返したら `g_ss_madvise_disabled=1` にして以降の madvise をスキップ。EINVAL だけは従来どおり STRICT=1 で Fail-Fast(ENV `HAKMEM_SS_MADVISE_STRICT` で緩和可)。
|
||||
- stats: `[SS_OS_STATS]` に `madvise_enomem/madvise_other/madvise_disabled` を追加。HAKMEM_SS_OS_STATS=1 で確認可能。
|
||||
- ねらい: vm.max_map_count 到達時の大量 ENOMEM で VMA がさらに分割されるのを防ぎ、アロケータ自体は走り続ける。
|
||||
|
||||
### Phase80: mid/smallmid Pool v1 flatten(C6-heavy)
|
||||
- 目的: mid/smallmid の pool v1 ホットパスを薄くし、C6-heavy ベンチで +5〜10% 程度の底上げを狙う。
|
||||
- 実装: `core/hakmem_pool.c` に v1 専用のフラット化経路(`hak_pool_try_alloc_v1_flat` / `hak_pool_free_v1_flat`)を追加し、TLS ring/lo hit 時は即 return・その他は従来の `_v1_impl` へフォールバックする Box に分離。ENV `HAKMEM_POOL_V1_FLATTEN_ENABLED`(デフォルト0)と `HAKMEM_POOL_V1_FLATTEN_STATS` でオンオフと統計を制御。
|
||||
- A/B(C6-heavy, ws=400, iters=1M, `HAKMEM_BENCH_MIN_SIZE=257` / `MAX_SIZE=768`, `POOL_V2_ENABLED=0`, Tiny/Small v2/v3 は従来どおり):
|
||||
- flatten OFF (`POOL_V1_FLATTEN_ENABLED=0`): Throughput ≈ **23.12M ops/s**、`[POOL_V1_FLAT] alloc_tls_hit=0 alloc_fb=0 free_tls_hit=0 free_fb=0`。
|
||||
- flatten ON (`POOL_V1_FLATTEN_ENABLED=1`): Throughput ≈ **25.50M ops/s**(約 +10%)、`alloc_tls_hit=499,870 alloc_fb=230 free_tls_hit=460,450 free_fb=39,649`。
|
||||
- 所感: 自スレッド TLS fast path を太らせるだけで目標どおり +10% 程度の改善が得られた。まだ free_fb がそこそこ残っているため、次に詰めるなら page_of / 自スレ判定の精度を上げて free_fb を削るフェーズ(Pool v1 flatten Phase2)を検討する。運用デフォルトは引き続き `POOL_V1_FLATTEN_ENABLED=0`(安全側)とし、bench/実験時のみ opt-in。
|
||||
- flatten ON (`POOL_V1_FLATTEN_ENABLED=1`): Throughput ≈ **25.50M ops/s**(約 +10%)、`alloc_tls_hit=499,870 alloc_fb=230 free_tls_hit=460,450 free_fb=39,649`。
|
||||
- 所感: 自スレッド TLS fast path を太らせるだけで目標どおり +10% 程度の改善が得られた。まだ free_fb がそこそこ残っているため、次に詰めるなら page_of / 自スレ判定の精度を上げて free_fb を削るフェーズ(Pool v1 flatten Phase2)を検討する。運用デフォルトは引き続き `POOL_V1_FLATTEN_ENABLED=0`(安全側)とし、bench/実験時のみ opt-in。**C7_SAFE プロファイル時は安全側で強制 OFF**(クラッシュ回避のため)。
|
||||
|
||||
### Phase81: Pool v1 flatten Phase2(free_fb 内訳の可視化)
|
||||
- 変更: flatten stats に free fallback の理由別カウンタを追加(page_null / not_mine / other)。`hak_pool_free_v1_flat` で mid_desc 取得失敗 → page_null、owner 不一致等 → not_mine、その他 → other として集計。
|
||||
|
||||
Reference in New Issue
Block a user