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 反親和性 這在排程過程中...