Skip to content

태그: bpf

총 13개의 글이 있습니다.
메모리 로딩
bpf
BPF는 일반적인 프로그램과 유사한 방식으로 개발하기 때문에 유사한 실행파일 및 메모리 구조를 가지고 있지만, 커널 안에서 제한된 환경으로 실행되기 때문에 로딩(loading) 또한 다른 방식으로 실행된다 데이터 유형 일반적인 실행파일에서 가장 중요한 두 가지는 코드와 데이터이다. 코드는 말그대로 상위언어를 컴파일한 머신코드를 의미하고, 데이터는 실행시 코드가 참조하는 메모리를 의미한다. 데이터는 스택과 힙같이 실행시 메모리가 할당/해제되는 동적 데이터와 전역변수처럼 코드에서 선언되는 정적 데이터로 나뉘는데, 정적 데이터는 실행파일을 로딩할 때 메모리가 할당되고 해당 메모리를 참조하는 코드도 재배치(relocation)된다. 그리고 정적 데이터는 크게 읽기전용 변수, 초기화된 전역변수 그리고
BPF ring buffer
bpf
BPF 프로그램은 수집한 데이터를 후처리하고 로깅하기 위해 정보를 User space로 전송하는데, 대부분의 경우 이를 위해 BPF Perf buffer(Perfbuf)를 사용한다. Perfbuf는 CPU마다 하나씩 생성되는 순환 버퍼로, Kernel space와 Use space간 데이터를 효율적으로 교환할 수 있도록 한다. 하지만 Perfbuf에는 두가지의 문제점이 있었다. 1. 각 CPU에 대해 별도의 버퍼를 사용하기 때문에 데이터 스파이크에 대응하기 위해서 각각의 버퍼크기를 크게 할당해주어야 한다. 이 때문에 필요한 것 보다 더 많은 메모리 공간이 낭비될 수 있다. 2. 연관된 이벤트가 서로 다른 CPU에서 빠르게 발생하는 경우 이벤트가 순서대로 전달되지 않을 수 있다. 이 때문에 이벤트를
XDP
bpf
XDP(eXpress Data Path)는 운영체제 네트워킹 스택의 대부분을 우회하여 높은 속도로 네트워크 패킷을 송수신할 수 있는 eBPF 기반 고성능 데이터 경로이다. Data path 위 그림은 Linux 커널의 패킷 흐름 경로를 나타낸다. XDP는 네트워킹 스택과 패킷 메타데이터를 위한 메모리 할당을 우회한다. XDP의 핵심 아이디어는 커널 RX 경로 초입에 hook을 걸어, 사용자가 제공한 eBPF 프로그램이 패킷 처리 방향을 결정하게 하는 것이다. 이 hook은 NIC 드라이버의 인터럽트 처리 직후, 네트워크 스택의 메모리 할당 전에 위치한다. 메모리 할당 비용이 크기 때문이다. 이 덕분에 일반 하드웨어에서도 코어당 초당 2,600만 패킷을 드롭할 수 있다. e