[nff-go] github的readme翻譯

以下是我自己翻譯的nff-go的github:https://github.com/intel-go/nff-go的readme文件,自己mark用,翻譯錯的還請指出。

Go語言的網絡功能框架(前YANFF)

好消息:我們現在支持AF_XDP,也(幾乎)支持直接從Linux中獲取包了。所以你不必再寫3種不同的應用來處理來自不同類型PMD驅動的數據包了。你只需要用NFF-Go編寫所有內容,它就可以動態的使用你想要的任何東西。如果有需要,請聯繫 我們

它是什麼

NFF-Go是一組用於創建和部署本地雲網絡功能(NFs)的庫。它在不犧牲性能的情況下簡化了網絡功能的創建。

  • 比DPDK更高級的抽象。使用DPDK作爲性能的快速I/O引擎
  • Go語言:安全,生產力,性能,併發
  • 網絡功能是應用程序而不是虛擬機
  • 內置調度程序,基於輸入流量進行自動縮放處理。上下都有。

優勢:

  • 輕鬆利用英特爾硬件功能:多核、AES-NI、CAT、QAT、DPDK
  • 代碼行減少10倍
  • 不需要成爲網絡編程專家也能開發高性能網絡函數
  • 與C/DPDK有相似的性能
  • 無須擔心彈性----自動完成
  • 利用本地雲部署:持續交付、微服務、容器

感覺不同

基於ACL的簡單防火牆

func main() {
	// Initialize NFF-GO library to use 8 cores max.
	config := flow.Config{
		CPUCoresNumber: 8,
	}
	flow.CheckFatal(flow.SystemInit(&config))

	// Get filtering rules from access control file.
	L3Rules, err := packet.GetL3ACLFromORIG("Firewall.conf")
	flow.CheckFatal(err)

	// Receive packets from zero port. Receive queue will be added automatically.
	inputFlow, err := flow.SetReceiver(uint8(0))
	flow.CheckFatal(err)

	// Separate packet flow based on ACL.
	rejectFlow, err := flow.SetSeparator(inputFlow, L3Separator, nil)
	flow.CheckFatal(err)

	// Drop rejected packets.
	flow.CheckFatal(flow.SetStopper(rejectFlow))

	// Send accepted packets to first port. Send queue will be added automatically.
	flow.CheckFatal(flow.SetSender(inputFlow, uint8(1)))

	// Begin to process packets.
	flow.CheckFatal(flow.SystemStart())
}

// User defined function for separating packets
func L3Separator(currentPacket *packet.Packet, context flow.UserContext) bool {
	currentPacket.ParseL4()
	// Return whether packet is accepted or not. Based on ACL rules.
	return currentPacket.L3ACLPermit(L3Rules)
}

NFF-Go是一個開源的BSD許可項目,主要在Linux用戶區運行。社區提供的最新補丁和增強功能在develop分支中提供。主分支提供了適當的tag下的最新的穩定發佈版本。

獲取NFF-GO

從版本0.7.0開始,NFF-Go使用go.mod獲取依賴,因此Go的版本需要1.11或更高。使用以下命令獲取NFF-Go分支:

    git clone --recurse-submodules http://github.com/intel-go/nff-go

設置構建和運行環境

DPDK

NFF-GO 使用 DPDK,所以你必須設置你的系統來構建和運行DPDK。查看 System Requirements in the DPDK Getting Started Guide for Linux以獲取更多信息。

NFF-Go默認用現成的的Mellanox卡支持構建的,你需要安裝MLX網絡驅動所需的額外依賴。在Ubuntu上它們叫做libmnl-devlibibverbs-dev。更多詳細信息,請參閱MLX驅動MLX4MLX5各自的頁面。如果這些依賴不夠,並且也不需要Mellanox驅動,你可以設置變量NFF_GO_NO_MLX_DRIVERS爲一些非空值來禁用MLX驅動程序編譯。

pktgen也需要額外的依賴,特別是當你運行在ReadHat或者CentOS Linux發行版上時。詳細信息請查看這個文件。RedHat和CentOS的LUA部分在它的結尾。

在使用make命令構建DPDK驅動後,你必須註冊網卡才能使用DPDK驅動,加載必要的內核模塊,並將卡綁定到模塊上。查看中的 Compiling the DPDK Target from SourceHow to get
best performance with NICs on Intel
platforms
以獲取更多信息。內核模塊是DPDK用戶模式驅動程序所必需的,它是內置的,但沒有安裝到內核目錄中。您可以使用模塊文件的完整路徑加載它:

nff-go/test/dpdk/dpdk/x86_64-native-linuxapp-gcc/kmod/igb_uio.ko

Go

使用Go語言的1.11.4或者更高版本。使用以下命令查看Go的版本:

    go version

構建 NFF-GO

當Go編譯器第一次運行的時候,它會下載go.mod文件中列出的全部依賴包。這個操作不能並行執行,否則Go的包緩存會損壞。因此在第一次運行make之前首先要運行go mod download。另一個選擇是在第一次運行的時候使用單進程make -j1,但可能會很慢。

    cd nff-go
    go mod download        # do it once before first build
    make -j8

在Debug模式下構建 NFF-GO

	make debug -j8

運行 NFF-GO

文檔

在線API文檔在 godoc.org site中查看. API的用法在我們的 維基頁面上解釋了.

測試

在頂層目錄中調用make構建測試框架和示例。NFF-GO分佈式測試打包在Docker容器映像中。在一些包裏也有單節點的單元測試,你可以使用如下命令運行:

     make testing

Docker 鏡像

要在本地默認目標上創建docker映像(在/var/run/docker.sock中的默認UNIX socket或其他的已經在DOCKER_HOST變量中定義了),使用make images命令。

要在分佈式測試中部署並使用Docker鏡像,使用make deploy命令。這個命令需要2個環境變量:

  • NFF_GO_HOSTS=“hostname1 hostname2 … hostnameN”* - 部署測試Docker鏡像所需的全部主機名的列表
  • DOCKER_PORT=2375* - 連接在NFF_GO_HOSTS變量中聲明的主機上運行的Docker daemon的端口號

要刪除默認Docker目標中生成的圖像,使用make clean-images命令。

運行測試

在Docker鏡像上部署完全部測試主機後,你可以運行分佈式網絡測試了。這個測試框架在test/main目錄下,可以接受一個帶有測試規範的JSON文件。在同一目錄中有性能和穩定性測試的預定義配置。要運行這些測試,把hostname1hostname2改成JSON文件裏的NFF_GO_HOSTS列表裏的主機。

清理

要清理全部已生成的二進制文件,使用make clean命令。要刪除全部在NFF_GO_HOSTS裏列出的已部署的鏡像,使用make cleanall命令。

Contributing

If you want to contribute to NFF-Go, check our Contributing guide. We also recommend checking the bugs with ‘help-wanted’ or ‘easyfix’ in our list of open issues; these bugs can be solved without an extensive knowledge of NFF-Go. We would love to help you start contributing.

You can reach the NFF-Go development team via our mailing list.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章