Rust တွင် eBPF ကိုင်တွယ်ဖြေရှင်းသူများအတွက် Aya စာကြည့်တိုက်ကို မိတ်ဆက်ပေးခဲ့သည်။

Aya စာကြည့်တိုက်၏ ပထမဆုံးထွက်ရှိမှုကို တင်ပြထားပြီး JIT ဖြင့် အထူး virtual machine တစ်ခုတွင် Linux kernel အတွင်းလည်ပတ်သည့် Rust ဘာသာစကားဖြင့် eBPF ကိုင်တွယ်သူများကို ဖန်တီးနိုင်စေမည်ဖြစ်သည်။ အခြား eBPF ဖွံ့ဖြိုးတိုးတက်ရေးကိရိယာများနှင့်မတူဘဲ Aya သည် libbpf နှင့် bcc compiler ကိုအသုံးမပြုဘဲ kernel စနစ်ခေါ်ဆိုမှုများကိုတိုက်ရိုက်ဝင်ရောက်ရန် libc crate ပက်ကေ့ဂျ်ကိုအသုံးပြုသည့် Rust တွင်ရေးသားထားသော ၎င်း၏ကိုယ်ပိုင်အကောင်အထည်ဖော်မှုကို ပေးဆောင်သည်။ Aya တည်ဆောက်ခြင်းသည် C language tooling သို့မဟုတ် kernel header ဖိုင်များမလိုအပ်ပါ။ စာကြည့်တိုက်ကုဒ်ကို MIT နှင့် Apache 2.0 လိုင်စင်များအောက်တွင် ဖြန့်ဝေထားသည်။

အဓိကသော့ချက်များ:

  • BTF (BPF အမျိုးအစား ဖော်မတ်) အတွက် ပံ့ပိုးမှု သည် BPF pseudocode တွင် အမျိုးအစားအချက်အလက်ကို လက်ရှိ kernel မှ ပံ့ပိုးပေးသည့် အမျိုးအစားများသို့ အမျိုးအစားများ စစ်ဆေးခြင်းနှင့် ပုံဖော်ခြင်းအတွက် ပံ့ပိုးပေးပါသည်။ BTF ကိုအသုံးပြုခြင်းသည် Linux kernel ၏ မတူညီသောဗားရှင်းများနှင့် ပြန်လည်ပေါင်းစည်းခြင်းမပြုဘဲ အသုံးပြုနိုင်သည့် universal eBPF handlers များကို ဖန်တီးနိုင်စေသည်။
  • "bpf-to-bpf" ခေါ်ဆိုမှုများ၊ global variables များနှင့် initializers များအတွက် ပံ့ပိုးကူညီမှုဖြင့် eBPF အတွက် ပရိုဂရမ်များကို eBPF တွင် ထည့်သွင်းစဉ်းစားလုပ်ဆောင်ရမည့် လုပ်ဆောင်ချက်များကို ပြန်လည်သတ်မှတ်ပေးသည့် ပုံမှန်ပရိုဂရမ်များကဲ့သို့ ပုံမှန်ပရိုဂရမ်များကဲ့သို့ ပရိုဂရမ်များကို ဒီဇိုင်းရေးဆွဲနိုင်စေမည့် "bpf-to-bpf" ခေါ်ဆိုမှုများ၊
  • ပုံမှန် arrays၊ hashes maps၊ stacks၊ queues၊ stack traces အပြင် socket နှင့် performance ခြေရာခံတည်ဆောက်ပုံများ အပါအဝင် အမျိုးမျိုးသော kernel အမျိုးအစားများအတွက် ပံ့ပိုးမှု။
  • အသွားအလာကို စစ်ထုတ်ခြင်းနှင့် စီမံခန့်ခွဲခြင်းအတွက် ပရိုဂရမ်များ၊ cgroup ကိုင်တွယ်သူများနှင့် အမျိုးမျိုးသော socket လည်ပတ်မှုများ၊ XDP ပရိုဂရမ်များအပါအဝင် eBTF ပရိုဂရမ် အမျိုးအစားအမျိုးမျိုးကို ဖန်တီးနိုင်မှု။
  • tokio နှင့် async-std မဟုတ်သောပိတ်ဆို့ခြင်းမုဒ်တွင် အပြိုင်အဆိုင်တောင်းဆိုမှုလုပ်ဆောင်ခြင်းအတွက် ပလပ်ဖောင်းများအတွက် ပံ့ပိုးမှု။
  • kernel စည်းဝေးပွဲနှင့် kernel ခေါင်းစီးဖိုင်များနှင့် ချိတ်ဆက်မှုမရှိဘဲ မြန်ဆန်စွာ စုဝေးမှု။

ပရောဂျက်ကို စမ်းသပ်ဆဲဟု ယူဆဆဲဖြစ်သည် - API သည် မတည်ငြိမ်သေးဘဲ ဆက်လက်ဖွံ့ဖြိုးဆဲဖြစ်သည်။ ထို့အပြင် စီစဉ်ထားသော အခွင့်အလမ်းများအားလုံးကို အကောင်အထည်မဖော်နိုင်သေးပါ။ နှစ်ကုန်ပိုင်းတွင် developer များသည် Aya ၏လုပ်ဆောင်နိုင်စွမ်းကို libbpf နှင့် လိုက်လျောညီထွေဖြစ်စေရန် မျှော်လင့်ထားပြီး ပထမဦးဆုံးတည်ငြိမ်သောဖြန့်ချိမှုကိုဖန်တီးရန် 2022 ဇန်နဝါရီတွင်ဖြစ်သည်။ Linux kernel အတွက် Rust ကုဒ်ရေးရန် လိုအပ်သော Aya ၏ အစိတ်အပိုင်းများကို တင်ရန်၊ ပူးတွဲရန်နှင့် eBPF ပရိုဂရမ်များနှင့် အပြန်အလှန်တုံ့ပြန်ရန် အသုံးပြုသူ-အာကာသ အစိတ်အပိုင်းများနှင့် ပေါင်းစပ်ရန် အစီအစဉ်များလည်း ရှိပါသည်။

eBPF သည် Linux kernel တွင်တည်ဆောက်ထားသော bytecode စကားပြန်တစ်ခုဖြစ်ပြီး၊ သင့်အား network operation handlers များဖန်တီးခြင်း၊ စနစ်လည်ပတ်မှုကိုစောင့်ကြည့်ခြင်း၊ စနစ်ခေါ်ဆိုမှုများကြားဖြတ်ခြင်း၊ ဝင်ရောက်ထိန်းချုပ်ခြင်း၊ အချိန်ကိုထိန်းသိမ်းထားစဉ်အတွင်းဖြစ်ရပ်များကိုလုပ်ဆောင်ခြင်း၊ ကြိမ်နှုန်းနှင့်လုပ်ဆောင်မှုအချိန်ကိုတွက်ချက်လုပ်ဆောင်နိုင်စေသည် kprobes/uprobes/tracepoints များကို အသုံးပြု၍ ခြေရာခံခြင်း။ JIT စုစည်းမှုကို အသုံးပြုခြင်းကြောင့် bytecode ကို စက်ညွှန်ကြားချက်များအဖြစ် ပျံသန်းပြီး မူရင်းကုဒ်၏စွမ်းဆောင်ရည်ဖြင့် လုပ်ဆောင်ပါသည်။ XDP သည် ကွန်ရက်ဒရိုင်ဘာအဆင့်တွင် BPF ပရိုဂရမ်များကို လည်ပတ်ရန်အတွက် ကိရိယာများကို ပံ့ပိုးပေးသည်၊ ၎င်းသည် DMA ပက်ကတ်ကြားခံကို တိုက်ရိုက်ဝင်ရောက်နိုင်စေကာမူ ကြီးမားသောကွန်ရက်ဝန်ဆောင်မှုအောက်တွင် အလုပ်လုပ်ရန်အတွက် စွမ်းဆောင်ရည်မြင့် ပရိုဆက်ဆာများကို ဖန်တီးနိုင်စေပါသည်။

source: opennet.ru

မှတ်ချက် Add