Baslangic
Platform tanitimi
Bu platform, eBPF öğrenmenize yardımcı olmak için yapılandırılmış bir ortam ve alıştırmalar sunar.
Editör, siz yazarken kodunuzu lokal olarak derler, ancak butonuna tıklayarak bunu devre dışı bırakabilirsiniz. Derleme hataları satır içinde vurgulanır.
Editöre bir şeyler yazmayı deneyin ve nasıl tepki verdiğini görün, ardından kodunuzu sunucuda çalıştırmak için ‘Run’ butonuna tıklayın.
‘vim mode’ tercih ediyorsanız, butonu bunu açıp kapatır.
Kısayol tuşları
- Ctrl+Enter kodu çalıştırır.
- Ctrl+Click type definition’lar üzerinde (
my_struct,trace_event_raw_sched_process_exec) bir type definition popup’ı gösterir
Debug araçları
Programlarınızdan veri görüntülemek için birden fazla DEBUG_ macro’su mevcuttur.
Her macro, ilk argüman olarak bir label (string constant) alır.
DEBUG_NUM(label, num)-u32veyassize_tgibi herhangi bir sayı alabilirDEBUG_STR(label, buf)-char[64]gibi sabit boyutlu bir buf gerektirirDEBUG_STR_LEN(label, ptr, len)- herhangi bir pointer alabilir,lenbyte debug ederDEBUG_STRUCT(label, struct)- herhangi bir struct’ı değer olarak alabilir
Geliştirici araçları
Bir programı çalıştırdığınızda sağdaki panel, kernel’in içinde tam olarak ne olduğunu inceleyebileceğiniz sekmelere dönüşür:
- Events — programınızın yaydığı her şeyin sıralı, canlı akışı.
- Bytecode — derlenmiş BPF komutları; her biri geldiği C satırına bağlıdır. Bir komutun üzerine gelin, aynı kaynak satırdan gelen tüm komutlar vurgulanır.
- Complexity — komut, map ve döngü sayısının canlı ölçümü; verifier limitlerine göre gösterilir, böylece programınızın ne kadar ağır olduğunu görürsünüz.
- Timeline — kernel verifier’ının raporu, adım adım gezilir; böylece bir reddi tek bir log yığını yerine daha okunaklı görürsünüz.
- Maps — programınızın yazdığı
hash/array/lru_hashmap’lerinin içeriği; hex artı bir tamsayı/string görünümüyle çözümlenir. - Rate — programınızın zaman içinde ne sıklıkla tetiklendiğini gösteren histogram.
- Flame — yakalanan kernel stack’lerinin flame graph’ı (yalnızca
bpf_get_stackid()ile stack kaydeden programlar için). - Steps — yayılan event’ler arasında tek tek ileri/geri adımlayıp programınızın yaptıklarını yeniden oynatan bir kontrol.
Editörün kendisi de yazarken yardımcı olur:
SEC("...")içinde otomatik tamamlama, bu kernel’de gerçekten var olan tracepoint ve kprobe’ları önerir; böylece bir attach noktasını tahmin etmezsiniz.- Helper otomatik tamamlama, çağırabileceğiniz eBPF helper’larını sunar. Dikkat: bir helper yalnızca belirli program tiplerinde çalışır — bu platform tracepoint, kprobe ve XDP programları çalıştırır, bu yüzden orada geçerli olan helper’ları belgeler. Kernel’de toplam ~200 helper var, ama LSM, sysctl, socket veya cgroup gibi aileler başka program tiplerine aittir ve verifier bunları burada reddeder — bozuk değiller, sadece bu alıştırmaların kapsamı dışındalar.
- Satır içi verifier hataları, bir çalıştırma reddedildiğinde yalnızca panelde değil, ilgili satırda kırmızı bir işaret olarak görünür.
- Derleyici ipuçları, bir derleme veya verifier hatası bilinen bir nedene uyduğunda bir düzeltme önerir (eksik bir flag, bir sınır kontrolü, bir header).
Ve iki kolaylık daha:
- Share, mevcut kodunuzu kodlayan bir bağlantı kopyalar; böylece baktığınız programın tam halini birine verebilirsiniz.
- Hints, bir alıştırma sağladığında yardımı adım adım açar; böylece tüm cevabı bir anda görmeden takıldığınız yerden çıkarsınız.
Cevap gönderme
Alıştırmaları çözmek için cevaplarınızı doğrudan kodunuzdan, SUBMIT_NUM(answer), SUBMIT_STR(answer) veya SUBMIT_STR_LEN(answer, len) kullanarak göndermeniz gerekir.
eBPF programınız birden fazla event’te tetiklenir, bu yüzden SUBMIT_X çağrılarınızı korumanız gerekir, çünkü birden fazla gönderim tüm cevapları geçersiz kılar.
SUBMIT_STR kullanırken sondaki null byte’lar kırpılır, ancak sondaki gereksiz veriler kırpılmaz. Null termination garantisi olmadığında SUBMIT_STR_LEN varyantını kullanın.
Bu alıştırmayı, SUBMIT_STR("the answer"); satırının yorum işaretlerini kaldırarak çözün.