博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核设计学习
阅读量:6426 次
发布时间:2019-06-23

本文共 864 字,大约阅读时间需要 2 分钟。

负载平衡程序 load_balance

调用条件:
只要当前可执行队列为空,它就会被调用。
被定时器调用:系统空闲时每隔1毫秒调用一次或其他情况下每隔200mm调用一次。
单处理器不会被调用
执行步骤
1. 首先,load_balance调用find_busiest_queue(),找到最繁忙的可执行队列。也就是说该队列的进程数目最多。如果没有哪个可执行队列中进程的数目比当前队列的数目多25%或25%以上,find_busiest_queue()返回NULL,并且load_balance()也返回。否则最繁忙可执行队列就被返回。
2.其次,load_balance()从最繁忙的运行队列中选择一个优先级数组以便抽取进程。最好是过期数组,因为那里面的进程已经有相对较长的一段时间没有运行了,很可能不在处理器的高速缓存中(换句话说,他们不是高速缓存命中(cache hot)如果过期数组为空,那么就只能选活动数组。
3.接着,load_balance()寻找到含有进程并且优先级最高(值最小)的链表,因为先把优先级高的进程平均分散开来才是最重要的。
4.分析找到的所有这些优先级相同的进程,选择一个不是正在执行,也不会因为取消处理器相关性而不可移动,并且不在高速缓存中的进程。如果有进程满足这些条件,就调用pull_task()将其从最繁忙的队列中抽取到当前队列。
5.只要可执行队列之间仍然不均衡,就重复上面两个步骤,继续从繁忙的队列中抽取进程到当前队列。这最终会消除不平衡,此时,接除对当前队列进程的锁定,从load_balance()返回。

 

 

调度程序小节。

适合总多进程运行,又具有可伸缩性,还能在调度周期和吞吐量之间求得平衡。同时还满足各种负载的需求。

可伸缩性天生就和并发联系在一起;毕竟,它就是要在同样的时间内做更多的工作。
调度策略通常要在两个矛盾的目标中间寻找平衡:进程响应速度(响应时间短)和最大系统利用率(高吞吐量)
负载:每个处理都有单独的可执行队列和锁。(拥有自己的进程链表)如果出现队列间负载不均衡。

转载地址:http://ofyga.baihongyu.com/

你可能感兴趣的文章
JTable内容居中显示
查看>>
MySQL内置help解析(SQL语句说明书)
查看>>
使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
查看>>
vShield App设计指南[中]
查看>>
跟我一起数据挖掘(20)——网站日志挖掘
查看>>
在Solaris 下使用Os Watcher 监控Oracle
查看>>
1.9 使用PuTTY远程连接Linux;1.10 使用xshell连接Linux;1.11 PuT
查看>>
[unity3d]为我们的游戏添加好看的字体
查看>>
android 查询工具源代码
查看>>
java 常用工具类 ——集合
查看>>
我的友情链接
查看>>
随机打印出数组的元素(分治思想)
查看>>
cgroup 介绍 与使用
查看>>
dwz表单提交响应
查看>>
我的友情链接
查看>>
Linux 下mail 的简单使用
查看>>
DNS解析过程
查看>>
对容器、迭代器的理解
查看>>
忘记mysql root密码的修改方法
查看>>
MFC小结
查看>>