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