PF_RING ZC (Zero Copy)
PF_RING?ZC(零復制)是一種靈活的數據包處理框架,可讓您在任何數據包大小下實(shí)現1/10 Gbit的線(xiàn)速數據包處理(RX和TX)。它實(shí)現了零復制操作,包括用于進(jìn)程間和VM間(KVM)通信的模式。它可以被視為DNA / LibZero的后繼產(chǎn)品,該產(chǎn)品基于過(guò)去幾年的經(jīng)驗教訓提供了一個(gè)單獨且一致的API。
它具有干凈靈活的API,可實(shí)現可從線(xiàn)程、應用程序和虛擬機使用的簡(jiǎn)單構建基塊(隊列、工作器和池)。這樣可以實(shí)現10 Gbit線(xiàn)速數據包處理。
簡(jiǎn)單干凈的API
PF_RING?ZC帶有一個(gè)簡(jiǎn)單的API,能夠用幾行代碼創(chuàng )建一個(gè)復雜的應用程序。 以下示例顯示了如何用6行代碼創(chuàng )建一個(gè)聚合器+平衡器應用程序。
使用PF_RING感知驅動(dòng)程序的按需內核旁路
PF_RING?ZC附帶了新一代的PF_RING?感知驅動(dòng)程序,可以在內核或旁路模式下使用。安裝后,這些驅動(dòng)程序將作為標準Linux驅動(dòng)程序運行,您可以在其中進(jìn)行常規聯(lián)網(wǎng)(例如ping或SSH)。當從PF_RING?使用時(shí),它們比普通驅動(dòng)程序更快,因為它們直接與之交互。如果您使用支持PF_RING的驅動(dòng)程序以零拷貝方式打開(kāi)設備(例如pfcount -i zc:eth1),則該設備將無(wú)法通過(guò)標準網(wǎng)絡(luò )使用,因為通過(guò)內核旁路以零拷貝方式對其進(jìn)行了訪(fǎng)問(wèn),就像以前的DNA一樣。 一旦訪(fǎng)問(wèn)設備的應用程序關(guān)閉,標準的網(wǎng)絡(luò )活動(dòng)就可以再次發(fā)生。
零復制操作到虛擬機(KVM)
PF_RING?ZC允許您為KVM虛擬機以零拷貝轉發(fā)(RX和TX)數據包,而無(wú)需使用PCIe直通等技術(shù)。由于在VM上動(dòng)態(tài)創(chuàng )建了ZC設備,因此您可以從VM中以零拷貝捕獲/發(fā)送流量,而無(wú)需修補KVM代碼,也可以在創(chuàng )建ZC設備后啟動(dòng)KVM。從本質(zhì)上講,現在您可以使用在物理主機上使用的相同命令,對KVM進(jìn)行10 Gbit的線(xiàn)速傳輸,而無(wú)需更改任何代碼行。
上圖顯示ZC可用于創(chuàng )建跨虛擬機以零副本進(jìn)行通話(huà)的應用程序管道。從本質(zhì)上講,PF_RING?ZC從第一天起就可以使用云了。
零復制操作
與其前身LibZero相似,在PF_RING?ZC中,您可以在線(xiàn)程,應用程序以及現在的VM之間執行零復制操作。您可以平衡各個(gè)應用程序的零拷貝數據包
或實(shí)施數據包扇出。
在PF_RING?ZC中,所有內容均以線(xiàn)速以零復制進(jìn)行。
性能
與其前身LibZero / DNA相似,PF_RING?ZC允許您從物理主機或KVM獲得10 Gbit的線(xiàn)速,無(wú)論任何數據包大小。您可以使用我們?yōu)槟_(kāi)發(fā)的演示應用程序自己進(jìn)行測試。
將0復制與1復制設備集成
在PF_RING?ZC中,即使對非PF_RING敏感的驅動(dòng)程序,也可以使用零復制框架。這意味著(zhù)您可以將數據包分發(fā)、處理、發(fā)起并將其注入零復制框架,即使它們并非源自ZC設備也是如此。
一旦將數據包復制(副本)到ZC世界中,從那時(shí)起,該數據包將在其整個(gè)生命周期中始終以零副本處理。例如,zbalance_ipc演示應用程序可以從非PF_RING感知設備(例如WiFI設備或Broadcom NIC)以一復制模式讀取數據包,并將其發(fā)送到ZC內部以對其執行零復制操作。
內核旁路和IP堆棧數據包注入
與其他內核旁路的技術(shù)相反,使用PF_RING?ZC,您可以隨時(shí)決定要向標準Linux IP堆棧中注入哪些內核旁路的數據包。PF_RING帶有一個(gè)稱(chēng)為“stack” 的IP 堆棧數據包注入模塊,通過(guò)該模塊,您可以選擇將內核旁路接收的數據包注入到標準IP堆棧中。您需要做的就是打開(kāi)設備“ stack:ethX”,然后將數據包發(fā)送到IP堆棧,就像從ethX接收到的一樣。
Snort的DAQ
當使用Snort(最受歡迎的IDS / IPS之一)時(shí),Snort用戶(hù)還可以從PF_RING?ZC速度中受益。本地PF_RING?ZC DAQ(Snort Data AcQuisition)庫比標準PF_RING?DAQ快20%至50%,還可以在IPS和IDS模式下運行。
PF_RING?ZC DAQ是PF_RING?的一部分。