Welcome 微信登录

首页 / 操作系统 / Linux / Linux多cpu负载平衡-线程迁移

move_tasks()在几个地方调用:1. load_balance()2. migrate_thread()---migration_threadload 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_newidlemove_task先按优先级扫描busiest rq的过期进程,再扫描货到进程, 当发现的时候,调用pull_task进行迁移, 所谓迁移指先调用dequeue_task()(从远端删除), 再调用enqueue_task()(插入本地)。 如果新进程优先级比当前进程拥有更高优先级, 就调用reschedule_task()抢占本地cpu。 这里传入的参数max_nr_move用来限制最大迁移进程数。有几个条件满足才能被迁移, see page 289 of linux kernel 3rd.sched_getaffinity() and sched_setaffinity():设置允许进程的cpu的位掩码。VMware 7.01+Fedora 13的VMware安装方法Linux选择下一个进程相关资讯      Linux教程 
  • Linux教程:如何在命令行中查看目  (07/28/2014 12:22:23)
  • Linux 修改root密码  (11/03/2012 07:53:38)
  • su - root 与su root的区别  (06/06/2012 00:39:40)
  • Linux进程间通信:消息队列  (01/28/2013 09:43:00)
  • U盘安装Linux开机无法启动解决方法  (10/07/2012 08:55:52)
  • Windows 7/Linux 同步时间  (05/15/2012 06:17:55)
本文评论 查看全部评论 (0)
表情: 姓名: 字数