1. Install Ubuntu and DPDK for new server.
TBD:
a. BIOS Setting
1. Check HPET(High Precision Event Timer) timer is enable.
但若需要啟用可能要在 /home/linux/dpdk/dpdk-stable-16.11.1/config下新增一行 CONFIG_RTE_LIBEAL_USE_HPET=y 後再重新編譯.
以及在Linux kernel裡面enable. requires that the HPET_MMAP kernel configuration option be enabled.
2. Disable power management and Power Saving Functionality.
b. boot setting
Fixed two bug here.
1. default_hugepagesz=1G hugepagesz=1G hugepages=16 into /etc/default/grub
2. 解決Hugepage沒有被釋放的問題
c. OVS installation
TBD next week + OVS&DPDK 架構 + OF-DPA
d. Try a DPDK sample
Tried
1. Hello world
2. Basic L2 forward
2. 研究NIC+Linux Kernel如何處理封包+DPDK帶來的好處
TBD:
實現的主要模組
3. Still reading SDN and DDoS Attacks in Cloud Computing Environments: A Survey, Some Research Issues, and Challenges (25 paper citations) (30%)
沒看完, 方向不同, 暫且擱置.
4. 完成ASIC HW3
為什麼要用DPDK(Data Plane Development Kit)?
ASIC / FPGA / NPU / Multi-core >> 各有優缺點 新協定支援v.s.封包處理速度 v.s. 開發速度
證明IA(Intel Architecture)架構也可以用來做High performance Packet Processing.
IA下的軟體優化(計算機結構).
For NFV. For carrier core network. For example 5G.
3G=Circuit switching + Packet switching
4G=Packet switching + Proprietary HW
5G=Packet switching + x86 server + SDN + NFV (AT&T White Box Trial, SnapRoute(NOS)+Barefoot+Broadcom+Delta+Edgecore)
有什麼優缺點?
Packet Size 64 bytes
10GbE >> 14.8M packet / sec >> means 67.2 ns >> 134 clock cycles in Xeon 2.0 GHz
40GbE >> 59.5M packet / sec >> means 16.8 ns >> 33 clock cycles in Xeon 2.0 GHz
CPU 多核>高頻 頻率越高越耗電(跟主頻率三次方成正比) & 設計更複雜
Lockless
<< 多核心CPU在讀/寫共用資源的時候需要確保不會衝突, 所以有寫入鎖跟讀取鎖, 但可以共同讀取(以核心數為限). DPDK這邊用無鎖機制來減輕負擔, 提高性能
<< Lockless ring buffer
Polling
<< avoid context switching(要交換CPU上的進程時,必需先行儲存目前process的執行狀態,再將欲執行的process之狀態讀回CPU中。) << Interrupt 太多CPU來不及處理
收發封包完全不用Interrupt, 集中所有CPU資源做Packet Processing. (除了當Link layer狀態發生改變)
Control Unit 從記憶體抓指令搬到暫存器, 辨識指令, ALU執行指令後儲存在記憶體或暫存器
OS為執行Process management,所以將process所有相關的資訊集中,建立一個集合(table)表示,稱為PCB
HugePage(超大分頁)
>> 減少TLB Cache missed, TLB Miss會嚴重影響性能. TLB用CAM做. Cache用SRAM.
TLB(Translation Lookaside Buffer)(索引快取) = 虛擬位址到實體位址做加速用的. 存分頁表摘要 Page Table Entry(Page frame number + Page offset) >> Page Table
CPU 產生的虛擬記憶體通常是一整個連續的區塊.
虛擬地址 : 程式編寫更容易, 記憶體管理更有效率
分頁原本 4 KB >> 2 MB or 1 GB
Linux下默認分頁大小為4K,當使用者程式佔用4M的記憶體時,就需要1K的分頁表項目,如果使用2M的頁面,那麼只需要2條分頁表項目,這樣有兩個好處:第一是使用hugepage的記憶體所需的分頁表項目比較少,第二是TLB衝突概率降低,能容納不多的分頁表項目,採用hugepage可以大大降低TLB miss的機會。
典型的 TLB
容量:8~4K 分頁表條目
尋中時間:0.5 - 1 時脈週期
失誤代價:10 - 30 時脈週期
失誤率: 0.01% - 3%
Page not present = Page Fault >> 去disk 拿資料, 太久!
User Mode Driver
<< 封包收到User Space做管理, Kernel space跟User space不做記憶體拷貝, 只做控制權轉移. 不受kernel更新影響. 不會在user space下改到kernel space導致系統崩潰.
缺點, 不能用Kernel裡面的TCP/IP Stack
Pthread Affinity
<< 把某個特定任務指定在某特定CPU Core上工作. 任務執行 >> 負載均衡 >> 可能會換core工作 >> 綁定後提高CPU Cache命中率.