Phase PERF-ULTRA-ALLOC-OPT-1 (改訂版): C7 ULTRA 内部最適化
設計判断:
- 寄生型 C7 ULTRA_FREE_BOX を削除(設計的に不整合)
- C7 ULTRA は C4/C5/C6 と異なり専用 segment + TLS を持つ独立サブシステム
- tiny_c7_ultra.c 内部で直接最適化する方針に統一
実装内容:
1. 寄生型パスの削除
- core/box/tiny_c7_ultra_free_box.{h,c} 削除
- core/box/tiny_c7_ultra_free_env_box.h 削除
- Makefile から tiny_c7_ultra_free_box.o 削除
- malloc_tiny_fast.h を元の tiny_c7_ultra_alloc/free 呼び出しに戻す
2. TLS 構造の最適化 (tiny_c7_ultra_box.h)
- count を struct 先頭に移動(L1 cache locality 向上)
- 配列ベース TLS キャッシュに変更(cap=128, C6 同等)
- freelist: linked-list → BASE pointer 配列
- cold フィールド(seg_base/seg_end/meta)を後方配置
3. alloc の純 TLS pop 化 (tiny_c7_ultra.c)
- hot path: 1 分岐のみ(count > 0)
- TLS access は 1 回のみ(ctx に cache)
- ENV check を呼び出し側に移動
- segment/page_meta アクセスは refill 時(cold path)のみ
4. free の UF-3 segment learning 維持
- 最初の free で segment 学習(seg_base/seg_end を TLS に記憶)
- 以降は範囲チェック → TLS push
- 範囲外は v3 free にフォールバック
実測値 (Mixed 16-1024B, 1M iter, ws=400):
- tiny_c7_ultra_alloc self%: 7.66% (維持 - 既に最適化済み)
- tiny_c7_ultra_free self%: 3.50%
- Throughput: 43.5M ops/s
評価: 部分達成
- 設計一貫性の回復: 成功
- Array-based TLS cache 移行: 成功
- pure TLS pop パターン統一: 成功
- perf self% 削減(7.66% → 5-6%): 未達成(既に最適)
C7 ULTRA は独立サブシステムとして tiny_c7_ultra.c に閉じる設計を維持。
次は refill path 最適化または C4-C7 ULTRA free 群の軽量化へ。
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -159,16 +159,13 @@ static inline void* malloc_tiny_fast(size_t size) {
|
||||
|
||||
tiny_front_alloc_stat_inc(class_idx);
|
||||
|
||||
// C7 ULTRA stub (UF-1): delegates to v3, ENV gated
|
||||
if (tiny_class_is_c7(class_idx) &&
|
||||
tiny_front_v3_enabled() &&
|
||||
tiny_front_v3_c7_ultra_enabled() &&
|
||||
small_heap_v3_c7_enabled()) {
|
||||
// C7 ULTRA allocation path (ENV: HAKMEM_TINY_C7_ULTRA_ENABLED, default ON)
|
||||
if (tiny_class_is_c7(class_idx) && tiny_c7_ultra_enabled_env()) {
|
||||
void* ultra_p = tiny_c7_ultra_alloc(size);
|
||||
if (ultra_p) {
|
||||
if (TINY_HOT_LIKELY(ultra_p != NULL)) {
|
||||
return ultra_p;
|
||||
}
|
||||
// fallback to existing route on miss
|
||||
// fallback to route on miss
|
||||
}
|
||||
|
||||
// Phase 4-4: C6 ULTRA free+alloc integration (寄生型 TLS キャッシュ pop)
|
||||
@ -324,14 +321,9 @@ static inline int free_tiny_fast(void* ptr) {
|
||||
// Phase FREE-LEGACY-BREAKDOWN-1: カウンタ散布 (1. 関数入口)
|
||||
FREE_PATH_STAT_INC(total_calls);
|
||||
|
||||
// C7 ULTRA stub (UF-1): delegates to v3, ENV gated
|
||||
if (tiny_class_is_c7(class_idx) &&
|
||||
tiny_front_v3_enabled() &&
|
||||
tiny_front_v3_c7_ultra_enabled() &&
|
||||
small_heap_v3_c7_enabled()) {
|
||||
tiny_c7_ultra_free(base);
|
||||
// Phase FREE-LEGACY-BREAKDOWN-1: カウンタ散布 (2. C7 ULTRA 分岐)
|
||||
FREE_PATH_STAT_INC(c7_ultra_fast);
|
||||
// C7 ULTRA free path (ENV: HAKMEM_TINY_C7_ULTRA_ENABLED, default ON)
|
||||
if (tiny_class_is_c7(class_idx) && tiny_c7_ultra_enabled_env()) {
|
||||
tiny_c7_ultra_free(ptr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user