如何將Linux打造成OpenFlow Switch:Lagopus
上次介紹的部份是利用 openvswitch 來打造 OpenFlow switch,這也是大部份目前市面上買的到的 OpenFlow switch 所使用的軟體。問題是,它的傳輸效率不太好,畢竟它是透過 Linux kernel 來處理 Flow Entry。有人可能會說:「不會啊,我買的 switch 傳輸速度沒有問題啊,幾乎都可以達到 line rate」,OK,這是因為這些市面上賣的 switch 大部份都移植 Flow Entry 到處理程序到硬體平台上(像是 Broadcom 的晶片),所以傳輸速度當然不差, 可是!很多 OpenFlow 的功能就不支援了 ,畢竟那些晶片本來就沒有提供這些功能啊(通常是Set Field)。我們可以將目前 OpenFlow switch 的狀況大概整理如下: Software-based OpenFlow switch 功能支援度高,容易升級,但傳輸速度慢 Hardware-based OpenFlow switch 傳輸速度快,但功能並不完善 有沒有能夠兼顧兩者的設備呢?今天要介紹的這套 Lagopus 就是一個可能的選項。 Lagopus 是 NTT 所開發的 Software OpenFlow switch。Software?那傳輸速率呢?為了解決這個問題,Lagopus 採用了 Intel 所推出的 Data Plane Development Kit (DPDK) 技術。下面我們就先來介紹什麼是 DPDK。 DPDK簡介 DPDK 這個技術的概念可以用下圖來表達: DPDK(資料來源:Intel) 這張圖說明了 Intel 的 DPDK 技術是如何加速封包的處理。大概解釋一下。傳統 Linux 封包處理流程,是硬體收到封包後觸發 interrupt 後導到 Linux Kernel,如果還要進入 user space,就要通過 copy_to_user/copy_from_user 這樣的機制,而這會牽扯到記憶體拷貝的問題,這是因為不能讓 user space 直接讀到 kernel space 的記憶體管理,免得造成系統錯誤,所以作業系統會用一塊虛擬化的記憶體位置來給 user space 的 process,而這種記憶體保護機制以及拷貝很吃系統資源,這也是為什麼傳統上在處...