Linux内核 sched,struct sched_domain在include / linux / sched.h中的含义(在内核中调度域)...
我试图了解负载均衡器如何在Linux内核中的多处理器系统上运行,
Linux调度程序基本上使用runques来存储它必须在下一次运行的任务,现在以执行load_balancer()的方式处理多处理器系统的情况,如Robert Loves书中给出的解释Linux内核开发第2版正在关注
首先,load_balance()调用find_busiest_queue()来确定最繁忙的runqueue . 换句话说,这是其中包含最多进程的runqueue . 如果没有比当前进程多25%或更多进程的runqueue,则find_busiest_queue()返回NULL并返回load_balance() . 否则,返回最繁忙的runqueue . 其次,load_balance()决定它想从中拉出的最繁忙的runqueue上的哪个优先级数组 . 过期的阵列是首选,因为这些任务在相对较长的时间内没有运行,因此很可能不在处理器的缓存中(即,它们不是缓存热点) . 如果过期的优先级数组为空,则活动的数组是唯一的选择 . 接下来,load_balance()查找具有任务的最高优先级(最小值)列表,因为公平分配高优先级任务比低优先级任务更重要 . 分析给定优先级的每个任务,以查找未运行的任务,不阻止通过处理器关联迁移,而不是缓存热 . 如果任务满足此条件,则调用pull_task()将任务从最繁忙的runqueue拉到当前的runqueue . 只要运行队列保持不 balancer ,就会重复前两个步骤,并将更多任务从最繁忙的队列中拉到当前 . 最后,当解决不 balancer 时,当前的runqueue被解锁并且load_balance()返回 .
代码如下
static int load_balance(int this_cpu, runqueue_t *this_rq,
struct sched_domain *sd, enum idle_type idle)
{
struct sched_group *group;
runqueue_t *busiest;
unsigned long imbalance;
int nr_moved;
spin_lock(&this_rq->lock);
group = find_busiest_group(sd, this_cpu, &imbalance, idle);
if (!group)
goto out_balanced;
busiest = find_busiest_queue(group);
if (!busiest)
goto out_balanced;
nr_moved = 0;
if (busiest->nr_running > 1) {
double_lock_balance(this_rq, busiest);
nr_moved = move_tasks(this_rq, this_cpu, busiest,
imbalance, sd, idle);
spin_unlock(&busiest->lock);
}
spin_unlock(&this_rq->lock);
if (!nr_moved) {
sd->nr_balance_failed++;
if (unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2)) {
int wake = 0;
spin_lock(&busiest->lock);
if (!busiest->active_balance) {
busiest->active_balance = 1;
busiest->push_cpu = this_cpu;
wake = 1;
}
spin_unlock(&busiest->lock);
if (wake)
wake_up_process(busiest->migration_thread);
sd->nr_balance_failed = sd->cache_nice_tries;
}
} else
sd->nr_balance_failed = 0;
sd->balance_interval = sd->min_interval;
return nr_moved;
out_balanced:
spin_unlock(&this_rq->lock);
if (sd->balance_interval < sd->max_interval)
sd->balance_interval *= 2;
return 0;
}
我不清楚的是上面代码中的结构struct sched_domain * sd这个我检查的结构在include / linux / sched.h中定义如下http://lxr.linux.no/linux+v3.7.1/include/linux/sched.h#L895它是一个很大的结构所以我刚刚给出了一个简单的链接 . 我想知道的是上面代码中struct sched_domain的用途是什么?
为什么在调用load_balancer()时会使用这个结构代表什么?
Linux内核 sched,struct sched_domain在include / linux / sched.h中的含义(在内核中调度域)...相关推荐
- 【Linux 内核】调度器 ⑧ ( 进程优先级源码 include\linux\sched\prio.h | 进程分类 | 实时进程 | 普通进程 | 进程优先级数值 | 0 ~ 99 实时进程 )
文章目录 一.Linux 内核进程优先级源码 二.进程分类 三.进程优先级数值 ( 0 ~ 99 实时进程 | 100 ~ 139 普通进程 ) 在之前的博客 [Linux 内核]进程管理 - 进程优 ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度(十)【转】
转自:https://blog.csdn.net/gatieme/article/details/51589205 版权声明:本文为博主原创文章 && 转载请著名出处 @ http:/ ...
- Linux内核线程kernel thread详解--Linux进程的管理与调度
内核线程 为什么需要内核线程 Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求). 内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的. 内核线程 ...
- linux内核开机显示企鹅logo,批改linux内核kernel开机logo(小企鹅)
修改linux内核kernel开机logo(小企鹅) 修改linux内核kernel的开机图片(原为小企鹅图片). 转载请注明出处:http://blog.csdn.net/wang_zheng_ka ...
- Linux内核链表访问链表头指针,linux内核——链表结构分析
http://blog.csdn.net/tigerjibo/article/details/8299584 简单整理(使用linux3.0内核) 这里首先学习的是内核中一种抽象定义的双向链表,为了提 ...
- 《Linux网络接口》---------struct ifreq struct ifconf
网络接口--------------struct ifconf,struct ifreq 网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示: 接口 SIOCGIFC ...
- linux 内核 核心代码,8分钟掌握Linux内核分析的核心科技
原标题:8分钟掌握Linux内核分析的核心科技 作者: OUYANG_LINUX007 来源: http://blog.csdn.net/ouyang_linux007/article/details ...
- linux的memmap函数_究竟有多少linux内核命令行参数
linux启动时可以带命令行参数,这些参数会影响内核乃至启动脚本的行为.在内核中,用early_param(命令行参数名称,命令行参数处理函数)来注册.除了内核参数,还可以有其他的命令行参数,各自有自 ...
- linux内核源码系统调用有多少个,Linux内核源码目录介绍
Linux的内核源代码可以从很多途径得到,我一般常常去kernel.org看看.一般来讲,在安装的linux系统下,usr/src/linux目录下的东西就是内核源代码.源码的版本号有一个非常简单的编 ...
最新文章
- 【干货】Hey, 扁平你个锤子
- java 中覆 写tostring_如何在Java中正确覆盖toString()?
- 【数据库】Mysql日期/时间函数实际案例
- hosts ip 指向ip_不同网段共享打印机?不同IP段怎么共享打印机?
- spring cloud 学习(5) - config server
- [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]
- 忘记root密码,怎么办
- mx350显卡天梯图_CPU天梯图与显卡天梯图2020年最新版
- tt服务器显示start dcs,TT服务器使用手册
- shell提示Algorithm negotiation fail
- 计算机电源+3c认证,电源适配器要不要做3C认证?怎么做
- UE脱机激活如何不拔网线实现在线激活
- 关于Code Virtualizer pcode解密的一种方法
- 两条命令让你的git轻松自动变基,学到了!
- 5月16日第壹简报,星期一,农历四月十六
- Pycharm、Vscode设置美女背景【内附20张高清图片】
- (批处理BAT)批量提取pdf大小
- win10设置虚拟内存_小技巧| 电脑经内存不够用,教你如何设置虚拟内存
- 字符串与正则表达式习题
- GLADE3教程(一)