Soru “Sıfır kopyalama ağı” vs “çekirdek bypass”?


Sıfır-kopya ağ iletişimi ve "kernel baypas" arasındaki fark nedir? Aynı şey anlamına gelen iki cümle mi yoksa farklı mı? Çekirdek "sıfır kopyalama ağı" içinde kullanılan bir tekniktir ve bu ilişki midir?


32
2017-08-20 19:21


Menşei


@alk Google "ay peynirden yapılır" ve ayın peynirden nasıl yapıldığını anlatan sayfalar bulacaksınız .... Benim amacım? Orada çok fazla doğru değil - SO hakkında daha fazla genel konsensusa güveniyorum. - user997112
Googling Sanatı doğru soruyu ortaya koymaktır. Ve Araştırma / Araştırma Sanatı sadece bir kaynak güvenmiyor bilginin. - alk
Sıfır-kopya konusu içerisinde, nerede yer aldığını tanımlamamız gerektiğini düşünüyorum. Sanırım, uygulamadan (kullanıcı alanı) donanıma (iki yönlü) sıfır kopyasını soruyorsunuz ve sadece çekirdek ağ yığınının katmanları arasında değil. - Joel Cunningham


Cevaplar:


Sıfır-kopya ağ iletişimi ve "kernel baypas" arasındaki fark nedir? Aynı şey anlamına gelen iki cümle mi yoksa farklı mı? Çekirdek "sıfır kopyalama ağı" içinde kullanılan bir tekniktir ve bu ilişki midir?

TL; DR - Bunlar farklı kavramlardır, ancak sıfır kopyasının çekirdek bypass API / framework içinde desteklenmesi oldukça olasıdır.


Kullanıcı Baypas

Bu iletişim şekli de dikkate alınmalıdır. Belki için mümkün DMA-to-DMA CPU içermeyen işlemler. Fikir kullanmak splice() veya kaçınmak için benzer işlevler Kullanıcı alanı hiç Not, ile splice()tüm veri akışının kullanıcı alanını atlamasına gerek yoktur. Üstbilgiler kullanıcı alanında okunabilir ve veriler doğrudan diske aktarılır. Bunun en yaygın düşüşü splice() sağlama toplamı yok.

Sıfır kopya

sıfır kopya Kavram sadece ağ arabelleklerinin yerinde sabitlenip hareket ettirilmemesidir. Birçok durumda, bu gerçekten faydalı değildir. En modern ağ donanımı destekler dağılım toplamak, olarak da bilinir arabellek tanımlayıcılarıvb. fikir ağ donanımı fiziksel işaretçileri anlar. Tampon tanımlayıcısı,

  1. Veri işaretçisi
  2. uzunluk
  3. Sonraki arabellek tanımlayıcısı

Yarar, ağ başlıklarının mevcut olması gerekmez yan yana ve IP, TCP, ve Uygulama üstbilgiler fiziksel olarak ayrı Uygulama Verileri.

Bir denetleyici bunu desteklemiyorsa, o zaman TCP / IP başlıklar Kullanıcı bilgisi böylece gönderilmeden önce doldurulabilir ağ denetleyicisi.

sıfır kopya ayrıca, bazı çekirdek kullanıcı MMU kurulumlarını ima eder, böylece sayfalar paylaşılır.

Çekirdek Baypas

Tabii ki, çekirdeği atlayabilirsiniz. Bu nedir pcap ve diğer sniffer yazılımı bir süredir yapıyor. Ancak, burada bir durumda görmek zor Kullanıcı alanı belirli donanıma bağlı olmadığı sürece kesin bir kazanca sahip olacak. Bazı ağ denetleyicileri olabilir dağılım toplamak kontrolörde desteklenir ve diğerleri olmayabilir.

Çekirdek by-pass gerçekleştirmek için çekirdek arayüzleri çeşitli enkarne vardır.


Bunu bir araya getirmek için ...

Aynı şey anlamına gelen iki cümle mi yoksa farklı mı?

Yukarıdaki gibi farklılar açıklıyor.

Çekirdek "sıfır kopyalama ağı" içinde kullanılan bir tekniktir ve bu ilişki midir?

Bu tam tersidir. Çekirdek baypas kullanabilir sıfır kopya ve tamponlar tamamen uygulamanın kontrolü altında olduğundan büyük olasılıkla destekleyecektir. Ayrıca, çekirdek ve kullanıcı alanı arasında bir bellek paylaşımı yoktur (MMU paylaşılan sayfalara ve neden olabilecek önbellek / TLB etkilerine gerek yoktur). Eğer kullanıyorsanız çekirdek baypasdesteklenmesi çoğu zaman avantajlı olacaktır sıfır kopya; Böylece ilk başta şeyler aynı görünebilir.

Dağılım-toplayan DMA mevcut ise (çoğu modern kontrolör) ya kullanıcı alanı ya da çekirdeği kullanabilir. sıfır kopya Bu durumda yararlı değildir.

Referans:


29
2017-08-20 23:26



Bilmiyorum Linux DMA-DMA işlemleri için destek; ama bazı donanımların bunu desteklediğini biliyorum. Fikir bir Ethernet denetleyici ve bir disk denetleyicisi Verileri doğrudan birbirine aktarabilir. Bu, işlerin yapılmasından daha umut verici geliyor. Kullanıcı alanı. - artless noise
Ayrıca bkz. stackoverflow.com/q/15702601/632951 NIC baypas hakkında daha fazla bilgi için. - Pacerier
@Pacerier bağlantınız linux kernel baypas ve perfromans insanların düşündüklerinin farklı tezahürlerini açıklamak güzel çekirdek baypas olabilir. RDMA benim 'DMA-to-DMA * açıklama gibidir. Gömülü sistemler için, bir CPU olmadan veri aktarmak için sistem çevre birimlerinin çoğuna (NIC, disk, ekran, ses, vb.) Bağlanabilen özel bir 'DMA denetleyicisi' bulunabilir. - artless noise


Sıfır-kopya ağ

Verileri asla kullanıcı alanı ile çekirdek alanı arasında kopyaladığınızda (kopya alanı demek) sıfır kopya ağ yapıyorsunuz. Örnek olarak:

C dili recv(fd, buffer, BUFFER_SIZE, 0);

Varsayılan olarak veriler kopyalanır:

  1. Çekirdek, veri yığınından veri alır
  2. Çekirdek bu verileri buffer, bu kullanıcı alanındadır.

Sıfır-kopya yöntemiyle, veriler kopyalanmaz ve doğrudan kullanıcı ağına gelir.

Çekirdek Baypas

Çekirdek baypas, kendinizi, kullanıcı alanı, ağ yığını ve donanım malzemelerini yönetirken ortaya çıkar. Bu zor, ama çok fazla performans kazanacaksınız (tüm veriler kullanıcı alanında olduğundan sıfır kopya var). Bu bağlantı Daha fazla bilgi isterseniz ilginç olabilir.


18
2017-08-20 19:32



Sıfır-kopya ağının önce yapıldığını ve daha sonra "kernel bypass" ın sıfır-kopyalanmış verileri kullanıcı uzayında işlemek için bir sonraki aşama olduğunu mu söylüyorsun? - user997112
Aslında bir "çekirdek bypass" sıfır kopyaya sahip olmanın bir yoludur. - nouney
@nouney: ... eğer iyi yaparsan! ;-) - alk
Sormamın nedeni, sıfır kopyasını uygulamak için Linux çekirdeğinde bir yamanın yayınlandığını okuduğumdur. Yani bu, artık ağ için kernel bypass fırsatları olmadığı anlamına mı geliyor? Linux zaten varsayılan olarak yapıyor ... ?? - user997112
@ user997112 Yapmak zorunda değilsin ama yapabilirsin. Sıfır-kopyalamanın birden fazla yolu var. okumak bu uzun ama iyi bir kağıt linux ile sıfır kopyalama yönteminde. - nouney


SIFIR KOPYA:

Paketleri gönderirken ve alırken, tüm paket verileri kopyalanmalıdır Kullanıcı alanı arabellek Çekirdek-space iletmek için tamponlar ve tam tersi. bir Sıfır kopyalı sürücü, kullanıcı alanı ve sürücü paket arabelleği belleğini doğrudan paylaşarak bunu önler.

Sahip olmak yerine iletmek ve teslim almak daha sonra kopyalanması gereken çekirdek alanında arabelleklere işaret eder, kullanıcı uzayındaki bir bellek bölgesi tahsis edilir ve belirli bir fiziksel bellek bölgesine eşlenir, böylece çekirdek arabellekleri ve kullanıcı alanı arabellekleri arasında bellek paylaşılır. her tanımlayıcı arabelleği, yeni ayrılmış belleğe karşılık gelen yerine.


5
2017-08-06 14:11





Çekirdek baypas ve sıfır kopya diğer örnekleri DPDK ve RDMA vardır. Bir uygulama DPDK kullanıyorsa, çekirdek TCP / IP yığınını atlıyor. Uygulama, kullanıcı alanından çekirdek alanına kopya olmadığından, sıfır kare kopyasının yani kullanıcı alanı belleğinden doğrudan DMA ile bu çerçeveleri yakalayan Ethernet çerçeveleri ve NIC oluşturuyor. Uygulamalar RDMA ile benzer şeyler yapabilir. Uygulama, NIC'nin doğrudan erişip ilettiği sıra çiftlerine yazar. RDMA iblibverbs, iSER RDMA kullanıyorsa Kernel baypası değil, sıfır kopya olduğu zaman, çekirdek içinde de kullanılır.

http://dpdk.org/

https://www.openfabrics.org/index.php/openfabrics-software.html


3
2018-01-19 17:23