- QUIC, web uygulaması performansını iyileştirmede çığır açıcı bir değişim yaratması beklenen bir protokol olsa da performansı beklentilerin altında kalıyor
- Bu makale, yüksek hızlı ağlarda QUIC performansını sistematik olarak analiz ediyor
Özet
- Yüksek hızlı internette UDP+QUIC+HTTP/3 yığını, TCP+TLS+HTTP/2'ye kıyasla veri aktarım hızında en fazla %45,2 düşüş gösteriyor
- QUIC ile HTTP/2 arasındaki performans farkı, temel bant genişliği arttıkça büyüyor
- Bu sorun, hafif veri aktarım istemcileri ve başlıca web tarayıcılarında (Chrome, Edge, Firefox, Opera), çeşitli ana sistemlerde (masaüstü, mobil) ve farklı ağlarda (kablolu geniş bant, hücresel) gözlemleniyor
- Yalnızca dosya aktarımını değil, video akışı (video bit hızında en fazla %9,8 düşüş), web'de gezinme gibi çeşitli uygulamaları da etkiliyor
- Ayrıntılı paket izleme analizi ile çekirdek ve kullanıcı alanı profillemesi sayesinde kök nedenler belirleniyor
- Özellikle, aşırı veri paketi yükü ve QUIC'in kullanıcı alanındaki ACK'leri nedeniyle alıcı tarafındaki işleme ek yükü yüksek
- Gözlemlenen performans sorunlarını hafifletmek için somut öneriler sunuluyor
Performans düşüşünün kök nedenleri
- Alıcı tarafında çekirdek düzeyinde aşırı paket işleme ek yükü oluşuyor
- QUIC, UDP GRO (Generic Receive Offload) kullanmadığı için TCP'ye göre çok daha fazla paketi işlemek zorunda kalıyor
- Bunun, QUIC'te
netif_receive_skb fonksiyonu çağrı sayısının çok daha yüksek olmasıyla doğrulandığı belirtiliyor
- Kullanıcı alanında da QUIC'in aşırı paket işleme ek yükü oluşuyor
- Çekirdekten iletilen çok sayıdaki paketi işlemenin ek yükü büyük
- QUIC ACK'lerinin kullanıcı alanında oluşturulması da bu ek yükün nedenlerinden biri
Performans düşüşünü hafifletmeye yönelik öneriler
- Alıcı tarafında UDP GRO'nun devreye alınması
- UDP yığınının işlemesi gereken paket sayısını azaltarak çekirdek ve kullanıcı alanı ek yükünü düşürmek
- Ancak UDP GRO'yu farklı istemci ortamlarında devreye almak kolay olmayabilir
- GSO/GRO gibi offloading çözümlerini QUIC'e uygun şekilde iyileştirmek
- Farklı boyutlardaki UDP paket trenlerinin de offloading kapsamında desteklenmesi
- Ağ tıkanıklığını önlemek için GSO'ya uygun pacing ayarlarının eklenmesi
- Alıcı tarafındaki QUIC mantığını optimize etmek
- QUIC ACK gönderimini geciktirerek yanıt üretme ek yükünü azaltmak
recvmmsg kullanarak bir seferde birden fazla UDP paketini okuyup performansı artırmak
- Çok iş parçacıklı indirme kullanmak
- Büyük dosyalarda birden fazla CPU çekirdeğinden yararlanan çok iş parçacıklı indirme ile alım performansı artırılabilir
- Ancak adalet sorunları dikkate alınmalı
1 yorum
Hacker News görüşü