Çok yüksek performanslı bir Linux sunucusu yapıyorum (epoll, bloke olmayan soketler ve uyumsuz disk IO tabanlı olarak [io_submit/io_getevents/eventfd] tabanlı). Bazı testlerim, yuvaları işleme şeklimin gereksinimlerim için yeterince verimli olmadığını gösteriyor. Özellikle, kullanıcı alanı arabelleğinden ağ kartına ve ağ kartından kullanıcı alanı arabelleğine veri almakla ilgileniyorum (şimdilik şimdilik sendfile çağrılarını görmezden gelelim).Verimli Linux soketleri (DMA/sıfır-kopya)
Anlaştığımdan, engellemeyen bir Linux yuvasında okuma/yazma işlemi tamamen eşzamansız değil - sistem çağrısı arabelleği kullanıcı alanından çekirdeğe kopyalarken (veya başka bir şekilde) sadece o zaman döner. Linux'ta bu duyulmadan kaçınmanın bir yolu var mı? Özellikle, hemen geri dönecek bir soket üzerine yapabildiğim tam bir eşzamanlı yazma çağrısı var, gerektiğinde ağ kartına kullanıcı alanı tamponu DMA ve bir olay/etc sinyali/ayarla. tamamlanma tarihinde? Windows'un bunun için bir arabirimi olduğunu biliyorum, ancak bu konuda Linux'ta bir şey bulamadım.
Teşekkürler!
Teşekkürler! Bunun okuma/yazma konusunda ne kadar verimli olacağına dair bir önseziniz var mı? Genel olarak, bu tür şeyler için bir yerlerde "en iyi uygulamalar" kılavuzu var mı? Tüm sorgulama ve sinyalizasyon API'lerini incelemek ve daha sonra çoklayıcı soket ve asenkron IO için en iyi uygulamayı bulmadan önce hepsini karşılaştırmak için daha fazla zaman gerekiyordu. Bir soket en iyi uygulama rehberi bulmak gerçekten yardımcı olur. C10K problem sayfası var, fakat bilginin çoğu uzun yıllar (yani çekirdek çağında) ve genellikle çok yetersiz. –
'splice' ve arkadaşları oldukça yeni, bu yüzden henüz onlar için herhangi bir" en iyi uygulamalar "kılavuzu varsa emin değilim. Mümkün olan yerlerde oldukça düşük bir gecikme ve sıfır kopya olmalıdırlar - bu onların bütün noktasıdır. Linux-net ve/veya linux-çekirdek posta listelerini sormayı deneyebilirsiniz. – caf
Bu ilanlar 1.5 yıl geçti, bu alandaki gelişmeler nelerdir? @ caf: bunu 'ekleme' ile yapabiliyordunuz? –