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,
一起学习,共同进步!