BPF LRU per-CPU hash map
·
DevSec
BPF LRU per-CPU hash mapBPF LRU per-CPU hash map(BPF_MAP_TYPE_LRU_PERCPU_HASH): Hash map 구조에 LRU eviction 과 per-CPU value 저장 방식을 함께 적용한 BPF mapBPF program 은 커널 내부에서 실행되기 때문에 일반적인 userspace 자료구조를 그대로 사용할 수 없다.그렇기 때문에 BPF program 에서 상태를 저장하거나, user space 와 데이터를 공유하거나, 반복적으로 조회되는 값을 캐싱하기 위해서는 BPF map 을 사용해야 한다.BPF_MAP_TYPE_LRU_PERCPU_HASH 는 key-value 형태로 데이터를 저장하지만, value 를 CPU 별로 분리해서 저장하고 map 이 가..
eBPF
·
DevSec
eBPFeBPF(extended Berkeley Packet Filter): Linux Kernel 내부에서 안전하게 실행되는 작은 프로그램을 이용해서 커널의 동작을 확장하는 기술eBPF 는 커널 소스코드를 직접 수정하거나 Kernel Module 을 새로 로드하지 않고도 Kernel 내부의 특정 지점에 프로그램을 붙여서 실행할 수 있게 해준다.예를 들어 시스템 콜, 네트워크 패킷 처리 지점, 파일 접근 지점, 프로세스 실행 지점, 커널 함수 호출 지점 등에 eBPF Program 을 연결하면 해당 이벤트가 발생했을 때 eBPF Program 이 실행된다.eBPF 는 단순히 패킷 필터링만을 위한 기술이 아니라, 현대 Linux 환경에서 Observability, Networking, Security, T..
BPF
·
DevSec
BPFBPF(Berkeley Packet Filter): Kernel space 에서 packet 을 효율적으로 필터링하기 위한사한 뒤 필터링하면 성능적으로 비효율적이다.패킷은 매우 빠른 속도로 들어오고, 대부분의 경우 사용자가 보고 싶은 패킷은 전체 패킷 중 일부이다.그래서 BPF 는 User space 로 패킷을 넘기기 전에 Kernel space 에서 먼저 필터링을 수행한다.BPF 는 작은 필터 프로그램을 커널 안에서 실행하고, 그 결과에 따라 해당 패킷을 User space 로 전달할지 결정한다.현재는 기존 BPF 를 eBPF 와 구분하기 위해 Classic BPF 또는 cBPF 라고 부르기도 한다.BPF 가 필요한 이유패킷 캡쳐 도구는 네트워크 인터페이스로 들어오는 패킷을 확인해야 한다.예를 들..