国产精品久久香蕉免费播放,久久18禁高潮出水呻吟娇喘,亚洲AV无码成人精品区狼人影院,456亚洲影院,日本伊人精品一区二区三区

美國服務(wù)器Linux系統多核并行編程技術(shù)介紹

美國服務(wù)器Linux系統多核并行編程技術(shù)介紹

美國服務(wù)器目前主流的Linux系統主機都是馮諾依曼架構,即共享內存的計算模型,這種過(guò)程計算模型對并行計算并不友好。這種美國服務(wù)器架構中,有如下設計特點(diǎn):

1)多個(gè)美國服務(wù)器CPU核改善處理器的計算處理能力

2)多級cache改善美國服務(wù)器CPU訪(fǎng)問(wèn)主存的效率

3)各個(gè)CPU都有本地內存(NUMA(非一致性?xún)却嬖L(fǎng)問(wèn))),進(jìn)一步改善CPU訪(fǎng)問(wèn)主存的效率

4)store buffer模塊改善cache write由于應答延遲而造成的寫(xiě)停頓問(wèn)題

5)invalidate queue模塊改善使無(wú)效應答的時(shí)延,把使無(wú)效命令放入queue后就立即發(fā)送應答

6)外設DMA支持直接訪(fǎng)問(wèn)主存,改善美國服務(wù)器CPU使用效率

這些硬件體系設計特點(diǎn)也引入很多問(wèn)題,最大的問(wèn)題就是cache一致性問(wèn)題和亂序執行問(wèn)題。cache一致性問(wèn)題由cache一致性協(xié)議MESI解決,MESI由硬件保證,對軟件來(lái)說(shuō)是透明的。

MESI協(xié)議保證所有CPU對單個(gè)cache line中單個(gè)變量修改的順序保持一致,但不保證不同變量的修改在所有CPU上看到的是相同順序。這就造成了亂序。不僅如此,亂序的原因還有很多:

1)store buffer引起的延遲處理,會(huì )造成亂序

2)invalidate queue引起的延遲處理,會(huì )造成亂序

3)編譯優(yōu)化,會(huì )造成亂序

4)分支預測、多流水線(xiàn)等CPU硬件優(yōu)化技術(shù),會(huì )造成亂序

5)外設DMA,會(huì )造成數據亂序

這種情況造成,就連簡(jiǎn)單的++運算操作的原子性都無(wú)法保證,而這些問(wèn)題必須采用多核并行編程新的技術(shù)手段來(lái)解決。

多核并行編程關(guān)鍵技術(shù)

1、鎖技術(shù)

美國服務(wù)器Linux kernel提供了多種鎖機制,如自旋鎖、信號量、互斥量、讀寫(xiě)鎖、順序鎖等。各種鎖的簡(jiǎn)單比較如下:

1)自旋鎖,不休眠,無(wú)進(jìn)程上下文切換開(kāi)銷(xiāo),可以用在中斷上下文和臨界區小的場(chǎng)合

2)信號量,會(huì )休眠,支持同時(shí)多個(gè)并發(fā)體進(jìn)入臨界區,可以用在可能休眠或者長(cháng)的臨界區的場(chǎng)合

3)互斥量,類(lèi)似與信號量,但只支持同時(shí)只有一個(gè)并發(fā)體進(jìn)入臨界區

4)讀寫(xiě)鎖,支持讀并發(fā),寫(xiě)寫(xiě)/讀寫(xiě)間互斥,讀會(huì )延遲寫(xiě),對讀友好,適用讀側重場(chǎng)合

5)順序鎖,支持讀并發(fā),寫(xiě)寫(xiě)/讀寫(xiě)間互斥,寫(xiě)會(huì )延遲讀,對寫(xiě)友好,適用寫(xiě)側重場(chǎng)合

鎖技術(shù)雖然能有效地提供并行執行下的競態(tài)保護,但鎖的并行可擴展性很差,無(wú)法充分發(fā)揮多核的性能優(yōu)勢。鎖的粒度太粗會(huì )限制擴展性,粒度太細會(huì )導致巨大的系統開(kāi)銷(xiāo),而且設計難度大,容易造成死鎖。以下技術(shù)手段或指導原則能解決或減輕這些問(wèn)題的風(fēng)險:

1)按統一的層次順序使用鎖,解決死鎖問(wèn)題

2)指數后退,解決活鎖/饑餓問(wèn)題

3)范圍鎖,解決鎖驚群?jiǎn)?wèn)題

4)優(yōu)先級繼承,解決優(yōu)先級反轉問(wèn)題

2、原子技術(shù)

原子技術(shù)主要是解決cache不一致性和亂序執行對原子訪(fǎng)問(wèn)的破壞問(wèn)題。主要的原子原語(yǔ)有:

1)ACCESS_ONECE():只限制編譯器對內存訪(fǎng)問(wèn)的優(yōu)化

2)barrier():只限制編譯器的亂序優(yōu)化

3)smb_wmb():寫(xiě)內存屏障,刷新store buffer,同時(shí)限制編譯器和美國服務(wù)器CPU的亂序優(yōu)化

4)smb_rmb():讀內存屏障,刷新invalidate queue,同時(shí)限制編譯器和美國服務(wù)器CPU的亂序優(yōu)化

5)smb_mb():讀寫(xiě)內存屏障,同時(shí)刷新store buffer和invalidate queue,同時(shí)限制編譯器和CPU的亂序優(yōu)化

6)atomic_inc()/atomic_read():美國服務(wù)器整型原子操作

3、無(wú)鎖技術(shù)

原子技術(shù)是無(wú)鎖技術(shù)中的一種,除此之外,無(wú)鎖技術(shù)還包括RCU、Hazard pointer等,這些無(wú)鎖技術(shù)都基于內存屏障實(shí)現的:

1)Hazard pointer主要用于對象的生命周期管理,類(lèi)似引用計數,但比引用計數有更好的并行可擴展性。

2)RCU適用的場(chǎng)景很多,其可以替代:讀寫(xiě)鎖、引用計數、垃圾回收器、等待事物結束等,而且有更好的并行擴展性。但RCU也有一些不適用的場(chǎng)景,如寫(xiě)側重、臨界區長(cháng)、臨界區內休眠等場(chǎng)景。

不過(guò),所有的無(wú)鎖原語(yǔ)也只能解決讀端的并行可擴展性問(wèn)題,寫(xiě)端的并行可擴展性只能通過(guò)數據分割技術(shù)來(lái)解決。

4、數據分割技術(shù)

分割數據結構,減少共享數據,是解決并行可擴展性的根本辦法。對分割友好(即并行友好)的數據結構有:

1)數組

2)哈希表

3)基樹(shù)/稀疏數組

4)跳躍列表

使用這些便于分割的數據結構,有利于通過(guò)數據分割來(lái)改善并行可擴展性。除了使用合適的數據結構外,合理的分割指導規則也很重要:

1)讀寫(xiě)分割:把以讀為主的數據與以寫(xiě)為主的數據分開(kāi)

2)路徑分割:按獨立的代碼執行路徑來(lái)分割數據

3)專(zhuān)項分割:把經(jīng)常更新的數據綁定到指定的CPU/線(xiàn)程中

4)所有權分割:按美國服務(wù)器CPU/線(xiàn)程個(gè)數對數據結構進(jìn)行分割,把數據分割到per-cpu/per-thread中

以上這些美國服務(wù)器Linux系統多核并行編程內容,基本上涵蓋了Linux kernel中所有的并發(fā)編程關(guān)鍵技術(shù)。當然并行編程還有很多其他技術(shù)沒(méi)有應用到Linux kernel中的,如無(wú)副作用的并行函數式編程技術(shù)、消息傳遞、MapReduce等等。

關(guān)注美聯(lián)科技,了解更多IDC資訊!

 

客戶(hù)經(jīng)理