免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3328 | 回复: 4

sched_setaffinity CPU-Hotplug问题,请教各位大侠 [复制链接]

论坛徽章:
0
发表于 2012-04-26 10:25 |显示全部楼层
小弟有一事不明,假如我在application中调用了sched_setaiffinity,将一个process affinity到了CPU1上。而后来又对CPU1进行了CPU DOWN(cpu-hotplug),那么最后当我CPU ON的时候,这个process还会一直在CPU1上运行吗?
  1. static int __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu)
  2. {
  3.         struct rq *rq_dest, *rq_src;
  4.         int ret = 0;

  5.         if (unlikely(!cpu_active(dest_cpu)))
  6.                 return ret;

  7.         rq_src = cpu_rq(src_cpu);
  8.         rq_dest = cpu_rq(dest_cpu);

  9.         double_rq_lock(rq_src, rq_dest);
  10.         /* Already moved. */
  11.         if (task_cpu(p) != src_cpu)
  12.                 goto done;
  13.         /* Affinity changed (again). */
  14.         if (!cpumask_test_cpu(dest_cpu, &p->cpus_allowed))
  15.                 goto fail;

  16.         /*
  17.          * If we're not on a rq, the next wake-up will ensure we're
  18.          * placed properly.
  19.          */
  20.         if (p->se.on_rq) {
  21.                 deactivate_task(rq_src, p, 0);
  22.                 set_task_cpu(p, dest_cpu);
  23.                 activate_task(rq_dest, p, 0);
  24.                 check_preempt_curr(rq_dest, p, 0);
  25.         }
  26. done:
  27.         ret = 1;
  28. fail:
  29.         double_rq_unlock(rq_src, rq_dest);
  30.         return ret;
  31. }
复制代码
这里似乎没有看到backup原先affinity信息的code

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
发表于 2012-04-26 11:11 |显示全部楼层
回复 1# cuibixiong_cu
没研究过hotplug的情况。。。,帮顶

   

论坛徽章:
0
发表于 2012-04-26 11:28 |显示全部楼层
非常有意思的问题,如果通过sched_setaiffinity绑定到某一cpu,只要改cpu online,那么一定会放到该cpu队列中,如果绑定的cpu offline,那么内核会选择一个online的cpu。所以你的问题答案是,down->up之后,cpu依然会绑定到cpu1上。

论坛徽章:
0
发表于 2012-04-26 13:14 |显示全部楼层
MagicBoy2010 发表于 2012-04-26 11:28
非常有意思的问题,如果通过sched_setaiffinity绑定到某一cpu,只要改cpu online,那么一定会放到该cpu队列 ...


magicboy兄的回答没有明白,如果我的流程是 CPU1 ONLINE -> setafffinity application to CPU1 -> CPU1 DOWN -> CPU1 UP,按我的理解,当CPU1 UP之后,所运行的只是一个cpu_idle thread,下一步所要运行的程序都是从其他CPU上migration到自己的runqueue的,如果想在这种流程下还保持application还在CPU1上运行,那么就必须要Backup一些东西(我知道cgoup是可以管理这些东西的,但是没有看过code),我觉得至少要知道Backup两个参数

  1. application在CPU DOWN之前被migration到那个CPU中去了
  2. applicationzaiCPU UP之后要知道原先被setaffinity在那个CPU上


否则在CPU UP之后他怎么知道原先我运行个那个application? 谢谢magicboy兄

论坛徽章:
0
发表于 2012-04-27 09:40 |显示全部楼层
顶起来
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP