CPU Stresi Altında bfdd vs XDP: 44 Flap'e Karşı Sıfır
BFD oturumlarında CPU yükü altında bfdd 120 saniyede 44 kez sahte flap üretirken, XDP tabanlı hızlı yol sıfır flap ile line-card benzeri kararlılık sağladı.
Bir mühendis, BGP/OSPF gibi protokollerin altında çalışan BFD failure detector'ının CPU yükü altında sahte flap üretme sorununu ölçeklendirilebilir şekilde test etti. FRR'nin bfdd'si, timer/hrtimer stresi altında 120 saniyede 44 kez sahte flap üretti; ilginç olan p99 gecikmenin 10.2ms gibi normal seviyede kalmasına rağmen maksimum TX aralığının 970ms'e kadar çıkması, yani percentile tabanlı izlemenin bu tür açlık (starvation) olaylarını yakalayamamasıydı. Basit bir busy-loop userspace daemon aynı stres altında hiç flap üretmedi, bu da sorunun userspace olmasından değil bfdd'nin event loop mimarisinden kaynaklandığını gösterdi. SCHED_FIFO ile öncelik savaşını kazanmak (chrt -f 90 + pinned core) flap'i sıfırlıyor ama gerçek trafik yönlendiren bir kutuda bu önceliği garanti etmek mümkün değil; SO_TXTIME + etf qdisc jitter'ı iyileştirse de canlılık (liveness) sorununu çözemiyor ve ARP gibi zaman damgasız paketleri düşürüyor.
XDP tabanlı yaklaşım ise normal process priority'de sıfır flap ve maksimum 12.5ms gecikme ile sonuçlandı. Çekirdekte bpf_timer'ın paket üretemediği kısıtı nedeniyle gelen BFD çerçevesi yerinde yeniden yazılıp XDP_TX ile geri gönderiliyor; TX saati böylece peer'in saatine bağlanıyor ve Linux zamanlayıcısının erişemeyeceği bir alanda kalıyor. Ölü peer tespiti için 5ms'lik bir bpf_timer taraması kullanılırken, RFC 5880 durum makinesi userspace'de kalmaya devam ediyor ve standart FRR ile interop sağlanabiliyor. Beş dakikalık tam matris testinde 11 dakikada sadece 1 flap görüldü, bu da hrtimer fırtınası sırasında 28ms gecikmeli tek bir echo paketiydi ve 3.8ms içinde kendiliğinden toparlandı.
Sonuçlar, donanım hattı kartlarının sunduğu BFD offload davranışının commodity bir Linux NIC üzerinde XDP ile büyük ölçüde taklit edilebileceğini gösteriyor. Testler VM ortamında, tek oturum, IPv4, kimlik doğrulamasız ve tek taraf RX-clocked olacak şekilde yapıldı; bare-metal doğrulama henüz bekleniyor. Sonraki adım, bfdd'yi hiç yamalamadan FRR'nin distributed-BFD dataplane soketine (bfddp) entegre olmak.