Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64090
  • 博文数量: 15
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 107
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-18 21:26
文章分类

全部博文(15)

文章存档

2013年(15)

我的朋友

分类: LINUX

2013-05-23 14:38:46

      多核CPU是现在处理器的主流,在多核的软件实现上不外乎使用AMP和SMP的软件架构。而AMP的实现,每个核的任务分配和核间通信则需要有很大的开发量,一般的企业都不使用这样的机制,特别是控制面的AMP多核实现,更是一个千年万古永远的坑。而使用SMP是几乎所有软件公司的首选。
     SMP架构一般用于控制面处理,数据面上像CPU厂家都有一些类似SSO的机制来加速数据面处理,所以如果使用了SMP,那是拿大炮去打鸟。当然曾经也见过裁剪了的系统来实现数据面转发的,效率不错,而且容易裁剪和移植,这个后续有时间开贴再表。
     SMP里面包含了一个很重要的核心是做load balance(以linux为例),即他会调度每个核上的可执行队列之间的负载处于均衡状态。load balance程序会拿当前处理器的可执行队列和系统中的其他可执行队列做比较。如果发现不均衡的情况,就会把相对繁忙的队列中的进程抽到当前的可执行队列中来。但是SMP的这个均衡需要消耗CPU,而且效率在核比较多的情况下(看过一篇文章说是6个核)效率就会比较差了。所以现在一般采用的把进程绑定到固定的CPU上的策略,不使用均衡策略。负载均衡被大多数的人抛弃。
     那如何指定CPU运行指定的进程呢,其实linux提供了强制的处理器绑定机制。每个进程的task_stuct里面都有一位cpus_allowed位,这个掩码标志每一位对应一个系统可用的CPU,默认的情况下,每个CPU都被置位。用户可以使用接口sched_setaffinity()设置该值,从而实现在不同个CPU上跑不同的进程。
     当进程第一次创建的时候,继承的是父进程的相关掩码,所以子进程是运行在父进程的相应处理器上,当处理器绑定关系改变时,内核就会进行进程的迁移。
    
    

 
阅读(2657) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~