??????? 美國服務器目前主流的系統都是馮諾依曼架構的,即共享內存的計算模型,這種過程計算模型對美國服務器的并行計算并不友好,該架構中有如下設計特點:
??????? 1、多個CPU核心改善美國服務器處理器的計算處理能力;
??????? 2、多級cache改善美國服務器CPU訪問主存的效率;
??????? 3、各個CPU都有本地內存NUMA(非一致性內存訪問),進一步改善美國服務器CPU訪問主存的效率;
??????? 4、store buffer模塊改善cache write由于應答延遲而造成的美國服務器系統寫停頓問題;
??????? 5、invalidate queue模塊改善使美國服務器無效應答的時延,把使無效命令放入queue后就立即發送應答;
??????? 6、外設DMA支持直接訪問主存,改善美國服務器CPU使用效率。
??????? 這些美國服務器硬件體系設計特點也引入很多問題,最大的問題就是cache一致性問題和亂序執行的問題,cache一致性問題由cache一致性協議MESI解決,MESI由硬件保證,對軟件來說是透明的。
??????? MESI協議保證所有美國服務器CPU對單個cache line中單個變量修改的順序保持一致,但不保證不同變量的修改在所有CPU上看到的是相同順序,這就造成了亂序。不僅如此,亂序的原因還有以下方面:
store buffer引起的延遲處理,會造成亂序 invalidate queue引起的延遲處理,會造成亂序 編譯優化,會造成亂序 分支預測、多流水線等CPU硬件優化技術,會造成亂序 外設DMA,會造成數據亂序
??????? 這種情況造成就連簡單的++運算操作的原子性都無法保證,而這些問題必須采用美國服務器多核并行編程新的技術手段來解決。以下小編就來詳細介紹下美國服務器的多核并行編程技術。
??????? 多核并行編程的關鍵技術
??????? 1、鎖技術
??????? 美國服務器Linux kernel提供了多種鎖機制,如自旋鎖、信號量、互斥量、讀寫鎖、順序鎖等。各種鎖的簡單比較如下:
??????? 1)自旋鎖,不休眠,無進程上下文切換開銷,可以用在美國服務器中斷上下文和臨界區小的場合。
??????? 2)信號量,會休眠,支持美國服務器同時多個并發體進入臨界區,可以用在可能休眠或者長的臨界區的場合。
??????? 3)互斥量,類似與信號量,但只支持美國服務器同時只有一個并發體進入臨界區。
??????? 4)讀寫鎖,支持讀并發,寫寫/讀寫間互斥,讀會延遲寫,對讀友好,適用美國服務器讀側重場合。
??????? 5)順序鎖,支持讀并發,寫寫/讀寫間互斥,寫會延遲讀,對寫友好,適用美國服務器寫側重場合。
??????? 鎖技術雖然能有效地提供美國服務器并行執行下的競態保護,但鎖的并行可擴展性很差,無法充分發揮多核的性能優勢。鎖的粒度太粗會限制擴展性,粒度太細會導致巨大的系統開銷,而且設計難度大,容易造成死鎖,以下美國服務器技術手段或指導原則能解決或減輕這些問題的風險:
按統一的層次順序使用鎖,解決死鎖問題 指數后退,解決活鎖/饑餓問題 范圍鎖,解決鎖驚群問題 優先級繼承,解決優先級反轉問題
??????? 2、原子技術
??????? 原子技術主要是解決美國服務器不一致性和亂序執行對原子訪問的破壞問題,主要的原子原語有:
??????? 1)ACCESS_ONECE():只限制編譯器對美國服務器內存訪問的優化。
??????? 2)barrier():只限制編譯器的亂序優化。
??????? 3)smb_wmb():寫內存屏障,刷新store buffer,同時限制美國服務器編譯器和CPU的亂序優化。
??????? 4)smb_rmb():讀內存屏障,刷新invalidate queue,同時限制編譯器和美國服務器CPU的亂序優化。
??????? 5)smb_mb():讀寫內存屏障,同時刷新store buffer和invalidate queue,同時限制美國服務器編譯器和CPU的亂序優化。
??????? 6)atomic_inc()/atomic_read():美國服務器整型原子操作。
??????? 3、無鎖技術
??????? 原子技術是美國服務器無鎖技術中的一種,除此之外無鎖技術還包括RCU、Hazard pointer等,這些無鎖技術都基于內存屏障實現的:
??????? 1)Hazard pointer主要用于美國服務器對象的生命周期管理,類似引用計數,但比引用計數有更好的并行可擴展性。
??????? 2)RCU適用的場景很多,其可以替代:讀寫鎖、引用計數、垃圾回收器、等待事物結束等,而且有更好的并行擴展性。但美國服務器RCU也有一些不適用的場景,如寫側重、臨界區長、臨界區內休眠等場景。
??????? 不過所有的無鎖原語也只能解決讀端的并行可擴展性問題,寫端的并行可擴展性只能通過美國服務器數據分割技術來解決。
??????? 4、數據分割技術
??????? 分割數據結構可以減少共享數據,是解決美國服務器并行可擴展性的根本辦法。對分割友好,即并行友好的數據結構有:
數組 哈希表 基樹/稀疏數組 跳躍列表
??????? 使用這些便于分割的數據結構,有利于通過數據分割來改善美國服務器并行可擴展性。除了使用合適的數據結構外,合理的分割指導規則也很重要:
讀寫分割:把以讀為主的數據與以寫為主的數據分開 路徑分割:按獨立的代碼執行路徑來分割數據 專項分割:把經常更新的數據綁定到指定的CPU/線程中 所有權分割:按CPU/線程個數把數據分割到per-cpu/per-thread中
??????? 以上這些就是關于美國服務器多核并行編程的內容,基本上涵蓋了Linux kernel中所有的并發編程關鍵技術。當然美國服務器并行編程還有很多其他技術沒有應用到Linux kernel中的,如無副作用的并行函數式編程技術、消息傳遞、MapReduce等等。
??????? 現在夢飛科技合作的美國VM機房的美國服務器所有配置都免費贈送防御值 ,可以有效防護網站的安全,以下是部分配置介紹:
CPU | 內存 | 硬盤 | 帶寬 | IP | 價格 | 防御 |
E3-1230v3 | 16GB | 500GB?SSD | 1G無限流量 | 1個IP | 900/月 | 免費贈送1800Gbps?DDoS防御 |
E3-1270v2 | 32GB | 500GB?SSD | 1G無限流量 | 1個IP | 1250/月 | 免費贈送1800Gbps?DDoS防御 |
E3-1275v5 | 32GB | 500GB?SSD | 1G無限流量 | 1個IP | 1350/月 | 免費贈送1800Gbps?DDoS防御 |
Dual?E5-2630L | 32GB | 500GB?SSD | 1G無限流量 | 1個IP | 1450/月 | 免費贈送1800Gbps?DDoS防御 |
??????? 夢飛科技已與全球多個國家的頂級數據中心達成戰略合作關系,為互聯網外貿行業、金融行業、IOT行業、游戲行業、直播行業、電商行業等企業客戶等提供一站式安全解決方案。持續關注夢飛科技官網,獲取更多IDC資訊!
?