eBPF 초보자 가이드...

6212 단어 linuxbeginnersebpf
정말 다른 기술을 알고 싶다면너도 틀림없이 이 기술을 좋아할 것이다.

eBPF란??
eBPF는 사용자 프로그램이나 사용자 정의 프로그램을 특정 이벤트에 추가하는 메커니즘입니다. (이 이벤트는 시스템 호출을 가리킵니다.)이벤트가 어떤 프로세스에 촉발될 때마다 사용자 정의 프로그램이 실행됩니다.
나는 실례나 실천을 통해 어떤 것을 배우든지 너의 개념을 매우 분명하게 할 수 있다는 것을 안다.그럼, 당신은 무엇을 기다리고 있습니까?우리는 하나의 예나 실천부터 시작합시다.

실용적이었어
  • 단계: 1
  • c 언어로 간단한 Hello World 프로그램을 작성합니다.
    주: 프로그램은 c 언어로 작성해야 합니다.
    int hello_world(void *ctx) {
        bpf_trace_printk("Hello World!! \\n");
        return 0;
    }
    
  • 단계: 2
  • 현재 두 번째 단계는 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 (또는 사용자 정의 프로그램) 프로그램과 clonesyscall 이벤트를 연결하는 이유입니다.
    주의: 모든 시스템 호출이나 시스템 호출을 이벤트라고 합니다.일반적으로 사건은 일종의 행위일 뿐이다.
    이것은 세 가지 주요 절차다.마지막으로 우리의 계획은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-definedin-built개 프로그램만 행사에 참여했다.그것은 본질적으로 완전히 정지된 것이다.이것은 사용자가 eBPF 제공한 사용자 정의 프로그램으로 이 내장 프로그램을 대체할 수 없다는 것을 의미한다.그래서 기본적으로eBPFBPF의 확장 버전으로 내부 핵에서 사용자 정의 프로그램을 실행할 수 있다.
    이제 eBPF의 작동 방식을 자세히 살펴보겠습니다.eBPF bpf()sys를 사용하여 사용자 공간에서 코드를 가져오고(즉 사용자 정의로 c 언어로 작성한 프로그램) 프로그램을 불러온 후BPF 즉시 컴파일bytecode합니다.그 다음에 BPF-bytecode 프로그램을 핵에 주입하고 clone의 도움으로 지정한 이벤트 (위의 예시에서 fork 또는 kprobe 시스템 호출) (핵의 모든 시스템 호출을 이해합니다) 에 연결합니다.또한 내부 핵에 프로그램을 주입하는 동시에 BPF-bytecode개의 프로그램을 검사하고 검증하여 안전 측면에서 안전하다는 것을 확보한다.실행할 때, 이 BPF-bytecode 프로그램들은 먼저 JIT 컴파일러가 컴퓨터의 체계 구조에 따라 로컬 언어나 명령어로 컴파일된다.이것이 이벤트가 터치될 때마다 모든 샌드박스나 사용자 정의 프로그램의 실행 방식입니다.안전한 측면에서 볼 때, 실행 프로그램이 내부 핵 공간에서 방금 삭제되었다.이것이 바로 eBPF 내부 핵 공간에서 사용자 공간 프로그램을 실행하는 데 어떻게 도움을 주는가이다.이것이 바로 eBPF 내부 핵 공간의 프로그래밍 가능성을 높이는 데 어떻게 도움을 주는가이다.
    따라서 언제든지 시스템에서 실행되는 모든 프로세스가 이벤트나 시스템 호출을 촉발하면 사용자 정의 프로그램의 실행을 초래할 수 있습니다. (위의 예시에서 Hello World입니다.)

    eBPF 관련 JavascripteBPF 리눅스에 대한 작용은 JavaScript HTML에 대한 작용과 같다.(약간)

    그런데 어떻게 하지??,
    정적 HTML 사이트에서 처음 며칠 동안 자바스크립트는 마우스 클릭, 마우스 정지, 페이지 스크롤 등 이벤트에서 실행되는 미니 프로그램을 정의할 수 있습니다. 모든 이벤트에서 자바스크립트 프로그램은 브라우저의 보안 가상 컴퓨터에서 실행됩니다.eBPF와 유사하게, 고정된 커널이 아닌 미니 프로그램을 작성할 수 있습니다. 이 프로그램들은 커널에 있는 안전한 가상 컴퓨터에서 실행할 수 있습니다. 예를 들어, 포크, 실행, 읽기, 쓰기 등 모든 시스템 호출이 가능합니다.실제로 eBPF는 자바스크립트 자체가 아닌 자바스크립트를 실행하는 v8 가상 기기와 같다.eBPF는 Linux 커널의 일부입니다.
    자바스크립트에 추가된 프로그램이 예쁠수록 웹 사이트는 더욱 매력적이고 실용적이다.마찬가지로 이것은 사용자가 어떤 종류의 프로그램을 추가했는지에 달려 있다.그것은 서로 다른 용례에 달려 있다.

    eBPF의 용례
  • 네트워킹
  • 연계: 교통 통제, 콘센트, XDP
  • 디도스 방지
  • 로드 밸런싱
  • 라우팅, 덮어쓰기, NAT
  • TCP 제어
  • 추적 및 모니터링
  • 갈고리: kprobe, uProbes,tracepoints와perf 이벤트
  • 내부 핵 또는 사용자 공간 함수를 검사, 추적, 설정합니다.
  • 내부 핵의 도량을 집합하고 관련하여 의미 있는 날짜를 되돌려줍니다
  • 기타
  • 보안(LSM, 예: AppArmor)
  • 적외선 프로토콜
  • 파일 시스템, 스토리지
  • 참조:
    Learn eBPF
    eBPF
    Keynotes

    좋은 웹페이지 즐겨찾기