SMP之Affinity

  • 2019 年 11 月 11 日
  • 筆記

歡迎關注公眾號 VxWorks567

如轉發,請標明出處!

CPU Affinity一般翻譯為CPU的親和力或親和性,是多核OS里的一種技術,指的是可以將任務綁定到某個CPU上。在VxWorks的SMP里,默認每個任務都可以在每個CPU上執行,而指定Affinity後,就可以把某些任務固定下來,讓其只在特定的CPU上執行。相關的函數是taskCpuAffinitySet()和taskCpuAffinityGet()

與cpuset_t相關的,還有幾個宏。看名字應該就能猜出是啥意思,宏定義也是非常簡單↘

寫個例子跑一下

如果不指定Affinity呢?新創建的任務會繼承Parent任務的Affinity,看個例子

任務myCpuTask2就繼承了任務myCpuTask的Affinity

再跑個例子看看獲取與移除Affinity

如果任務的Affinity指定到某個CPU了,而那個CPU一直忙於更高優先順序的任務,一時半會兒還輪不到這個任務執行,怎麼辦?VxWorks的SMP還提供了一種特殊的功能:保留CPU。被保留的CPU,就只運行那些Affinity是這個CPU的任務。另外提供參數VX_SMP_CPU_EXPLICIT_RESERVE,用來排除那些不能被保留的CPU。

跑個例子

可以看到CPU2(0x1是CPU0、0x2是CPU1、0x4是CPU2…0x80是CPU7)被保留下來,而目前只有任務t1指定到它上邊了。因此,不管t1的優先順序高低,只要t1進入就緒隊列,它就會在CPU2上執行了。更詳細的調度策略,咱以後慢慢聊

這正是:

CPU親和力,任務位置不隨機。

CPU可保留,任務執行不等候。

我是泰山,專註VX 15年!

歡迎關注VxWorks567,

一起學習,共同進步!