Linux多cpu负载平衡-线程迁移

企鹅博客
企鹅博客
企鹅博客
25193
文章
0
评论
2020年8月31日09:43:06 评论 28 views

move_tasks()在几个地方调用:

1. load_balance()

2. migrate_thread()---migration_thread

load balance在每个时钟节拍由 scheduler_tick()--->rebalance_tick()调用。 rebalance_tick开始在所有调度域上循环,其路径是从基本域(本地运行队列的sd字段)到最上层域(see page286 to know what's the meaning "schedule feilf")。load_balance试图把本调度域中最繁忙的组的进程迁移到本地cpu上的运行队列。如果load_balance中的move_task调用失败,那么唤醒migration thread去沿着调度域的链搜索(从最忙运行队列的基本域到最上层)空闲cpu。

migration thread除了load_balance唤醒外, 在几种情况下调用:

1. do_exec 系统调用, 寻找空闲cpu去加载新进程

2. 改变cpu的亲和性affinity时

3. migration_call(),  有cpu增减时

4. 更新cpu domain时,(支持cpu热插拔)

5. load_balance_newidle

move_task先按优先级扫描busiest rq的过期进程,再扫描货到进程, 当发现的时候,调用pull_task进行迁移, 所谓迁移指先调用dequeue_task()(从远端删除), 再调用enqueue_task()(插入本地)。 如果新进程优先级比当前进程拥有更高优先级, 就调用reschedule_task()抢占本地cpu。 这里传入的参数max_nr_move用来限制最大迁移进程数。

有几个条件满足才能被迁移, see page 289 of linux kernel 3rd.

企鹅博客
  • 本文由 发表于 2020年8月31日09:43:06
  • 转载请务必保留本文链接:https://www.qieseo.com/207099.html
Git 分支的创建、合并、管理和删除 Linux教程

Git 分支的创建、合并、管理和删除

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的完整副本,对大...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: