簡談對CPU的親和度(cpu affinity)

2021-08-07 10:03:28 字數 857 閱讀 6628

近的工作中對效能的要求比較高,就簡單的談下。

cpu的親和性, 就是程序要在指定的 cpu 上盡量長時間地執行而不被遷移到其他處理器,也稱為cpu關聯性;再簡單的點的描述就將制定的程序或執行緒繫結到相應的cpu上;在多核執行的機器上,每個cpu本身自己會有快取,快取著程序使用的資訊,而程序可能會被os排程到其他cpu上,如此,cpu cache命中率就低了,當繫結cpu後,程式就會一直在指定的cpu跑,不會由作業系統排程到其他cpu上,效能有一定的提高。

軟親和性(affinity):  就是程序要在指定的 cpu 上盡量長時間地執行而不被遷移到其他處理器,linux 核心程序排程器天生就具有被稱為 軟 cpu 親和性(affinity) 的特性,這意味著程序通常不會在處理器之間頻繁遷移。這種狀態正是我們希望的,因為程序遷移的頻率小就意味著產生的負載小。

硬親和性(affinity):簡單來說就是利用linux核心提供給使用者的api,強行將程序或者執行緒繫結到某乙個指定的cpu核執行。

解釋:在linux核心中,所有的程序都有乙個相關的資料結構,稱為 task_struct。這個結構非常重要,原因有很多;其中與 親和性(affinity)相關度最高的是 cpus_allowed 位掩碼。這個位掩碼由 n 位組成,與系統中的 n 個邏輯處理器一一對應。 具有 4 個物理 cpu 的系統可以有 4 位。如果這些 cpu 都啟用了超執行緒,那麼這個系統就有乙個 8 位的位掩碼。 如果為給定的程序設定了給定的位,那麼這個程序就可以在相關的 cpu 上執行。因此,如果乙個程序可以在任何 cpu 上執行,並且能夠根據需要在處理器之間進行遷移,那麼位掩碼就全是 1。實際上,這就是 linux 中程序的預設狀態;(這部分內容在這個部落格中有提到一點:

cpus_allowed用於控制程序可以在**處理器上執行

CPU的親和度

cpu的親和性,程序要在某個給定的 cpu 上盡量長時間地執行而不被遷移到其他處理器的傾向性,程序遷移的頻率小就意味著產生的負載小。在多核執行的機器上,每個cpu本身自己會有快取,在快取中存著程序使用的資料,而沒有繫結cpu的話,程序可能會被作業系統排程到其他cpu上,如此cpu cache 高速緩...

簡談自己對redux的理解

redux描述 通過 react redux 中的 provider 將store總分支注入根元件,其原理就是所謂的context原始碼如下 export function createprovider storekey store subkey constructor props,context ...

簡談對虛擬Dom的理解

簡單說一下我自己對虛擬dom的理解。由於 jquery es6模板字串 渲染dom 真實的渲染 效能巨差 所以 為了提高效能虛擬dom就是把真實的dom轉成js 物件樹 虛擬dom建立以後 也就是componentwillmounted完成的時候 就建立了這個源樹 根據元件內部的state 父元件的...