
低延遲系統(tǒng)設計與深度優(yōu)化培訓
第一部分:低延遲系統(tǒng)基礎
要點:時間測量,感受納秒,CPU的旅行,常見操作的時間,低延遲系統(tǒng)的典型場景,高頻交易系統(tǒng)的特點、核心模塊和架構(gòu),網(wǎng)絡數(shù)據(jù)包,傳統(tǒng)網(wǎng)絡棧,影響延遲的因素,中斷,缺頁異常,系統(tǒng)調(diào)用,搶先式調(diào)度,NUMA,TLB,cache,精確測量時間的方法,RDTSC
第二部分:案例研究之DPDK概覽
要點:源于INTEL,INTEL軟件團隊簡介,DPDK簡要歷史,版本,協(xié)議,DPDK的架構(gòu),設計思想,核心組件,驅(qū)動層,KNI模塊,用戶空間的庫,包處理過程,安裝,試驗環(huán)境簡介,研究和學習方法
第三部分:低延遲設計之內(nèi)核穿透
要點:兩大空間,深挖系統(tǒng)調(diào)用,寄存器切換,棧切換,緩存溫度,內(nèi)核頁表隔離,Meltdown漏洞,案例分析之DPDK,解讀KNI驅(qū)動,案例分析之Solarflare,與傳統(tǒng)網(wǎng)絡訪問的比較
第四部分:低延遲設計之回避中斷
要點:中斷處理過程,中斷處理例程,硬件中斷,時鐘中斷,中斷親緣性,在Linux系統(tǒng)中設置中斷親緣性,任務調(diào)度,Tickless kernel,軟件中斷,Linux系統(tǒng)的軟件中斷,多CPU系統(tǒng)的中斷處理,矛盾重重的TLB-Shutdown中斷,Linux下的中斷處理,RES中斷,函數(shù)調(diào)用中斷,使用Kernelshark觀察線程的執(zhí)行軌跡和被中斷打斷的場景,案例解析
第五部分:內(nèi)存訪問
要點:內(nèi)存層次體系,cache,cache結(jié)構(gòu),cache hit和cache miss,提高cache hit的關鍵思想,局部性,空間局部性和時間局部性,如何編寫cache友好的代碼,常用技巧,循環(huán)交換,C++的虛方法,頁表結(jié)構(gòu),頁表項,頁錯誤,Major Fault和Minor Fault,頁錯誤導致的延遲,大內(nèi)存頁原理,Linux系統(tǒng)的大內(nèi)存頁支持,分配大內(nèi)存頁,評估大頁的性能,案例分析之DPDK,配置大內(nèi)存頁
第六部分:低延遲設計之NUMA基礎
要點: UMA和NUMA,硬件結(jié)構(gòu),Linux系統(tǒng)的NUMA支持,內(nèi)存布局,NUMA的軟件庫和API,numastat,跨節(jié)點訪問,節(jié)點距離,經(jīng)驗數(shù)據(jù),實例分析
第七部分:低延遲設計之內(nèi)存池
要點:內(nèi)核池和用戶態(tài)堆,堆簡介,分配和釋放內(nèi)存的過程和開銷,內(nèi)存池設計的方法,可利用的資源
第八部分:低延遲設計之共享內(nèi)存和相互通信
要點:進程間通信,線程間通信,共享內(nèi)存原理,使用共享內(nèi)存通信,polling機制,同步,自旋鎖,隊列,無鎖設計,使用CPU的互鎖指令,案例分析
第九部分:低延遲設計之綁定CPU(Pinning)
要點: 對稱多處理(SMP),設置親緣性,taskset API和工具,在C/C++程序中設置線程親緣性,如何選擇CPU,定義綁定策略,在VTune中觀察實際執(zhí)行線程的CPU,案例分析
第十部分:案例研究之DPDK包處理框架(1.5小時)
要點:兩種模式,Run-to-completion,流水線, 配置流水線,流水線實例解析,包轉(zhuǎn)發(fā),負載均衡,流水線結(jié)構(gòu)的可視化,DPDK的測試程序,解析DPDK的包處理過程,異?;A,處理異常的佳實踐