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