eBPF 초보자 가이드...
eBPF란??
eBPF는 사용자 프로그램이나 사용자 정의 프로그램을 특정 이벤트에 추가하는 메커니즘입니다. (이 이벤트는 시스템 호출을 가리킵니다.)이벤트가 어떤 프로세스에 촉발될 때마다 사용자 정의 프로그램이 실행됩니다.
나는 실례나 실천을 통해 어떤 것을 배우든지 너의 개념을 매우 분명하게 할 수 있다는 것을 안다.그럼, 당신은 무엇을 기다리고 있습니까?우리는 하나의 예나 실천부터 시작합시다.
실용적이었어
주: 프로그램은 c 언어로 작성해야 합니다.
int hello_world(void *ctx) {
bpf_trace_printk("Hello World!! \\n");
return 0;
}
BPF
의 도움말 아래 프로그램을 불러오는 것입니다.기본적으로, BPF
는 당신의 c 언어 프로그램을 bytecode
로 컴파일할 것입니다.이제 무시하십시오BPF
.# Loading program in BPF
b = BPF(text=program)
단계: 3
세 번째 단계는 프로그램을 모든 이벤트와 연결하는 것이다.따라서, 여기에는 clone () 또는 fork () 이벤트로 추가할 것입니다.프로세스가 갈라지거나 복제될 때마다 프로그램이 실행됩니다.
# Getting system call name for fork or clone
clone = b.get_syscall_fnname("clone")
# Attaching hello world program to an event i.e. clone or fork event.
b.attach_kprobe(event=clone, fn_name="hello_world")
위에는 attch kprobe 함수가 사용됩니다.기본적으로kprobe
간단하게 말하면 모든 핵 함수다.syscall
는 내핵 세계에서 함수 또는 탐측이라고 불린다.기본적으로 kprobe
내부 핵 중의 모든 것을 이해한다syscalls
.이것은attach kprobe 함수를 호출하여 hellow world
(또는 사용자 정의 프로그램) 프로그램과 clone
syscall 이벤트를 연결하는 이유입니다.주의: 모든 시스템 호출이나 시스템 호출을 이벤트라고 합니다.일반적으로 사건은 일종의 행위일 뿐이다.
이것은 세 가지 주요 절차다.마지막으로 우리의 계획은
hello_world.py
from bcc import BPF
from time import sleep
# Programs print hello world !!
program = """
int hello_world(void *ctx) {
bpf_trace_printk("Hello World!! \\n");
return 0;
}
"""
# Loading program in BPF
b = BPF(text=program)
# Getting system call name for fork or clone
clone = b.get_syscall_fnname("clone")
# Attaching function i.e. program to an event i.e. clone event.
b.attach_kprobe(event=clone, fn_name="hello_world")
# printing
b.trace_print()
참고: 도구bcc를 설치해야 합니다.단독 단말기에서 상술한 프로그램을 실행하다
sudo python3 hello_world.py
다른 터미널에서date, lspwd, cmd 등 명령을 실행하면 hello_world.py
프로그램이 실행하는 터미널에서 Helloworld를 출력합니다.이것들은 모두 실용적이다.당신이 이 실용적인 방법을 좋아하고 기본적인 생각을 가지길 바랍니다.
역사를 돌아보고
eBPF
의 개념이 어디에서 오는지 알아보자.기본적으로
eBPF
는 고전적인 BPF(cBPF) 위에 세워진 것이다.처음 며칠 동안 버클리 패킷 필터*(BPF)는
사용자 공간에서 패키지를 필터하는 데 사용합니다.
근데 어떻게 하지??
사전 정의
bytecode
프로그램 및시스템 호출.위의 예에서 우리는 프로그램을
시스템 호출그러나
BPF
에서 많은 시스템이 호출되었다다른 프로그램에 부속되다.
주의: 당시
BPF
에는 사용자 정의 프로그램을 syscalls
에 추가하는 메커니즘이 없습니다.pre-defined
나 in-built
개 프로그램만 행사에 참여했다.그것은 본질적으로 완전히 정지된 것이다.이것은 사용자가 eBPF
제공한 사용자 정의 프로그램으로 이 내장 프로그램을 대체할 수 없다는 것을 의미한다.그래서 기본적으로eBPF
는 BPF
의 확장 버전으로 내부 핵에서 사용자 정의 프로그램을 실행할 수 있다.이제 eBPF의 작동 방식을 자세히 살펴보겠습니다.
eBPF
bpf()sys를 사용하여 사용자 공간에서 코드를 가져오고(즉 사용자 정의로 c 언어로 작성한 프로그램) 프로그램을 불러온 후BPF
즉시 컴파일bytecode
합니다.그 다음에 BPF-bytecode
프로그램을 핵에 주입하고 clone
의 도움으로 지정한 이벤트 (위의 예시에서 fork
또는 kprobe
시스템 호출) (핵의 모든 시스템 호출을 이해합니다) 에 연결합니다.또한 내부 핵에 프로그램을 주입하는 동시에 BPF-bytecode
개의 프로그램을 검사하고 검증하여 안전 측면에서 안전하다는 것을 확보한다.실행할 때, 이 BPF-bytecode
프로그램들은 먼저 JIT
컴파일러가 컴퓨터의 체계 구조에 따라 로컬 언어나 명령어로 컴파일된다.이것이 이벤트가 터치될 때마다 모든 샌드박스나 사용자 정의 프로그램의 실행 방식입니다.안전한 측면에서 볼 때, 실행 프로그램이 내부 핵 공간에서 방금 삭제되었다.이것이 바로 eBPF
내부 핵 공간에서 사용자 공간 프로그램을 실행하는 데 어떻게 도움을 주는가이다.이것이 바로 eBPF
내부 핵 공간의 프로그래밍 가능성을 높이는 데 어떻게 도움을 주는가이다.따라서 언제든지 시스템에서 실행되는 모든 프로세스가 이벤트나 시스템 호출을 촉발하면 사용자 정의 프로그램의 실행을 초래할 수 있습니다. (위의 예시에서 Hello World입니다.)
eBPF
관련 Javascript
eBPF
리눅스에 대한 작용은 JavaScript
HTML에 대한 작용과 같다.(약간)그런데 어떻게 하지??,
정적 HTML 사이트에서 처음 며칠 동안 자바스크립트는 마우스 클릭, 마우스 정지, 페이지 스크롤 등 이벤트에서 실행되는 미니 프로그램을 정의할 수 있습니다. 모든 이벤트에서 자바스크립트 프로그램은 브라우저의 보안 가상 컴퓨터에서 실행됩니다.
eBPF
와 유사하게, 고정된 커널이 아닌 미니 프로그램을 작성할 수 있습니다. 이 프로그램들은 커널에 있는 안전한 가상 컴퓨터에서 실행할 수 있습니다. 예를 들어, 포크, 실행, 읽기, 쓰기 등 모든 시스템 호출이 가능합니다.실제로 eBPF
는 자바스크립트 자체가 아닌 자바스크립트를 실행하는 v8 가상 기기와 같다.eBPF는 Linux 커널의 일부입니다.자바스크립트에 추가된 프로그램이 예쁠수록 웹 사이트는 더욱 매력적이고 실용적이다.마찬가지로 이것은 사용자가 어떤 종류의 프로그램을 추가했는지에 달려 있다.그것은 서로 다른 용례에 달려 있다.
eBPF의 용례
Learn eBPF
eBPF
Keynotes
Reference
이 문제에 관하여(eBPF 초보자 가이드...), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/viveksahu26/beginners-guide-to-ebpf-4en3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)