본문으둜 κ±΄λ„ˆλ›°κΈ°

Issue #3392 β€” RawBlock Dynamic Slot Allocation

[!tldr] 업무 관점 takeaway daegyu94κ°€ μ œμ•ˆν•œ raw_block 슬둯 동적 ν• λ‹Ή. κ³ μ • 슬둯 크기 β†’ νŽ˜μ΄λ‘œλ“œ 크기 기반 동적 ν• λ‹ΉμœΌλ‘œ λ‚΄λΆ€ λ‹¨νŽΈν™” ν•΄μ†Œκ°€ λͺ©ν‘œ. HC SSD(15~30TB) ν™˜κ²½μ—μ„œ layerwise / compression μ›Œν¬λ‘œλ“œ μ‚¬μš© μ‹œ μ‹€νš¨ μš©λŸ‰μ΄ 크게 늘 수 μžˆλ‹€. 우리 H1(O(1)) / H2(FIFO) Task와 λ°©ν–₯이 λ‹€λ₯Έ 독립 κ°œμ„  β€” 단, κ΅¬ν˜„λ˜λ©΄ 슬둯 관리 μ½”λ“œ μ „λ°˜μ΄ λ°”λ€Œλ―€λ‘œ H1/H2 PR 착수 μ „ μ§„ν–‰ 상황 확인 ν•„μš”.

  • Issue: LMCache/LMCache #3392
  • μž‘μ„±μž: daegyu94 (2026-05-26)
  • λ ˆμ΄λΈ”: new feature
  • μƒνƒœ: λ…Όμ˜ 쀑 (2026-05-28 κΈ°μ€€)

문제 β€” κ³ μ • 슬둯의 λ‚΄λΆ€ λ‹¨νŽΈν™”β€‹

ν˜„μž¬ RawBlockCoreλŠ” λͺ¨λ“  KV chunkλ₯Ό κ³ μ • 크기 μŠ¬λ‘―μ— μ €μž₯ν•œλ‹€.

slot_bytes = round_up(header_bytes + full_chunk_bytes, block_align)

νŽ˜μ΄λ‘œλ“œκ°€ μŠ¬λ‘―λ³΄λ‹€ μž‘μœΌλ©΄ λ‚˜λ¨Έμ§€ 곡간이 κ·Έλƒ₯ λ‚­λΉ„λœλ‹€.

μΌ€μ΄μŠ€ 1 β€” Partial (unfull) 청크​

save_unfull_chunk=True λ˜λŠ” PD(Prefill-Decode) λͺ¨λ“œμ—μ„œ λ°œμƒ:

Fixed Slot (512 KiB)
[##########..............................................] 50 KiB payload
[####################################################] 462 KiB λ‚­λΉ„

μΌ€μ΄μŠ€ 2 β€” μ••μΆ• μ›Œν¬λ‘œλ“œβ€‹

DeepSeek-V4처럼 λ ˆμ΄μ–΄λ³„ μ••μΆ•λ₯ μ΄ λ‹€λ₯Έ λͺ¨λΈ:

Slot (512 KiB)
Layer A (low compression): [####################################....................]
Layer B (high compression): [############............................................]
Layer C (very high): [######..................................................]

λ ˆμ΄μ–΄ κ°„ μ΄μ§ˆμ„±μ΄ λ†’μ„μˆ˜λ‘ λ‹¨νŽΈν™”κ°€ λˆ„μ λ˜μ–΄ μ‹€νš¨ μš©λŸ‰μ΄ 쀄어든닀.


μ œμ•ˆ β€” Dynamic Slot Allocator​

daegyu94의 μ΄ˆμ•ˆ:

  • μ‹€μ œ νŽ˜μ΄λ‘œλ“œ 크기에 맞좰 슬둯 크기 κ²°μ •
  • bump-pointer μ „λž΅μœΌλ‘œ μš©λŸ‰ μ—¬μœ  μ‹œ λΉ λ₯Έ 순차 ν• λ‹Ή μœ μ§€
  • power-of-two size class둜 ν• λ‹Ή λ‹¨μœ„ λ°”μš΄λ”©
  • size class별 segmented free list둜 ν•΄μ œλœ μ˜μ—­ μž¬μ‚¬μš©
  • size-aware allocation hint둜 ν• λ‹Ή-퇴거 뢈일치 λ°©μ§€
Dynamic Allocation (μ˜ˆμ‹œ)
[##########] 50 KiB slot
[##############] 80 KiB slot
[########################] 200 KiB slot

λŒ“κΈ€ ν† λ‘  μš”μ•½ (DongDongJu ↔ daegyu94)​

DongDongJu μ œμ•ˆ β€” Slab/Buddy μŠ€νƒ€μΌβ€‹

"μ™„μ „ 동적 ν• λ‹Ήλ³΄λ‹€λŠ” Linux slab/slob/slub + buddy allocator 방식":

μ—¬λŸ¬ κ³ μ • size class pool 사전 ν• λ‹Ή
예: 64KB / 128KB / 256KB / 512KB

β†’ μš”μ²­ νŽ˜μ΄λ‘œλ“œλ₯Ό μˆ˜μš©ν•  수 μžˆλŠ” κ°€μž₯ μž‘μ€ classμ—μ„œ ν• λ‹Ή
β†’ ν•΄μ œ μ‹œ ν•΄λ‹Ή class free list에 λ°˜ν™˜
β†’ 일뢀 pool은 GPU 츑에 pin β†’ read μ„±λŠ₯ ν–₯상 κ°€λŠ₯

μž„μ˜ κ°€λ³€ 크기 할당보닀 λ‹¨μˆœν•˜κ³  예츑 κ°€λŠ₯ν•˜λ©΄μ„œλ„ λ‹¨νŽΈν™”λ₯Ό 쀄일 수 μžˆλ‹€λŠ” 논리.

daegyu94 μˆ˜λ ΄μ•ˆ (2026-05-28)​

Full chunk: κΈ°μ‘΄ κ³ μ • 슬둯 (λͺ¨λΈ 의쑴 slot_bytes μœ μ§€)
Partial chunk: size-class pool (μ†Œν˜• νŽ˜μ΄λ‘œλ“œ μ „μš©)

μ—΄λ¦° 섀계 질문:

ν•­λͺ©λ‚΄μš©
Partial/Full λΉ„μœ¨μ˜ˆ: Partial 20% / Full 80% β€” μ„€μ • κ°€λŠ₯ν•΄μ•Ό 함
size class λ²”μœ„μ˜ˆ: 64KB ~ 1024KB, λͺ‡ 개 클래슀?
Fallback λ°©ν–₯Partial β†’ Full fallback ν—ˆμš©? Full μš©λŸ‰ μ˜ˆμ•½ ν•„μš”. Full β†’ Partial은 split/merge λ³΅μž‘λ„ λ•Œλ¬Έμ— ν”Όν•΄μ•Ό 함
eviction 영ν–₯ν• λ‹Ή μ‹€νŒ¨ μ‹œ 퇴거 정책이 size classλ₯Ό 인지해야 함

우리 Taskμ™€μ˜ 관계​

ν•­λͺ©κ΄€κ³„
H1 (_free_slots O(1))κ³ μ • 슬둯 ꡬ쑰 μ „μ œ. 동적 ν• λ‹Ή κ΅¬ν˜„ μ‹œ _free_slots μžμ²΄κ°€ λ°”λ€Œλ―€λ‘œ H1보닀 λ¨Όμ € #3392 λ°©ν–₯ ν™•μ • ν•„μš”
H2 (FIFO deque)동일. deque κ΅μ²΄λŠ” λ‹¨μˆœν•˜μ§€λ§Œ 슬둯 ꡬ쑰 λ³€κ²½ μ‹œ μž¬μž‘μ—… κ°€λŠ₯
S2 (checkpoint overflow)슬둯 μˆ˜κ°€ λŠ˜μ–΄λ‚  수 μžˆμ–΄ (동적 ν• λ‹Ή β†’ 슬둯 수 증가) S2 μˆ˜μ • μš°μ„ μˆœμœ„κ°€ 더 올라감
FDP placement슬둯이 κ°€λ³€ 크기가 되면 placement hint λ‹¨μœ„λ„ μž¬κ²€ν†  ν•„μš”

[!note] H1/H2 착수 μ „ 확인 포인트 #3392κ°€ λΉ λ₯΄κ²Œ κ΅¬ν˜„ λ°©ν–₯이 작히면 H1/H2λ₯Ό λ¨Όμ € μ˜¬λ¦¬λŠ” 게 λ‚­λΉ„κ°€ 될 수 μžˆλ‹€. λ°˜λŒ€λ‘œ #3392κ°€ μž₯κΈ° 섀계 λ…Όμ˜λ‘œ 이어지면 H1/H2λŠ” λ…λ¦½μ μœΌλ‘œ 진행해도 무방. 이슈 μ§„ν–‰ 상황을 주기적으둜 체크.


HC SSD 관점​

HC SSD(15~30TB) ν™˜κ²½μ—μ„œ layerwise=True + κ³ μ••μΆ• λͺ¨λΈμ„ μ“°λ©΄ λ‹¨νŽΈν™” 손싀이 λˆ„μ λœλ‹€. 동적 할당이 κ΅¬ν˜„λ˜λ©΄:

  • μ‹€νš¨ μš©λŸ‰ 증가 β†’ μΊμ‹œ hit rate ν–₯상
  • S2(checkpoint overflow) μž„κ³„μ λ„ 슬둯 수 κΈ°λ°˜μ΄λ―€λ‘œ ν•¨κ»˜ μž¬κ³„μ‚° ν•„μš”

κ΄€λ ¨ νŽ˜μ΄μ§€β€‹

  • [[raw_block-κ°œμ„ -Task]] β€” H1/H2 Task (κ³ μ • 슬둯 기반 κ°œμ„ , #3392와 λ°©ν–₯ ꡐ차)
  • [[raw_block-내뢀ꡬ쑰]] β€” ν˜„μž¬ κ³ μ • 슬둯 ꡬ쑰 상세
  • [[S2-checkpoint-overflow]] β€” 슬둯 수 증가 μ‹œ 영ν–₯ λ°›λŠ” 버그