PoC placement_id 결정 코드 path
세부 분석은 01_codebase_map.md §4 와 03_fdp_implementation_audit.md (a) 에 정리. 본 노트는 핵심 함수 한 곳에 모아둔 빠른 레퍼런스.
Data 경로
# lmcache/v1/storage_backend/raw_block/core.py:342
def _select_fdp_ruh(self, key: RawBlockKeySpec, obj: MemoryObj | None = None) -> int | None:
if not self.use_fdp:
return None
placement_rank = (
getattr(obj.metadata, "fdp_placement_rank", None)
if obj is not None else None
)
if placement_rank is not None:
worker_index = int(placement_rank)
elif self.key_namespace == "object":
kv_rank = int(decode_object_key(key.encoded).kv_rank)
# ObjectKey.ComputeKVRank packs global_rank into bits [16, 23].
worker_index = (kv_rank >> 16) & 0xFF
else:
parsed_key = decode_legacy_key(key.encoded)
worker_index = int(getattr(parsed_key, "worker_id", 0))
idx = worker_index % len(self.fdp_data_ruh_ids)
return self.fdp_data_ruh_ids[idx]
3단 fallback:
obj.metadata.fdp_placement_rank— MP worker가 stamp (lmcache/v1/multiprocess/server.py:34)- object key의
kv_rank>>16— global rank의 worker index 비트 - legacy key의
worker_id필드
→ worker_index % len(fdp_data_ruh_ids) 로 RUH index 결정.
Metadata 경로
# lmcache/v1/storage_backend/raw_block/core.py:380
def _select_fdp_metadata_ruh(self, encoded_key: str) -> int | None:
if not self.use_fdp:
return None
digest = hashlib.blake2b(encoded_key.encode("utf-8"), digest_size=8).digest()
idx = int.from_bytes(digest, "little", signed=False) % len(self.fdp_metadata_ruh_ids)
return self.fdp_metadata_ruh_ids[idx]
→ blake2b 해시 기반 분배. Worker 분배와 독립. metadata와 data는 RUH pool도 별개 (fdp_data_ruh_ids vs fdp_metadata_ruh_ids).
Directive 산출
# lmcache/v1/storage_backend/raw_block/core.py:399
def _write_directive_for_ruh(self, fdp_ruh_id: int | None) -> tuple[int, int]:
if fdp_ruh_id is None or not self.use_fdp:
return (0, 0)
return (self.fdp_directive_type, int(fdp_ruh_id)) # 기본 (2, ruh_id)
Rust 측
// rust/raw_block/src/lib.rs (PoC HEAD)
fn validate_nvme_directive(use_uring_cmd: bool, dtype: u8, dspec: u16) -> PyResult<()> {
if dtype > 0x0f { return Err(...); }
if dspec != 0 && dtype == 0 { return Err(...); }
if (dtype != 0 || dspec != 0) && !use_uring_cmd { return Err(...); }
Ok(())
}
// nvme_uring_cmd_prep 안:
// cmd.cdw13 = (dspec as u32) << 16 ← placement ID 위치 (cdw13 bits 16-31)
// cmd.cdw12 |= (dtype as u32) & 0x0F ← directive type (cdw12 bits 0-3)
정책 외부화 (harness layer)
코어 레이어는 worker 단위 분배만 제공. prompt-aware / phase-aware 정책은 harness가 RUH ID 자체를 직접 결정해서 config로 내려주는 방식:
# benchmarks/agentic_mp_trace/replay/fdp_policy.py:18
def resolve_policy(*, mode_cfg, storage_class, ruh_count) -> tuple[bool, list[int], list[int]]:
use_fdp = bool(mode_cfg.get("use_fdp", False))
if not use_fdp: return False, [], []
data_spec = mode_cfg.get("default_data_ruhs")
metadata_spec = mode_cfg.get("default_metadata_ruhs")
class_cfg = mode_cfg.get("classes", {}).get(storage_class)
if class_cfg is not None:
data_spec = class_cfg.get("data_ruhs", data_spec)
metadata_spec = class_cfg.get("metadata_ruhs", metadata_spec)
return True, expand_ruh_ids(data_spec), expand_ruh_ids(metadata_spec)
YAML config 예 (benchmarks/fdp_waf_stress/config.example.yaml):
modes:
separated:
use_fdp: true
default_data_ruhs: "0-2"
default_metadata_ruhs: [3]
classes:
hot_prompt:
data_ruhs: [0]
cold_prompt:
data_ruhs: [1, 2]
→ harness가 storage_class 단위로 RUH list를 결정해서 LMCache adapter config로 전달. 코어는 그저 list에서 worker_index % N로 분배.