1. Unable to mount NFS
Ans. Put NAS and client server on same switch, mount OK.
中間的switch或router安全性設定可能有問題???
從Lab355 server上要mount到Lab108 NAS一樣有問題, Error code一樣是connection timeout.
Client端
#mount -v -t nfs 140.135.12.20:/volume1/NFS /mnt#showmount -e 140.135.12.202. EE Main Server (140.135.12.104) Firewall setup
加Rule
# sudo iptables -A INPUT -i eth1 -s 140.135.12.0/23 -j ACCEPT (將規則新增到最下面)# sudo iptables -I Input -i lo -j ACCEPT (將規則新增到最上面)
刪Rule
#sudo iptables -D INPUT 2 (數字是在rule中出現的順序, 上到下由1起算)看Rule
# sudo iptables -L -n (看目前設定的rule)第一條: 設定Loopback為信認的介面
第三條: 這個想要進入的封包如果是為剛剛我發出去的回應就可進入
# sudo iptables-save (看詳細的Rule設定, 鳥哥推薦使用, 包含interface等更多資訊)存Rule
#sudo /etc/init.d/iptables save2. "P4GPU: Acceleration of Programmable Data Plane Using a CPU-GPU Heterogeneous Architecture"
貢獻:
1.第一個能把P4 同時map到CPU/GPU異質架構. 提供P4GPU Toolset能把P4程式碼轉譯成GPU Kernels
2.可以在data plane中讓CPU/GPU之間分散負載的架構
3.讓GPU kernel能針對P4中 "match+action"功能做優化
P4
OpenFlow Switch
介紹:
(什麼是Programmable dataplane ? 為什麼需要它 ?)
OpenFlow 1.0 ~ 1.4,希望data plane像control plane一樣可以programmable,P4
P4把language map到hardware,但是如果對應到的硬體資源不足就沒有辦法達到line rate.
把P4 map 到GPU的挑戰:
P4預設這有能處理match+action pipeline的客製Hardware,但是GPU沒有
Compiler自動產收的GPU Kernel不能精準地捕捉到網路功能的特徵,導致效能不佳,例如太高頻率的資料在host跟device間搬動
GPU Clock比較慢而且跟CPU相比記憶體資源也比較少
GPU跟CPU比起來是高度平行化運算的架構, 針對Table lookup跟Header Matching在處理package header parsing / state matching transitions會有相依性跟branching的問題.
為了解決上述問題提出CPU/GPU的異質架構可以讓我們加速programmable data plane
相關研究:
P4語言描述了data plane可以針對package做match+action的處理, 但是沒有說硬體應該要怎麼實現.
現在一些P4 Compiler可以把語言map到SW switch, NPG, FPGA.
Jose et al. >> P4 map to RMT跟Intel FlexPipe交換器架構:
研究怎麼把邏輯化的表格放進RMT模組中實體的晶片記憶體中. 需要把整個P4 Compiling到RMT或Intel FlexPipe上, 以利用交換器晶片中的pipeline結構.
GALE, GAMT, PackageShader >>
利用GPU中數百到數千個核心的平行運算能力, 運用batch processing, concurrent copy, 優化NIC driver, 使得以GPU Based的SW router可以達到40Gbps速度.
軟體設計:
Table matching跟packet classification是目前封包轉送的瓶頸.
Mapping P4 to GPU
Ex. IP lookup engine / package classification engine
IR: Intermediate representation >> 把整個P4 Compile成Python的OrderedDict結構
產生Kernel, 產生P4表格設定跟表格執行順序 >> Kernel 初始化
Latency Hiding
大多數的異質硬體設計時, CPU 跟 Coprocessor 間的資料複製是Overhead 的主要來源.
1. Batch processing:
設計一系列固定大小的Package FIFO buffer來存進來的封包. 只有在Buffer全滿或是達到我們設定的比例時才把整個batch封包送出
減少gpu/cpu間的data copied(overhead), 用package FIFO存package可全滿再發送或設定百分比.
2. 2D pipeline機制:
>>為了利用GPU SIMD架構 Quora_SIMD
CUDA GPU裡面資料傳送跟Kernel執行可以同時執行.
減少H2D/D2H的overhead, 做兩個batch buffer資料傳送跟kernel執行可以時間重疊.
CUDA (Compute Unified Device Architecture) (NVEDIA Proprietary)
簡單來說是一種用在GPU複雜平行運算時的指令集,類似中央處理器x86架構的指令集
Example of CUDA processing flow
1.複製記憶體至GPU
2. CPU指令驅動GPU
3. GPU每一核心並列處理
4. GPU將結果傳回主記憶體
在 CUDA 中,GPU 不能直接存取主記憶體,只能存取顯示卡上的顯示記憶體。
因此,會需要將資料從主記憶體先複製到顯示記憶體中,進行運算後,再將結果從顯示記憶體中複製到主記憶體中。
這些複製的動作會限於 PCI Express 的速度。使用 PCI Express x16 時,PCI Express 1.0 可以提供雙向各 4GB/s 的頻寬,
而 PCI Express 2.0 則可提供 8GB/s 的頻寬。當然這都是理論值。
3. 利用Nvidia內不同cache/memory特性來減少延遲
Local cache
Shared memory : 在每個CUDA block中提供 low latency access time,但空間有限。
L2 Cache:
Constant Memory:
Texture Memory:透過專屬的cache-based hardware來存取global memory, latency較短,使用頻率 讀 > 存
在這裡我們用來存 Prefix rules給lookup engine跟filter rules給classifier engine.
Global Memory : 最大的Latency但也是最大的儲存空間。
Kernel design
架構設計:
1. 進來的封包先存到主記憶體
2. CPU去Memory取得Package存在Cache?(Batch)
3. CPU的Load Balancer根據Package Arrival Rate決定GPU offload的百分比
4. CPU/GPU處理完後將封包送回主記憶體的佔存區等待下一部
5. 將封包轉送或丟棄 Next Hop / Drop
Load Balancer
Multi-threading