BPF ۽ eBPF جو مختصر تعارف

هيلو، حبر! اسان توهان کي ٻڌائڻ چاهيون ٿا ته اسان رليز لاءِ ڪتاب تيار ڪري رهيا آهيون.BPF سان لينڪس مشاهدو".

BPF ۽ eBPF جو مختصر تعارف
جيئن ته BPF ورچوئل مشين ترقي ڪرڻ جاري رکي ٿي ۽ عملي طور تي استعمال ٿي رهي آهي، اسان توهان لاءِ ترجمو ڪيو آهي هڪ مضمون جو بيان ڪندي ان جي بنيادي صلاحيتن ۽ موجوده حالت کي.

تازن سالن ۾، پروگرامنگ جا اوزار ۽ ٽيڪنڪ مقبول ٿي چڪا آهن لينڪس ڪنيل جي حدن کي معاوضو ڏيڻ لاءِ انهن ڪيسن ۾ جتي اعليٰ ڪارڪردگي پيڪيٽ پروسيسنگ گهربل هجي. هن قسم جي سڀ کان مشهور ٽيڪنالاجي مان هڪ سڏيو ويندو آهي ڪرنل بائي پاس (kernel bypass) ۽ اجازت ڏئي ٿو، ڪنيل نيٽ ورڪ پرت کي نظرانداز ڪندي، صارف جي جاءِ مان سڀ پيڪيٽ پروسيسنگ انجام ڏيڻ لاءِ. ڪرنل کي پاس ڪرڻ ۾ نيٽ ورڪ ڪارڊ کي ڪنٽرول ڪرڻ پڻ شامل آهي استعمال ڪندڙ خلا. ٻين لفظن ۾، جڏهن نيٽ ورڪ ڪارڊ سان ڪم ڪري، اسان ڊرائيور تي ڀروسو ڪندا آهيون استعمال ڪندڙ خلا.

نيٽ ورڪ ڪارڊ جي مڪمل ڪنٽرول کي يوزر-اسپيس پروگرام ۾ منتقل ڪرڻ سان، اسان ڪرنل اوور هيڊ کي گھٽ ڪريون ٿا (ڪانٽيڪٽ سوئچنگ، نيٽ ورڪ ليئر پروسيسنگ، مداخلت، وغيره)، جيڪو تمام ضروري آهي جڏهن 10Gb/s يا ان کان وڌيڪ جي رفتار تي هلندي. ڪنيل بائي پاس ۽ ٻين خاصيتن جو هڪ ميلاپ (بيچ پروسيسنگ) ۽ محتاط ڪارڪردگي ٽيوننگ (NUMA اڪائونٽنگ, سي پي يو اڪيلائي، وغيره) صارف جي جاءِ ۾ اعليٰ ڪارڪردگي نيٽ ورڪ پروسيسنگ جي بنيادي اصولن سان مطابقت رکي ٿي. شايد پيڪٽ پروسيسنگ جي هن نئين طريقي جو هڪ مثالي مثال آهي ڊي پي ڊي آر Intel کان (ڊيٽا پلين ڊولپمينٽ کٽ)، جيتوڻيڪ ٻيا مشهور اوزار ۽ ٽيڪنالاجيون آهن، جن ۾ Cisco's VPP (Vector Packet Processing)، Netmap ۽ يقيناً، ڇنڊڇاڻ.

يوزر اسپيس ۾ نيٽ ورڪ رابطي کي منظم ڪرڻ جا ڪيترائي نقصان آهن:

  • OS ڪنييل هارڊويئر وسيلن لاءِ هڪ تجريدي پرت آهي. ڇاڪاڻ ته يوزر اسپيس پروگرامن کي پنهنجي وسيلن کي سڌو سنئون منظم ڪرڻو پوندو آهي، انهن کي پڻ پنهنجي هارڊويئر کي منظم ڪرڻو پوندو آهي. اهو اڪثر ڪري توهان جي پنهنجي ڊرائيور کي پروگرام ڪرڻ جو مطلب آهي.
  • ڇاڪاڻ ته اسان مڪمل طور تي ڪرنل جي جڳهه کي ڇڏي ڏيون ٿا، اسان سڀني نيٽ ورڪنگ ڪارڪردگي کي پڻ ڏئي رهيا آهيون جيڪي ڪنيل پاران مهيا ڪيل آهن. يوزر اسپيس پروگرامن کي لازمي طور تي خاصيتون شامل ڪرڻ گهرجن جيڪي اڳ ۾ ئي ڪنيل يا آپريٽنگ سسٽم پاران مهيا ڪيل هجن.
  • پروگرام سينڊ باڪس موڊ ۾ هلن ٿا، جيڪو سنجيدگي سان انهن جي رابطي کي محدود ڪري ٿو ۽ انهن کي آپريٽنگ سسٽم جي ٻين حصن سان ضم ٿيڻ کان روڪي ٿو.

جوهر ۾، جڏهن صارف جي جڳهه ۾ نيٽ ورڪنگ، ڪارڪردگي حاصلات حاصل ڪري رهيا آهن پيڪٽ پروسيسنگ کي ڪنييل کان صارف جي جاء تي منتقل ڪندي. XDP بلڪل ان جي ابتڙ ڪندو آهي: اهو نيٽ ورڪنگ پروگرامن کي يوزر اسپيس (فلٽر، ريزلور، روٽنگ، وغيره) مان ڪنيل اسپيس ۾ منتقل ڪري ٿو. XDP اسان کي نيٽ ورڪ فنڪشن انجام ڏيڻ جي اجازت ڏئي ٿي جيئن ئي هڪ پيڪٽ نيٽ ورڪ انٽرفيس کي هٽايو ۽ ان کان اڳ جيڪو ڪني نيٽ ورڪ سب سسٽم ۾ منتقل ٿيڻ شروع ٿئي. نتيجي طور، پيٽ جي پروسيسنگ جي رفتار خاص طور تي وڌي ٿي. بهرحال، ڪنيل ڪيئن صارف کي اجازت ڏئي ٿو ته انهن جي پروگرامن کي ڪرنل اسپيس ۾ عمل ڪري؟ هن سوال جو جواب ڏيڻ کان اڳ، اچو ته ڏسو ته BPF ڇا آهي.

BPF ۽ eBPF

مونجهاري واري نالي جي باوجود، BPF (Berkeley Packet Filtering)، حقيقت ۾، هڪ مجازي مشين ماڊل آهي. هي ورچوئل مشين اصل ۾ پيڪٽ فلٽرنگ کي سنڀالڻ لاءِ ٺهيل هئي، تنهن ڪري نالو.

BPF استعمال ڪندي سڀ کان وڌيڪ مشهور اوزارن مان هڪ آهي tcpdump. جڏهن استعمال ڪندي پيڪيجز کي پڪڙڻ tcpdump استعمال ڪندڙ فلٽر پيڪيٽ لاء هڪ اظهار بيان ڪري سگهي ٿو. صرف هن ايڪسپريس سان ملندڙ پيڪيٽ کي پڪڙيو ويندو. مثال طور، اظهار "tcp dst port 80” بندرگاهه 80 تي پهچندڙ سڀني TCP پيڪٽس ڏانهن اشارو آهي. مرتب ڪندڙ هن اظهار کي مختصر ڪري سگهي ٿو ان کي BPF bytecode ۾ تبديل ڪري.

$ sudo tcpdump -d "tcp dst port 80"
(000) ldh [12] (001) jeq #0x86dd jt 2 jf 6
(002) ldb [20] (003) jeq #0x6 jt 4 jf 15
(004) ldh [56] (005) jeq #0x50 jt 14 jf 15
(006) jeq #0x800 jt 7 jf 15
(007) ldb [23] (008) jeq #0x6 jt 9 jf 15
(009) ldh [20] (010) jset #0x1fff jt 15 jf 11
(011) ldxb 4*([14]&0xf)
(012) ldh [x + 16] (013) jeq #0x50 jt 14 jf 15
(014) ret #262144
(015) ret #0

اھو اھو آھي جيڪو مٿي ڏنل پروگرام بنيادي طور تي ڪندو آھي:

  • ھدايتون (000): پيڪٽ لوڊ ڪريو آفسيٽ 12 تي، 16-bit لفظ جي طور تي، جمع ڪندڙ ۾. آفسٽ 12 پيڪٽ جي ايٿٽائپ سان ملندڙ جلندڙ آهي.
  • ھدايتون (001): 0x86dd سان گڏ ڪندڙ ۾ قدر جو مقابلو ڪري ٿو، اھو آھي، IPv6 لاءِ ايٿرائپ جي قيمت سان. جيڪڏهن نتيجو سچو آهي، ته پوء پروگرام جو انسداد وڃي ٿو هدايتون (002)، ۽ جيڪڏهن نه، ته پوء (006).
  • ھدايتون (006): 0x800 (IPv4 لاءِ ethertype ويل) سان قدر جي ڀيٽ ڪري ٿو. جيڪڏهن جواب صحيح آهي ته پوءِ پروگرام وڃي (007)، جيڪڏهن نه، ته پوءِ (015) ڏانهن.

۽ پوءِ تيستائين پيڪٽ فلٽرنگ پروگرام جو نتيجو موٽائي. اهو عام طور تي هڪ Boolean آهي. هڪ غير صفر قدر واپس ڪرڻ (هدايت (014)) جو مطلب آهي ته پيڪٽ قبول ڪيو ويو، ۽ صفر قيمت واپس ڪرڻ (هدايت (015)) جو مطلب آهي ته پيڪٽ قبول نه ڪيو ويو.

BPF ورچوئل مشين ۽ ان جو بائيٽ ڪوڊ 1992 جي آخر ۾ اسٽيو ميڪن ۽ وان جيڪبسن پاران تجويز ڪيو ويو جڏهن انهن جو پيپر شايع ڪيو ويو. بي ايس ڊي پيڪٽ فلٽر: نئين آرڪيٽيڪچر لاءِ يوزر-ليول پيڪٽ ڪيپچرهن ٽيڪنالاجي پهريون ڀيرو 1993 جي سياري ۾ Usenix ڪانفرنس ۾ پيش ڪيو ويو.

ڇاڪاڻ ته بي پي ايف هڪ مجازي مشين آهي، اهو ماحول کي بيان ڪري ٿو جنهن ۾ پروگرام هلن ٿا. بائيٽ ڪوڊ کان علاوه، اهو پڻ وضاحت ڪري ٿو بيچ ميموري ماڊل (لوڊ هدايتون واضح طور تي بيچ تي لاڳو ٿين ٿيون)، رجسٽرز (A ۽ X؛ جمع ڪندڙ ۽ انڊيڪس رجسٽرز)، اسڪريچ ميموري اسٽوريج، ۽ هڪ امڪاني پروگرام ڪائونٽر. دلچسپ ڳالهه اها آهي ته، BPF بائيٽ ڪوڊ موٽرولا 6502 ISA کان پوءِ ماڊل ڪيو ويو. جيئن Steve McCann پنهنجي ۾ ياد ڪيو مڪمل رپورٽ Sharkfest '11 تي، هو ايپل II تي پنهنجي هاءِ اسڪول جي ڏينهن جي پروگرامنگ کان 6502 کان واقف هو، ۽ هن ڄاڻ هن جي ڪم کي متاثر ڪيو BPF بائيٽ ڪوڊ ڊزائين ڪرڻ.

BPF سپورٽ لينڪس ڪرنل ۾ ورزن v2.5 ۽ اعليٰ ۾ لاڳو ڪئي وئي آهي، خاص طور تي Jay Schullist جي ڪوششن سان شامل ڪيو ويو آهي. BPF ڪوڊ 2011 تائين تبديل نه ٿيو، جڏهن Eric Dumaset BPF مترجم کي JIT موڊ ۾ هلائڻ لاءِ نئين سر ترتيب ڏنو (ذريعو: پيڪٽ فلٽرن لاءِ JIT). ان کان پوء، ڪرنل، BPF bytecode جي تعبير ڪرڻ بدران، سڌو BPF پروگرامن کي ٽارگيٽ فن تعمير ۾ تبديل ڪري سگھي ٿو: x86، ARM، MIPS، وغيره.

بعد ۾، 2014 ۾، Alexey Starovoitov BPF لاء نئين JIT ميڪانيزم جي تجويز پيش ڪئي. حقيقت ۾، هي نئين JIT هڪ نئين BPF تي ٻڌل فن تعمير بڻجي وئي ۽ سڏيو ويو eBPF. منهنجو خيال آهي ته ٻئي VMs ڪجهه وقت لاءِ گڏ هئا، پر في الحال پيڪٽ فلٽرنگ لاڳو ڪئي وئي آهي اي بي پي ايف جي بنياد تي. حقيقت ۾، جديد دستاويزن جي ڪيترن ئي مثالن ۾، BPF کي eBPF سمجهيو ويندو آهي، ۽ ڪلاسيڪل BPF اڄ cBPF طور سڃاتو وڃي ٿو.

eBPF ڪيترن ئي طريقن سان کلاسک BPF ورچوئل مشين کي وڌايو:

  • جديد 64-bit آرڪيٽيڪچر جي بنياد تي. eBPF 64-bit رجسٽر استعمال ڪري ٿو ۽ دستياب رجسٽرن جو تعداد وڌائي ٿو 2 (accumulator and X) کان 10 تائين. eBPF اضافي اپڪوڊس پڻ مهيا ڪري ٿو (BPF_MOV, BPF_JNE, BPF_CALL...).
  • نيٽ ورڪ پرت سبسسٽم کان ڌار. بي پي ايف بيچ ڊيٽا ماڊل سان ڳنڍيل هو. جيئن ته اهو پيڪيٽ فلٽرنگ لاءِ استعمال ڪيو ويو، ان جو ڪوڊ سب سسٽم ۾ واقع هو جيڪو نيٽ ورڪ ڪميونيڪيشن مهيا ڪري ٿو. بهرحال، eBPF ورچوئل مشين هاڻي ڊيٽا ماڊل سان ڳنڍيل ناهي ۽ ڪنهن به مقصد لاءِ استعمال ٿي سگهي ٿي. تنهن ڪري، هاڻي eBPF پروگرام کي ڳنڍي سگھجي ٿو tracepoint يا kprobe سان. اهو رستو کوليندو آهي اي بي پي ايف اوزار، ڪارڪردگي تجزيي، ۽ ٻين ڪنيل سب سسٽم جي حوالي سان ٻين ڪيترن ئي استعمال جي ڪيسن ۾. ھاڻي eBPF ڪوڊ پنھنجي رستي ۾ واقع آھي: kernel/bpf.
  • گلوبل ڊيٽا اسٽورن کي Maps سڏيو ويندو آهي. نقشا اھم قدر اسٽور آھن جيڪي صارف جي جڳھ ۽ ڪرنل اسپيس جي وچ ۾ ڊيٽا جي مٽاسٽا کي فعال ڪن ٿا. eBPF ڪيترن ئي قسمن جا نقشا مهيا ڪري ٿو.
  • ثانوي ڪم. خاص طور تي، هڪ پيڪيج کي ٻيهر لکڻ لاء، هڪ چيڪسم کي ڳڻڻ، يا هڪ پيڪيج کي کلون ڪرڻ لاء. اهي ڪم ڪارنيل اندر هلندا آهن ۽ صارف-اسپيس پروگرام نه آهن. توهان پڻ ڪري سگهو ٿا سسٽم ڪالون اي بي پي ايف پروگرامن مان.
  • ڪال ختم ڪريو. اي بي پي ايف ۾ پروگرام جي سائيز 4096 بائيٽ تائين محدود آهي. دم ڪال جي خصوصيت هڪ اي بي پي ايف پروگرام کي اجازت ڏئي ٿي ته ڪنٽرول کي نئين اي بي پي ايف پروگرام ڏانهن منتقل ڪري ۽ اهڙيءَ طرح هن حد کان پاسو ڪيو (32 پروگرامن تائين هن طريقي سان ڳنڍيل ٿي سگهن ٿا).

eBPF: مثال

لينڪس ڪنييل ذريعن ۾ اي بي پي ايف لاء ڪيترائي مثال آهن. اهي نموني/bpf/ تي دستياب آهن. انهن مثالن کي گڏ ڪرڻ لاء، صرف داخل ڪريو:

$ sudo make samples/bpf/

مان پاڻ eBPF لاءِ نئون مثال نه لکندس، پر نمونن/bpf/ ۾ موجود نمونن مان ھڪڙو استعمال ڪندس. مان ڪوڊ جا ڪجهه حصا ڏسندس ۽ وضاحت ڪندس ته اهو ڪيئن ڪم ڪري ٿو. مثال طور، مون پروگرام چونڊيو tracex4.

عام طور تي، نمونن ۾ هر هڪ مثال/bpf/ ٻن فائلن تي مشتمل آهي. هن معاملي ۾:

  • tracex4_kern.c, تي مشتمل آهي سورس ڪوڊ جنهن تي عمل ڪيو وڃي ٿو ڪنيل ۾ eBPF bytecode طور.
  • tracex4_user.c, استعمال ڪندڙ جي جاء کان هڪ پروگرام تي مشتمل آهي.

هن معاملي ۾، اسان کي گڏ ڪرڻ جي ضرورت آهي tracex4_kern.c eBPF bytecode ڏانهن. في الحال ۾ gcc eBPF لاءِ ڪو به پسمنظر ناهي. خوشقسمتيءَ سان، clang eBPF bytecode ڪڍي سگھي ٿو. Makefile استعمال ڪري ٿو clang گڏ ڪرڻ لاء tracex4_kern.c اعتراض فائل ڏانهن.

مون مٿي ذڪر ڪيو آهي ته اي بي پي ايف جي سڀ کان دلچسپ خاصيتن مان هڪ نقشا آهن. tracex4_kern ھڪڙو نقشو بيان ڪري ٿو:

struct pair {
    u64 val;
    u64 ip;
};  

struct bpf_map_def SEC("maps") my_map = {
    .type = BPF_MAP_TYPE_HASH,
    .key_size = sizeof(long),
    .value_size = sizeof(struct pair),
    .max_entries = 1000000,
};

BPF_MAP_TYPE_HASH اي بي پي ايف پاران پيش ڪيل ڪيترن ئي قسمن جي ڪارڊن مان هڪ آهي. هن معاملي ۾، اهو صرف هڪ hash آهي. توهان شايد هڪ اشتهار به ڏٺو هوندو SEC("maps"). SEC هڪ ميڪرو آهي جيڪو بائنري فائل جو نئون سيڪشن ٺاهڻ لاءِ استعمال ڪيو ويندو آهي. حقيقت ۾، مثال ۾ tracex4_kern ٻه وڌيڪ حصا بيان ڪيا ويا آهن:

SEC("kprobe/kmem_cache_free")
int bpf_prog1(struct pt_regs *ctx)
{   
    long ptr = PT_REGS_PARM2(ctx);

    bpf_map_delete_elem(&my_map, &ptr); 
    return 0;
}
    
SEC("kretprobe/kmem_cache_alloc_node") 
int bpf_prog2(struct pt_regs *ctx)
{
    long ptr = PT_REGS_RC(ctx);
    long ip = 0;

    // получаем ip-адрес вызывающей стороны kmem_cache_alloc_node() 
    BPF_KRETPROBE_READ_RET_IP(ip, ctx);

    struct pair v = {
        .val = bpf_ktime_get_ns(),
        .ip = ip,
    };
    
    bpf_map_update_elem(&my_map, &ptr, &v, BPF_ANY);
    return 0;
}   

اهي ٻه فنڪشن توهان کي نقشي مان هڪ داخلا حذف ڪرڻ جي اجازت ڏين ٿا (kprobe/kmem_cache_free) ۽ نقشي ۾ نئين داخلا شامل ڪريو (kretprobe/kmem_cache_alloc_node). سڀ فنڪشن جا نالا وڏن اکرن ۾ لکيا ويا آھن جيڪي ميڪرو ۾ بيان ڪيل آھن bpf_helpers.h.

جيڪڏهن آئون اعتراض فائل جي حصن کي ڊمپ ڪريان، مون کي ڏسڻ گهرجي ته اهي نوان حصا اڳ ۾ ئي بيان ڪيا ويا آهن:

$ objdump -h tracex4_kern.o

tracex4_kern.o: file format elf64-little

Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000000 0000000000000000 0000000000000000 00000040 2**2
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 kprobe/kmem_cache_free 00000048 0000000000000000 0000000000000000 00000040 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
2 kretprobe/kmem_cache_alloc_node 000000c0 0000000000000000 0000000000000000 00000088 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
3 maps 0000001c 0000000000000000 0000000000000000 00000148 2**2
CONTENTS, ALLOC, LOAD, DATA
4 license 00000004 0000000000000000 0000000000000000 00000164 2**0
CONTENTS, ALLOC, LOAD, DATA
5 version 00000004 0000000000000000 0000000000000000 00000168 2**2
CONTENTS, ALLOC, LOAD, DATA
6 .eh_frame 00000050 0000000000000000 0000000000000000 00000170 2**3
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA

پڻ آهي tracex4_user.c، مکيه پروگرام. بنيادي طور تي، هي پروگرام واقعن کي ٻڌندو آهي kmem_cache_alloc_node. جڏهن اهڙو واقعو ٿئي ٿو، لاڳاپيل eBPF ڪوڊ تي عمل ڪيو ويندو آهي. ڪوڊ هڪ نقشي ۾ اعتراض جي IP خاصيت کي محفوظ ڪري ٿو، ۽ اعتراض وري مکيه پروگرام ذريعي لوپ ڪيو ويندو آهي. مثال:

$ sudo ./tracex4
obj 0xffff8d6430f60a00 is 2sec old was allocated at ip ffffffff9891ad90
obj 0xffff8d6062ca5e00 is 23sec old was allocated at ip ffffffff98090e8f
obj 0xffff8d5f80161780 is 6sec old was allocated at ip ffffffff98090e8f

يوزر اسپيس پروگرام ۽ اي بي پي ايف پروگرام ڪيئن لاڳاپيل آهن؟ شروعات تي tracex4_user.c هڪ اعتراض فائل لوڊ ڪري ٿو tracex4_kern.o فنڪشن کي استعمال ڪندي load_bpf_file.

int main(int ac, char **argv)
{
    struct rlimit r = {RLIM_INFINITY, RLIM_INFINITY};
    char filename[256];
    int i;

    snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]);

    if (setrlimit(RLIMIT_MEMLOCK, &r)) {
        perror("setrlimit(RLIMIT_MEMLOCK, RLIM_INFINITY)");
        return 1;
    }

    if (load_bpf_file(filename)) {
        printf("%s", bpf_log_buf);
        return 1;
    }

    for (i = 0; ; i++) {
        print_old_objects(map_fd[1]);
        sleep(1);
    }

    return 0;
}

ڪرڻ سان load_bpf_file eBPF فائل ۾ بيان ڪيل تحقيقات شامل ڪيا ويا آھن /sys/kernel/debug/tracing/kprobe_events. هاڻي اسان انهن واقعن لاءِ ٻڌون ٿا ۽ اسان جو پروگرام ڪجهه ڪري سگهي ٿو جڏهن اهي ٿين ٿا.

$ sudo cat /sys/kernel/debug/tracing/kprobe_events
p:kprobes/kmem_cache_free kmem_cache_free
r:kprobes/kmem_cache_alloc_node kmem_cache_alloc_node

نموني/bpf/ ۾ ٻيا سڀئي پروگرام ساڳيا ترتيب ڏنل آهن. اهي هميشه ٻن فائلن تي مشتمل آهن:

  • XXX_kern.c: eBPF پروگرام.
  • XXX_user.c: مکيه پروگرام.

eBPF پروگرام نقشن جي سڃاڻپ ڪري ٿو ۽ ھڪڙي حصي سان لاڳاپيل ڪم. جڏهن ڪنيل هڪ خاص قسم جو واقعو جاري ڪري ٿو (مثال طور، tracepoint)، پابند افعال تي عمل ڪيو وڃي ٿو. ڪارڊ ڪنييل پروگرام ۽ يوزر اسپيس پروگرام جي وچ ۾ رابطي کي مهيا ڪن ٿا.

ٿڪل

هن مقالي ۾ عام اصطلاحن ۾ BPF ۽ eBPF تي بحث ڪيو ويو. مون کي خبر آهي ته اڄڪلهه اي بي پي ايف بابت تمام گهڻي معلومات ۽ وسيلا موجود آهن، تنهنڪري آئون وڌيڪ مطالعي لاءِ ڪجهه وڌيڪ وسيلن جي سفارش ڪندس

مان پڙهڻ جي صلاح ڏيان ٿو:

  • بي پي ايف: يونيورسل ان ڪننل ورچوئل مشين Jonathan Corbett. BPF جو هڪ تعارف ۽ اهو ڪيئن eBPF ۾ ترقي ڪئي.
  • eBPF جو مڪمل تعارف برينڊن گريگ. LWN.net کان آرٽيڪل. برينڊن اڪثر ڪري اي بي پي ايف بابت ٽوئيٽ ڪندو آهي ۽ هن جي موضوع تي وسيلن جي فهرست برقرار رکندو آهي. بلاگ پوسٽ.
  • BPF ۽ eBPF تي نوٽس جوليا ايوانز. سوچيڪرا شرما پاران پيش ڪيل پيشڪش تي تبصرا ”دي بي ايس ڊي پيڪٽ فلٽر: هڪ نئون آرڪيٽيڪچر فار يوزر ليول پيڪٽ ڪيپچر“. تبصرا سٺا آهن ۽ حقيقت ۾ توهان جي سلائڊ کي سمجهڻ ۾ مدد ڪن ٿا.
  • eBPF، حصو 1: ماضي، حال ۽ مستقبل فيرس ايلس. سان گڏ ڊگهو تسلسل، پر اهو پڙهڻ جي لائق آهي. ھڪڙو بھترين مضمونن مان جيڪو مون وٽ آيو آھي اي بي پي ايف تي.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو