(자유롭게 정리한 글. 가독성 좋게 재정리한 글 업로드 예정)
* eBPF 기반 in kernel policy execution
- page cache policy를 userspace에서 실행하면
kernel에서 이벤트를 감지하고 userspace로 전달하면
userspace에서 policy를 실행하고 kernel로 다시 전달해야함
context switch로 인해 성능 저하가 크게 발생하고 뿐만 아니라 data copy overhead, synchronization으로 인한 contention도 발생함
- 페이지 단위로 매우 자주 실행되는 hot path이기 때문에 eBPF를 이용해 in kernel execution하면 userspace overhead를 제거할 수 있음
= policy는 반드시 커널에서 실행되어야 효율적인데 eBPF가 가능하게 함
* variable sized eviction lists and policy functions
- 기존 P2Cache는 Single LRU queue 기반으로 동작해서 다양한 정책을 표현할 수 없었음
- 데이터 구조는 멀티 리스트, 행동 정의는 policy function으로 구현하여 정책을 하드 코딩하지 않고 표현 가능하게 만들었음
(여기서 등장하는 메타데이터는 뭐지 )
* per cgroup policy
- 기존 서버환경은 db, search, log, analysis 가 동시에 실행되는데 하나의 global policy 로 다 처리하기 때문에 일부 워크로드에서는 성능이 나빠질 수 밖에 없었음
= 워크로드마다 optimal한 policy가 다르고 각각 다르게 사용할 수 있도록 하였음. 다만 완전히 isolation는 아니고 policy는 분리되고 있지만 page cache는 여전히 공유되어 물리적으로 데이터는 공유되고 있음
* valid folios registry an eviction fallback
- policy는 커널에게 eviction 할 페이지를 알려주지만 잘못된 포인터라면 kernel이 crah할 수 있음
그래서 진짜 존재하는 folio인지 확인하기 위해 valid folios registry를 사용함
- policy가 실패했을 때는 kernel의 default eviction policy를 사용할 수 있도록 eviction fallback을 도입함
eviction fallback이 없을 경우 policy bug로 eviction을 못하면 시스템이 멈추지만 있다면 안전하게 계속 동작할 수 있으므로 forward progress guarantee 함
* application informed policy
- 리눅스는 페이지를 최근에 접근했는지에 집중하고 GET은 그 정보가 중요하지만 SCAN은 중요하지 않음
그러나 기존 시스템은 GET과 SCAN에 대한 구분을 할 수 없으므로 application semantics를 반영함
= Get list와 scan list를 분리하여 get list는 보호하고 scan list 먼저 eviction
===
더 좋은 eviction policy를 찾는 것이 아니라 fixed policy (LRU+refault) 였던 기존 리눅스를 policy를 바꿀 수 있도록 만든 것이 핵심
'[ Laboratory ]' 카테고리의 다른 글
| [SOSP'25] cache_ext : background (page cache in Linux kernel) (0) | 2026.04.20 |
|---|