SylixOS設定CPU親和性

2021-07-30 07:19:31 字數 2572 閱讀 1436

cpu親和性(affinity)就是程序要在某個給定的cpu上盡量長時間地執行而不被遷移到其他處理器的傾向性。sylixos支援對稱多處理器(symmetric multi-processor),其執行緒是排程的最小單位,sylixos可以對應用層執行緒,核心執行緒以及中斷設定cpu親和性,即將不同執行緒繫結到不同cpu,充分發揮多核處理器並行處理的優勢。

sylixos中每個執行緒都有乙個對應的執行緒控制塊,執行緒控制塊中與cpu親和性最高的是cpu位掩碼,這個位掩碼由 n 位組成,與系統中的 n 個邏輯處理器一一對應。 具有 4 個物理 cpu 的系統可以有 4 位。如果這些 cpu 都啟用了超執行緒,那麼這個系統就有乙個 8 位的位掩碼。

如果為給定的程序設定了給定的位,那麼這個程序就可以在相關的 cpu 上執行。因此,如果乙個程序可以在任何 cpu 上執行,並且能夠根據需要在處理器之間進行遷移,那麼位掩碼就全是 1。這也是sylixos執行緒中cpu親和性的預設狀態。

sylixos相容posix標準,應用層執行緒和核心執行緒的cpu親和性設定可以使用posix介面。pthread_setaffinity_np函式的第三個引數即為cpu掩碼。如程式清單2‑1所示。

程式清單2‑1  執行緒與cpu繫結

int pthread_setaffinity_np (pthread_t  thread, size_t setsize, const cpu_set_t *set)

函式名稱: pthread_setaffinity_np

功能描述: 設定執行緒排程的 cpu 集合

輸 入 : pid 程序 / 執行緒 id

setsize cpu 集合大小

set cpu 集合

輸 出 : error or ok

sylixos中斷源的cpu親和性設定與執行緒的cpu親和性設定函式介面相似,如程式清單2‑2所示。

程式清單2‑2  中斷與cpu繫結

ulong api_intersettarget (ulong  ulvector, size_t  stsize, const plw_class_cpuset  pcpuset)

函式名稱: api_intersettarget

功能描述: 設定指定中斷向量目標 cpu

輸 入 : ulvector 中斷向量號

stsize cpu 掩碼集記憶體大小

pcpuset cpu 掩碼

輸 出 : error code

示例環境:zynq7000 雙核。

1.sylixos在/proc/kernel/affinity檔案中記錄了cpu親和性資訊,如圖3‑1所示,可以看到除空閒任務繫結到對應cpu上,別的任務cpu親和性標記為*表示任務可以在所有cpu上執行。

圖3‑1  執行測試程式前cpu親和性資訊

2.執行如程式清單3‑1所示測試程式,將主線程繫結到cpu1,子執行緒繫結到cpu0。

程式清單3‑1  cpu繫結測試程式

#include #include void* task (void* arg) 

return null;

}int main (int argc, char **argv)

pthread_join(tid, null);

return (0);

}

3. 再檢視/proc/kernel/affinity檔案中的cpu親和性資訊,如圖3‑2所示,可以看到執行測試程式後,主線程綁到到cpu1,子執行緒繫結到cpu0。

圖3‑2  執行測試程式後cpu親和性資訊

4.輸入ts命令檢視執行緒資訊,如圖3‑3所示,可以看到主線程確實在cpu1上執行,子執行緒在cpu0上執行,符合測試程式結果。

圖3‑3  ts命令檢視執行緒資訊

sylixos提供ints命令可以檢視中斷向量的資訊,如圖3‑4所示,紅框標記的數值為系統啟動後對應中斷在對應cpu的中斷響應次數。

圖3‑4  中斷向量資訊

將部分中斷與cpu1繫結後,再執行ints命令,如圖3‑1所示,可以看到後續的中斷響應次數僅在cpu1上累加,cpu0上數值不變表明中斷不再由cpu0處理。

圖 3‑5  中斷繫結到cpu1後的中斷向量資訊

注意:時鐘中斷的cpu親和性由硬體決定,不能將其繫結到cpu1。

《sylixos應用開發手冊》

《管理處理器的親和性》  

taskset設定程序CPU親和性

man手冊的解釋 retrieve or set a process s cpu affinity。由此可知,我們可以通過taskset來設定或者獲取程序的cpu親和性。基本上,我們用的最多的選項就是 a c p了。a 獲取給定程序pid的所有執行緒的cpu親和性。c 設定程序的cpu親和性 p 獲...

numa 與 cpu 親和性

improving performance on numa systems red hat linux numa supportfor hp proliant servers p320h performance on non uniform memory access numa systems th...

親和性 反親和性 汙點 容忍

在預設的k8s排程中,一般經過預選和優選即可完成排程,但是生產的實際使用中,考慮到部分業務的特殊性,一般會手動進行一些 指定 k8s 把這些 指定 分為nodeaffinity 節點親和性 podaffinity pod 親和性 以及 podantiaffinity pod 反親和性 這在排程過程中...