Rust WebRTC SFU'da thread-per-core geçişi: 70ms'den 10ms gecikmeye
PulseBeam, Rust tabanlı WebRTC SFU'sunu Tokio work-stealing modelinden thread-per-core mimariye taşıyarak P99.99 gecikmeyi 70ms'den 10ms'ye indirdi, kapasiteyi %25 artırdı.
Açık kaynaklı Rust WebRTC SFU'su PulseBeam, Tokio'nun varsayılan çok iş parçacıklı work-stealing zamanlayıcısından thread-per-core (TPC) mimarisine geçerek uçtan uca P99.99 gecikmesini kararsız 70ms seviyesinden sabit 10ms'ye düşürdü ve sistem kapasitesini %25 artırdı. Sorunun kökeninde, her paket için demux, işleme ve fan-out adımlarının ayrı async görevler ve kanallar üzerinden yürütülmesi vardı; bu yapı, tamamlanmaya yakın paketlerin yeni gelen paketler yüzünden askıya alınmasına yol açan bir öncelik tersine dönmesi (priority inversion) yaratıyordu.
Ekip, sans-I/O str0m kütüphanesi sayesinde medya yığınını yeniden yazmadan eşzamanlılık modelini değiştirebildi. Kanal atlamaları kaldırılarak her bağlantının tüm işlem hattı (soketten gelen paketin işlenip tekrar soketle gönderilmesi) tek bir CPU çekirdeğine sabitlenen tek bir görevde senkron biçimde çalıştırıldı. Bu, eşzamanlılığı azaltsa da çekirdekler arası çekişmeyi ortadan kaldırıp önbellek isabet oranını yükseltti; yaklaşım, Redpanda, ScyllaDB gibi shard-per-core mimarisi kullanan sistemlerle paralellik gösteriyor. LiveKit'in Go tabanlı work-stealing yaklaşımı ve mediasoup'un process-per-core modeliyle karşılaştırıldığında, PulseBeam kilitsiz ve hafif bir profil için çok çekirdekli süreç yönetimi karmaşıklığından kaçınmayı tercih etti.
Geçiş, her iş parçacığı başına bir Tokio LocalRuntime kullanılarak, SDP müzakeresi ve trafik kabulünü yöneten ayrı bir kontrol iş parçacığıyla tamamlandı; shardlar arası iletişim en fazla tek kanal atlamasıyla sınırlandırıldı. Underclock edilmiş dört izole i9-12900HK P-core üzerinde, 4 katılımcılı 120 odaya kadar (480 eşzamanlı katılımcı) yapılan benchmarklar hem ICE round-trip time hem de uçtan uca gecikmede belirgin iyileşme gösterdi. Bu çalışma, gerçek zamanlı medya sunucularında görev sayısının ve kanal atlama noktalarının kuyruk gecikmesi üzerindeki etkisini somut biçimde ortaya koyuyor.