日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux內(nèi)核支持多核是如何實現(xiàn)的?(linux內(nèi)核多核)

隨著計算機硬件技術(shù)的不斷發(fā)展,多核處理器已經(jīng)成為了現(xiàn)代計算機的重要組成部分。而Linux作為更流行的開源操作系統(tǒng)之一,已經(jīng)提供了對多核處理器的完全支持。那么,Linux內(nèi)核支持多核是如何實現(xiàn)的呢?本文將探討Linux內(nèi)核支持多核的實現(xiàn)原理。

創(chuàng)新互聯(lián)公司主營應(yīng)城網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,應(yīng)城h5微信小程序搭建,應(yīng)城網(wǎng)站營銷推廣歡迎應(yīng)城等地區(qū)企業(yè)咨詢

了解多核處理器

在探討Linux內(nèi)核支持多核的實現(xiàn)原理之前,我們需要了解多核處理器的工作原理。多核處理器就是在一個物理處理器集成兩個或多個核心。每個核心都是一個完整的處理器,可以處理一個線程。因此,多核處理器可以同時處理多個線程,從而提高計算機的性能。

多核處理器的性能提高取決于多個因素,包括程序的并行性、內(nèi)存帶寬、線程間通信的效率等。有時候,由于多個線程競爭同一個資源,可能會出現(xiàn)性能瓶頸。因此,合理地使用多核處理器需要更高的系統(tǒng)優(yōu)化水平。

Linux內(nèi)核如何支持多核?

1. 處理器親和性

處理器親和性是一種機制,用于將進程綁定到特定的處理器核心上。在Linux內(nèi)核中,處理器親和性是通過 sched_setaffinity() 系統(tǒng)調(diào)用實現(xiàn)的。這個系統(tǒng)調(diào)用可以將進程綁定到一個或多個特定的處理器上。通過處理器親和性機制,可以使得進程優(yōu)先在綁定的處理器上運行,從而提高系統(tǒng)的性能。

2. 任務(wù)調(diào)度

Linux內(nèi)核對于多核處理器的支持,還涉及到任務(wù)調(diào)度機制。任務(wù)調(diào)度是指內(nèi)核決定哪個進程占用處理器的時間。在多核處理器中,任務(wù)調(diào)度需要考慮許多因素,例如處理器親和性、負載均衡等。內(nèi)核的調(diào)度器必須合理地分配處理器內(nèi)核,從而保證每個進程都可以獲得足夠的時間片,使系統(tǒng)保持高效運行。

3. 中斷處理

中斷處理是指當(dāng)系統(tǒng)硬件設(shè)備發(fā)生需要處理的事件時,中斷處理程序被調(diào)用處理這個事件。在多核處理器中,中斷處理需要考慮到每個核心的中斷處理程序的并發(fā)性。 Linux內(nèi)核通過使用自旋鎖和信號量等機制來處理并發(fā)中斷請求,保證每個內(nèi)核都可以按照正確的順序處理中斷請求,確保系統(tǒng)的穩(wěn)定運行。

4. 線程同步

在多核處理器中,線程同步是非常重要的因素,如果沒有得到正確的處理,可能會導(dǎo)致系統(tǒng)的不穩(wěn)定。線程同步是指當(dāng)多個線程訪問共享資源時,確保每個線程訪問時機的協(xié)調(diào)性。在Linux內(nèi)核中,線程同步是通過鎖機制來實現(xiàn)的。鎖機制確保每個線程能夠按照正確的先后順序訪問共享資源,從而防止出現(xiàn)訪問沖突,導(dǎo)致系統(tǒng)的不穩(wěn)定。

在多核處理器上,Linux內(nèi)核支持多核的實現(xiàn)是一個復(fù)雜而細致的工作。Linux內(nèi)核提供了處理器親和性、任務(wù)調(diào)度、中斷處理和線程同步等機制來優(yōu)化多核處理器的運行。這樣就可以充分利用多核處理器的優(yōu)勢,提高計算機的性能。了解Linux內(nèi)核支持多核的實現(xiàn)原理不僅可以讓我們更好地使用計算機,還可以在優(yōu)化系統(tǒng)性能方面著手進行更深層次的工作。

相關(guān)問題拓展閱讀:

  • 在Linux系統(tǒng)上,多個線程能否同時使用多個CPU核心?有人說能,有人說不能
  • arm linux 多核同時運行
  • 并行編程技術(shù)是誰的核心技術(shù)體系

在Linux系統(tǒng)上,多個線程能否同時使用多個CPU核心?有人說能,有人說不能

與超慎慎核線程CPU在邏輯上模擬雙核不同,多核CPU每個核心都可以獨立執(zhí)行一個線程,是真正意義的多個物理CPU。

第孝耐二個問題,如果你的程序的線程數(shù)少于CPU的核心數(shù),且系統(tǒng)此時沒有其他進程同時運行,那么這個程序的每個線程會享有一個CPU,當(dāng)同時運行的線程數(shù)多于CPU核心數(shù)時,CPU會采用一定的調(diào)度算法每隔一段時間就將這些線程調(diào)入或調(diào)出CPU,以寬掘確保每個線程都能分享一部分CPU時間,實現(xiàn)多線程并發(fā)。

arm linux 多核同時運行

多處理器可以被定義用來包含多個core的單個設(shè)備中含爛同時運行二洞迅個或多個指令。現(xiàn)在廣泛應(yīng)用于通用應(yīng)用處理器和嵌談顫漏入式系統(tǒng)中。

并行編程技術(shù)是誰的核心技術(shù)體系

并行編程技術(shù)是誰的核心技術(shù)體系

在摩爾定律失效之前,提升處理器性能通過主頻提升、硬件超線程等技術(shù)就能滿足應(yīng)用需要。隨著主頻提升慢慢接近撞上光速這道墻,摩爾定律開始逐漸失效,多核集成為處理器性能提升的主流手段?,F(xiàn)在市面上已經(jīng)很難看到單核的處理器,就是這一發(fā)展趨勢的佐證。要充分發(fā)揮多核豐富的計算資源優(yōu)勢,多核下的并行編程就不可避免,Linux kernel就是一典型的多核并行編程嘩襲纖場景。但多核下的并行編程卻挑戰(zhàn)多多。

多核并行編程的挑戰(zhàn)

目前主流的計算機都是馮諾依曼架構(gòu),即共享內(nèi)存的計算模型,這種過程計算模亂仿型對并行計算并不友好。下圖是一種典型的計算機硬件體系架構(gòu)。

這種架構(gòu)中,有如下設(shè)計特點:

多個CPU核改善處理器的計算處理能力;

多級cache改善CPU訪問主存的效率;

各個CPU都有本地內(nèi)存(NUMA(非一致性內(nèi)存訪問)),進一步改善CPU訪問主存的效率;

store buffer模塊改善cache write由于應(yīng)答延遲而造成的寫停頓問題;

invalidate queue模塊改善使無效應(yīng)答的時延,把使無效命令放入queue后就立即發(fā)送應(yīng)答;

外設(shè)DMA支持直接訪問主存,改善CPU使用效率;

這些硬件體系設(shè)計特點也引入很多問題,更大的問題就是cache一致性問題和亂序執(zhí)行問題。

cache一致性問題由cache一致性協(xié)議MESI解決,MESI由硬件保禪逗證,對軟件來說是透明的。MESI協(xié)議保證所有CPU對單個cache line中單個變量修改的順序保持一致,但不保證不同變量的修改在所有CPU上看到的是相同順序。這就造成了亂序。不僅如此,亂序的原因還有很多:

store buffer引起的延遲處理,會造成亂序;

invalidate queue引起的延遲處理,會造成亂序;

編譯優(yōu)化,會造成亂序;

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

外設(shè)DMA,會造成數(shù)據(jù)亂序;

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

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

鎖技術(shù)

Linux kernel提供了多種鎖機制,如自旋鎖、信號量、互斥量、讀寫鎖、順序鎖等。各種鎖的簡單比較如下,具體實現(xiàn)和使用細節(jié)這里就不展開了,可以參考《Linux內(nèi)核設(shè)計與實現(xiàn)》等書的相關(guān)章節(jié)。

自旋鎖,不休眠,無進程上下文切換開銷,可以用在中斷上下文和臨界區(qū)小的場合;

信號量,會休眠,支持同時多個并發(fā)體進入臨界區(qū),可以用在可能休眠或者長的臨界區(qū)的場合;

互斥量,類似與信號量,但只支持同時只有一個并發(fā)體進入臨界區(qū);

讀寫鎖,支持讀并發(fā),寫寫/讀寫間互斥,讀會延遲寫,對讀友好,適用讀側(cè)重場合;

順序鎖,支持讀并發(fā),寫寫/讀寫間互斥,寫會延遲讀,對寫友好,適用寫側(cè)重場合;

鎖技術(shù)雖然能有效地提供并行執(zhí)行下的競態(tài)保護,但鎖的并行可擴展性很差,無法充分發(fā)揮多核的性能優(yōu)勢。鎖的粒度太粗會限制擴展性,粒度太細會導(dǎo)致巨大的系統(tǒng)開銷,而且設(shè)計難度大,容易造成死鎖。除了并發(fā)可擴展性差和死鎖外,鎖還會引入很多其他問題,如鎖驚群、活鎖、饑餓、不公平鎖、優(yōu)先級反轉(zhuǎn)等。不過也有一些技術(shù)手段或指導(dǎo)原則能解決或減輕這些問題的風(fēng)險。

按統(tǒng)一的順序使用鎖(鎖的層次),解決死鎖問題;

指數(shù)后退,解決活鎖/饑餓問題;

范圍鎖(樹狀鎖),解決鎖驚群問題;

優(yōu)先級繼承,解決優(yōu)先級反轉(zhuǎn)問題 ;

原子技術(shù)

原子技術(shù)主要是解決cache和內(nèi)存不一致性和亂序執(zhí)行對原子訪問的破壞問題。Linux kernel中主要的原子原語有:

ACCESS_ONCE()、READ_ONCE() and WRITE_ONCE():禁止編譯器對數(shù)據(jù)訪問的優(yōu)化,強制從內(nèi)存而不是緩存中獲取數(shù)據(jù);

barrier():亂序訪問內(nèi)存屏障,限制編譯器的亂序優(yōu)化;

b_wmb():寫內(nèi)存屏障,刷新store buffer,同時限制編譯器和CPU的亂序優(yōu)化;

b_rmb():讀內(nèi)存屏障,刷新invalidate queue,同時限制編譯器和CPU的亂序優(yōu)化;

b_mb():讀寫內(nèi)存屏障,同時刷新store buffer和invalidate queue,同時限制編譯器和CPU的亂序優(yōu)化;

atomic_inc()/atomic_read()等:整型原子操作;

嚴格來說,Linux kernel作為系統(tǒng)軟件,實現(xiàn)受硬件影響很大,不同硬件有不同的內(nèi)存模型,因此,不同于高級語言,Linux kernel的原子原語語義并沒有一個統(tǒng)一模型。比如在P的ARM64 CPU上,barrier、b_wmb、b_rmb的實現(xiàn)與b_mb都是一樣的,都是volatile (“” ::: “memory”)。

另外,再多提一句的是,atomic_inc()原語為了保證原子性,需要對cache進行刷新,而緩存行在多核體系下傳播相當(dāng)耗時,其多核下的并行可擴展性差。

無鎖技術(shù)

上一小節(jié)中所提到的原子技術(shù),是無鎖技術(shù)中的一種,除此之外,無鎖技術(shù)還包括RCU、Hazard pointer等。值得一提的是,這些無鎖技術(shù)都基于內(nèi)存屏障實現(xiàn)的。

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

RCU適用的場景很多,其可以替代:讀寫鎖、引用計數(shù)、垃圾回收器、等待事物結(jié)束等,而且有更好的并行擴展性。但RCU也有一些不適用的場景,如寫側(cè)重;臨界區(qū)長;臨界區(qū)內(nèi)休眠等場景。

不過,所有的無鎖原語也只能解決讀端的并行可擴展性問題,寫端的并行可擴展性只能通過數(shù)據(jù)分割技術(shù)來解決。

數(shù)據(jù)分割技術(shù)

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

數(shù)組

哈希表

基樹(Radix Tree)/稀疏數(shù)組

跳躍列表(skip list)

使用這些便于分割的數(shù)據(jù)結(jié)構(gòu),有利于我們通過數(shù)據(jù)分割來改善并行可擴展性。

除了使用合適的數(shù)據(jù)結(jié)構(gòu)外,合理的分割指導(dǎo)規(guī)則也很重要:

讀寫分割:以讀為主的數(shù)據(jù)與以寫為主的數(shù)據(jù)分開;

路徑分割:按獨立的代碼執(zhí)行路徑來分割數(shù)據(jù);

專項分割:把經(jīng)常更新的數(shù)據(jù)綁定到指定的CPU/線程中;

所有權(quán)分割:按CPU/線程個數(shù)對數(shù)據(jù)結(jié)構(gòu)進行分割,把數(shù)據(jù)分割到per-cpu/per-thread中;

4種分割規(guī)則中,所有權(quán)分割是分割最徹底的。

以上這些多核并行編程內(nèi)容基本上涵蓋了Linux kernel中所有的并發(fā)編程關(guān)鍵技術(shù)。當(dāng)然并行編程還有很多其他技術(shù)沒有應(yīng)用到Linux kernel中的,如無副作用的并行函數(shù)式編程技術(shù)(Erlang/Go等)、消息傳遞、MapReduce等等。

關(guān)于linux 內(nèi)核 多核的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


標(biāo)題名稱:Linux內(nèi)核支持多核是如何實現(xiàn)的?(linux內(nèi)核多核)
網(wǎng)址分享:http://www.5511xx.com/article/cdocipo.html