Ana Sayfa

TCP Sıfır Kopyalama: Veri Aktarımında Performans Sırrı

1 dk okuma

TCP sıfır kopyalama (zero-copy), Linux çekirdeğinin, veri gönderip alırken çekirdek belleği ile kullanıcı alanı belleği arasında ek bir kopyalama yapılmasını engelleyen bir özelliğidir. Veri kopyalama işlemleri ek yük getirdiğinden, bu kopyalamadan kaçınmak performansı önemli ölçüde artırır. Bu özellikler, verilerin doğrudan kullanıcı alanından ağ cihazına aktarılmasını sağlayarak sistem kaynaklarının daha verimli kullanılmasını mümkün kılar.

Gönderici tarafında sıfır kopyalama, 2017 yılında eklenen MSG_ZEROCOPY bayrağı ile sendmsg() sistem çağrısı kullanılarak etkinleştirilir. Bu yöntemle, çekirdek veriyi kullanıcı alanından kendi belleğine kopyalamak yerine, doğrudan kullanıcı alanı veri tamponlarını işaret eden bir skb yapısı oluşturur. TCP paket başlıkları ayrı bir çekirdek belleği tamponunda oluşturulur. Ancak bu mekanizma, ağ cihazının scatter-gather DMA işlemlerini desteklemesini gerektirir; aksi takdirde çekirdek veriyi kopyalamak zorunda kalır.

sendmsg() çağrısı asenkron çalışır ve bellek tamponları artık yığın tarafından kullanılmadığında çekirdek, kullanıcı alanına bir bildirim gönderir. Bu bildirim, soket hata kuyruğu (recvmsg() ile MSG_ERRQUEUE bayrağı kullanılarak) aracılığıyla alınır ve uygulamanın bellek alanını ne zaman serbest bırakabileceğini veya yeniden kullanabileceğini anlamasını sağlar. Sıfır kopyalama işleminin başarısız olması durumunda da (örneğin donanım desteği eksikliği nedeniyle) bu bildirimde bilgi verilir.

İçgörü

Bu özellik, ağ uygulamalarının veri aktarım performansını artırarak sistem kaynaklarını daha verimli kullanmasını sağlar.

Kaynak