Previous slide
Next slide
Toggle fullscreen
Open presenter view
第八讲 多处理器调度
第二节 多处理器调度概述
单队列多处理器调度
Single Queue Multiprocessor Scheduling,SQMS
简单地复用单处理器调度下的基本架构
所有需要调度的进程放入一个单独的队列中
单队列多处理器调度
缺乏可扩展性 (scalability)
缓存亲和性 (cache affinity) 弱
单队列多处理器调度
尽可能让进程在同一个 CPU 上运行。保持一些进程的亲和度的同时,可能需要牺牲其他进程的亲和度来实现负载均衡。
多队列多处理器调度
Multi-Queue MultiprocessorScheduling,MQMS
基本调度框架包含多个调度队列,每个队列可用不同的调度规则。
进程进入系统时,依照一些启发性规则 将其放入某个调度队列。
每个 CPU 调度相互独立,避免单队列方式的数据共享及同步问题。
多队列多处理器调度
具有可扩展性:队列的数量会随着CPU 的增加而增加,因此锁和缓存争用的开销不是大问题。
具有良好的缓存亲和度:所有进程都保持在固定的 CPU 上,因而可以很好地利用缓存数据。
多队列多处理器调度
MQMS 的负载不均
假定 4 个进程,2 个 CPU;队列都执行轮转调度策略;进程 C 执行完毕
A 获得了 B 和 D 两倍的 CPU 时间
多队列多处理器调度
MQMS 的负载不均: 怎样才能克服潜伏的负载不均问题?
假定 4 个进程,2 个 CPU;每个队列都执行轮转调度策略;A 和 C 都执行完毕,系统中只有 B 和 D
CPU1 很忙
CPU0 空闲
多队列多处理器调度
关键问题:负载不均问题?
进程迁移 (migration):通过进程的跨
CPU 迁移,可以真正实现负载均衡。
情况:CPU0 空闲,CPU1 有一些进程。
迁移:将 B 或 D 迁移到 CPU0
多队列多处理器调度
关键问题:负载不均问题?
子问题:系统如何决定发起这样的迁移?
情况:A 独自留在 CPU 0 上,B 和 D 在 CPU 1 上交替运行
迁移:不断地迁移和切换一个或多个进程
多队列多处理器调度
多队列调度:工作窃取 (work stealing)
进程量较少的 (源) 队列不定期地“偷看”其他 (目标) 队列是不是比自己的进程多
如果目标队列比源队列 (显著地) 更满,就从目标队列“窃取”一个或多个进程,实现负载均衡。
多队列多处理器调度
多队列调度:工作窃取 (work stealing)
工作窃取的队列检查间隔
如果频繁地检查其他队列,就会带来较高的开销,可扩展性不好
如果检查间隔太长,又可能会带来严重的负载不均