Zero-Copy I/O - Veriyi RAM İçinde Gezintiye Çıkarmamak

sendfile, splice ve zero-copy yaklaşımının CPU ve memory copy maliyetini nasıl azalttığını inceliyoruz.

Hakan E. · · Akademi

Zero-Copy I/O · heworx Akademi

Bir dosyayı socket üzerinden göndermek için klasik yaklaşım veriyi diskten kernel buffer'a, oradan kullanıcı alanına, sonra yeniden socket buffer'a taşıyabilir. Her kopyalama memory bandwidth ve CPU zamanı tüketir. Zero-copy teknikleri verinin kullanıcı alanına gereksiz yere kopyalanmasını azaltarak kernel içindeki buffer'lar arasında daha doğrudan aktarım sağlamaya çalışır.

sendfile() dosya descriptor'ından socket'e veri göndermek için yaygın örnektir. splice() ise pipe üzerinden descriptor'lar arasında veri hareketini farklı biçimde düzenleyebilir. Burada zero-copy ifadesi her mimaride kesinlikle sıfır fiziksel copy olduğu anlamına gelmez. Hedef gereksiz CPU-mediated copy sayısını azaltmaktır. Pazarlama departmanı bu ayrıntıyı genellikle dipnota bırakır.

Büyük statik dosya sunumu, proxy veya yüksek throughput network servislerinde kazanç belirgin olabilir. Küçük payload'larda ise syscall düzeni, TLS ve uygulama katmanı maliyetleri daha baskın olabilir. Yani yine ölçmek gerekiyor. Performans dünyasının en sinir bozucu ama en doğru cevabı budur.

heworx

heworx