蜗窝科技

smp下,task在各CPU迁移问题

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 温柔海洋 · 2016-10-14 · 1 帖

本文是原「蜗窝讨论区」的历史存档(2016-10-14),来自版块「Linux kernel技术问答」,共 1 帖。讨论区已停止服务,此处仅供查阅。

温柔海洋 · 2016-10-14 10:02

多核下,bootcpu,和 非boot cpu 的执行情况应该有很大区别的,非boot cpu不能执行任务切换吧,得靠boot cpu 执行任务切换,选中一个多余的(就是boot cpu已经有执行de task了)需要运行的task,把它通过发送IPI消息机制发送给非boot cpu去执行

蜗蜗群里也在讨论:

话唠】絕對の零度 @温柔海洋 非bootcpu 不能进行任务切换?

【话唠】温柔海洋 2016/10/13 18:42:29 非bootcpu要是也切换岂不乱套了 我看到非bootcpu执行任务的唯一接口好像就是ipi,唯一通道把

【话唠】絕對の零度 2016/10/13 18:46:02 没有哦 所有的cpu都有自己的runqueue 【话唠】絕對の零度 2016/10/13 18:47:07 为什么需要bootcpu发ipi做为切换点? 2016/10/13 18:54:06 【话唠】温柔海洋 2016/10/13 18:54:06 我看到一篇文章讲任务切换时,bootcpu会调用reschedule idle函数再选一个task通过ipi选定一个其他cpu去执行 2016/10/13 18:56:54 【话唠】温柔海洋 2016/10/13 18:56:54 多核设计中主从cpu的作用应该不是对等把,要不怎么会有主从之分 2016/10/13 18:59:28 【话唠】絕對の零度 2016/10/13 18:59:28 运行的时候是对等的 2016/10/13 18:59:48 【话唠】絕對の零度 2016/10/13 18:59:48 不对等往往是上电热插拔的时候 【话唠】絕對の零度 2016/10/13 19:00:09 例如cpu上电时,只会有bootcpu启动 【话唠】絕對の零度 2016/10/13 19:00:34 其他的core都没上电,以后bootcpu再给非bootcpu上电 【话唠】絕對の零度 2016/10/13 19:01:31 但在运行的时候,每个core都会建立自己的调度域 2016/10/13 19:04:10 【话唠】絕對の零度 2016/10/13 19:04:10 任务只会处于一个调度域中(假设一个core就是一个调度域),任务要去另外一个core要靠cfs调度(实时进程在创建时就会选择好cpu,运行时不会乱跑),从一个调度域迁移到另一个调度域

【吐槽】Brian CPU运行起来是对等的 7:53:59 【吐槽】Brian 2016/10/14 7:53:59 一开始非boot CPU是等待的 一般等待再原始bootloader里 【吐槽】Brian 2016/10/14 7:54:37 启动内核后 CPU0设置好环境 才会唤醒其他CPU 【吐槽】Brian 2016/10/14 7:55:12 每个CPU都有自己的IDLE 里面有做任务切换的 【吐槽】Brian 2016/10/14 7:55:43 其他。地方也有任务切换。但是有点复杂 【吐槽】Brian 2016/10/14 7:55:48 还没看懂

以上是群里的讨论,感觉如果运行起来后,是对等的模型,各个CPU角色都一样,那么各个CPU都可以做任务切换的话,都可以把自己的task 发送给其他CPU去执行。这样管理起来应该没有做成主从结构下,只有CPU0有发送task到其他CPU的权限,其他CPU没迁移task权限。没主从结构下设计简单。

我是这方面的小白,请教下大神们。