« Tüm yayınlar

XDP BFD FRR'a Entegre: Stres Testinde 107 Flap'a Karşı 0

XDP tabanlı BFD, FRR'nin standart bfdd'siyle entegre oldu; stres testinde flap sayısını sıfıra indirirken FRR ve çekirdek hatalarını da ortaya çıkardı.

Bir eBPF/XDP tabanlı BFD veri düzlemi, FRR'nin standart bfdd sürecine entegre edildi; oturum yaşam döngüsü bfdd'nin mevcut bfddp veri düzlemi soketi üzerinden yönetiliyor, paketler ise XDP hızlı yolundan geçiyor. FRR'ye herhangi bir yama gerekmiyor ve show bfd peers counters çıktısı doğrudan BPF map'lerinden okunuyor.

Aynı SCHED_FIFO stres testinde, değiştirilmemiş bfdd 107 oturum flap'i kaydederken, XDP destekli oturumda flap sıfır oldu. Paket başına ortalama işlem maliyeti yaklaşık 701ns (ayrıştırma, TTL/GTSM kontrolü, demux, map güncellemesi ve echo paketleri için XDP_TX/rewrite dahil). --dp-hold modu, bfdd yeniden başlatmaları sırasında oturumları canlı tutuyor; ardışık yeniden başlatmalarda peer tarafında görünen hiçbir olay yaşanmadı.

Entegrasyon çalışması gerçek bir FRR hatası ortaya çıkardı: bfdd'nin veri düzlemi soketi, sockaddr_un sınırını aşan bir addrlen değeri geçiriyordu ve bu EINVAL hatasına yol açıyordu; hata üst akışa bildirildi ve düzeltme birleştirildi. Ayrıca XDP tarafında da birkaç hata bulunup düzeltildi: reddedilen paketlerin XDP_DROP yerine XDP_PASS ile kullanıcı alanına sızmasına izin veren bir doğrulama açığı, IP seçenekli paketler için bir bypass, echo yolunda uzunluk/checksum hatası ve iki farklı yolda bağımsız olarak yazılan bir zaman damgası taşma hatası.

Proje halen tek oturum, yalnızca IPv4 ve sanal makine testleriyle sınırlı; sırada çoklu oturum desteği, IPv6 ve bare-metal testleri var. Yüksek performanslı veri düzlemleri üzerinde çalışan mühendisler için bu yazı, çekirdek bypass tekniklerini mevcut kontrol düzlemi daemonlarıyla birleştirmenin operasyonel maliyetlerine dair iyi bir örnek oluşturuyor.