[SOSP'25] cache_ext : core contribution
·
[ Laboratory ]
(자유롭게 정리한 글. 가독성 좋게 재정리한 글 업로드 예정)* 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는 반드시 커널에서 ..
[SOSP'25] cache_ext : background (page cache in Linux kernel)
·
[ Laboratory ]
(현재 자유롭게 정리한 것... 이후 가독성 좋게 정리한 버전 올릴 예정)리눅스 페이지 캐시는storage (disk) access = disk i/o를 줄여성능에 기여하는 커널의 기능리눅스 페이지 캐시는최근에 접근한 것인지 recency캐시에서 eviction 된 이후 최근에 다시 필요했는지 refault를 기반으로 판단하는 단순 휴리스틱한 시스템리눅스 페이지 캐시의 기본 구조는active list와 inactive list 이고처음 들어오면 inactive list,한 번 더 접근되면 active list,page cache 부족해서 eviction을 수행해야하면inactive list의 head부터 제거하는 흐름기준은 최근에 접근했는가 =최근 접근 여부를 중요함으로 간주cache pollutio..
io_uring
·
[ Laboratory ]/Advanced Operating System
io_uring은 syscall을 최대한 줄이고, 모든 I/O를 async하게 수행하고, 유저와 커널이 공유하는 ring buffer를 통해서 I/O를 교환한다. 두 개의 queue를 ring buffer로 사용하는데 SQ = submission queue에는 유저 프로그램이 이런 io를 해달라고 요청을 적는 공간이고 CQ = completion queue에는 커널이 I/O 끝났다고 완료 결과를 적는 공간이다. mmap으로 유저와 커널이 syscall 없이도 공유할 수 있다. 유저 스페이스에서 SQ entry들을 SQ에 push하면한 번의 syscall로 커널에 요청 처리 시작을 알리고 커널이 I/O를 수행하게 된다.완료되면 CQE가 CQ에 기록되고 유저는 CQ에서 바로 읽어서 결과를 확인할 수 있기 ..
리눅스 eBPF, kfunc
·
[ Laboratory ]/Advanced Operating System
리눅스 커널에서 기능을 확장하는 가장 대표적이고 고전적인 방법은 커널 모듈이다.하지만 최근에는 리눅스의 eBPF 기반의 안전한 확장과 커널 내부 함수까지 호출 가능한 kfunc의 사용이 많아지고 있다. 커널 공간 내부에서 유저가 정의한 코드를 안전하게 실행하기 위해서 필요한 환경 전체를 extended Berkeley Packet Filter = eBPF라고 한다. 단순한 가상 머신만 포함하는 것이 아니라 eBPF 프로그램인 bytecode와 verifier, runtime, helper function, map 등이 포함된다. 유저가 작성한 eBPF 프로그램은 정적 분석 기반으로 안전성을 검증하는 verifier의 검증을 통과해야 실행이 가능하다. 이를 통해 커널 모듈처럼 위험하지 않으면서 런타임 중에..
[Linux Kernel] 리눅스 커널 버전 변경 빌드
·
[ Laboratory ]/Advanced Operating System
다른 실험을 위해 커널 버전을 낮추었다가다시 원래 사용하던 버전으로 업그레이드 하기 위해 사용할 방법을 설명하고자 한다 리눅스 커널 버전을 업그레이드 빌드하는 방법은 아래 포스팅에서 이미 다뤘다https://dev-charlotte.tistory.com/115 [Linux Kernel] 리눅스 커널 버전 업그레이드 빌드0. 현재 커널 버전 확인 명령어기존 커널 버전이 5.15.0 버전이었는데 최근 논문 세미나에서 발표했던 논문의 evaluation을 재현하려고 하니 6.2 버전 이상의 리눅스 커널이 필요해서 업그레이드 해야dev-charlotte.tistory.com 업그레이드 빌드를 한 적이 있기 때문에 커널 부팅에 필요한 모든 파일을 가지고 있는 상태에서 시작한다 일단 내가 가지고 있는 파일들을 /b..