进程管理
文章平均质量分 84
Robin.Yin
一只勤勉的小虫,如痴如醉地沉迷于书卷,孜孜不倦地咀嚼着文字-书虫
展开
-
Linux cgroup源码分析<一>概述
1. cgroup子系统子系统的介绍blkio -- 这个子系统为块设备设定输入/输出限制,比如物理设备(磁盘,固态硬盘,USB 等等)。cpu -- 这个子系统使用调度程序提供对 CPU 的 cgroup 任务访问。cpuacct -- 这个子系统自动生成 cgroup 中任务所使用的 CPU 报告。cpuset -- 这个子系统为 cgroup 中的任务分配独立 C...原创 2020-11-05 23:45:15 · 1099 阅读 · 0 评论 -
Linux CFS调度器分析
进程被调度的条件是什么,以及真正发生调度的时刻又是在哪里?以下结论和代码分析都是基于最新Linux master分支(Linux5.0)1. 调度的时刻1.1 当前进程主动放弃CPU或者调用msleep/down/wait等阻塞函数时,会直接调用schedule()函数。1.2. 当前进程满足被调度条件时(设置了TIF_NEED_RESCHED标志位),在下面几种情况会发生调度...原创 2019-09-12 09:54:05 · 465 阅读 · 0 评论 -
CFS组调度
/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/在支持多用户登陆的系统,假如用户A启动了99个进程,用户B只启用了1个进程 (优先级都为NICE 0). 那么按照CFS调度规则,用户A将获得99%的CPU时间,而用户B只能获取1%的CPU时间,这显然是不合理的.因此,组调度被引入CFS,用户A和用户B属于不同的调度组...原创 2019-09-10 11:42:30 · 896 阅读 · 0 评论 -
CFS调度器负载计算
/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/1. 负载结构体每个调度实体都有一个负载结构,用来跟踪调度实体对系统的负载贡献struct sched_entity {struct load_weight load; #ifdef CONFIG_SMP struct sched_avg...原创 2019-08-30 17:36:58 · 976 阅读 · 0 评论 -
进程调度FAQ
1. 进程优先级,权重,虚拟运行时间之间的关系是什么2. 简述进程负载算法PELT原理3. 进程调度发生在哪些场景(时刻)4. 进程设置被调度的条件:周期性调度schdule_tick, 唤醒调度,hrtimer调度...原创 2019-08-26 16:54:11 · 160 阅读 · 0 评论 -
Linux调度器负载计算之PELT
/******以下结论和代码分析都是基于最新Linux master分支(Linux5.0)******/PELT算法中,每个周期为1024us(方便移位操作),也可以认为是1毫秒. 一个进程对系统负载贡献,包含当前负载和历史负载,对于过去的负载在计算时需要乘一个衰减因子,如果Li表示在周期i中该调度实体的对系统负载贡献,那么一个调度实体对系统负荷的总贡献可以表示为:L= L0...原创 2019-01-05 18:02:03 · 2089 阅读 · 2 评论 -
CFS调度器vruntime和min_vruntime
min_vruntime是CFS红黑树中最小的虚拟时间(运行最少)。其在进程更新虚拟时间(vruntime)时一起被更新1. 当一个进程进入运行对列或者出队列时,会调用update_currstatic void update_curr(struct cfs_rq *cfs_rq){ struct sched_entity *curr = cfs_rq->curr; u64 ...原创 2018-03-28 14:50:27 · 1561 阅读 · 0 评论 -
Linux 软中断实现
1. 软中断初始化Linux目前支持10种sofirq,且不支持驱动开发者添加softirq(可以用tasklet)10种类型如下:enum{ HI_SOFTIRQ=0,//最高优先级 TIMER_SOFTIRQ,//timer NET_TX_SOFTIRQ,//网络收发数据 NET_RX_SOFTIRQ, BLOCK_SOFTIRQ,//块设...原创 2018-03-28 14:50:13 · 743 阅读 · 0 评论 -
Linux CFS调度算法总结
1. ideal_runtime 理想运行时间(根据进程权重在CFS中的比重乘以CFS调度周期,具体函数sched_slice)2. exec_runtime 实际运行时间3. vruntime 虚拟运行时间(exec_delta*(NICE_0_weight)/weight)= exec_delta*NICE_0_weight*inv_weight,具体可以看函数calc_delta_f...原创 2018-03-28 14:50:20 · 928 阅读 · 0 评论 -
Linux内核fork实现分析
1.fork的主要flag参数含义2. fork,vfork,clone/pthread_create的区别fork:内核会复制父进程页表(相同的虚拟空间),但是没有给子进程映射新物理地址,而是采用COW技术,且不保证子父进程执行顺序.vfork: 父子进程共享页表(相同的虚拟空间),且子进程退出(exit)或者调用exec后,父进程才能执行(CLONE_VFORK|CLONE_V...原创 2018-11-14 11:30:10 · 295 阅读 · 0 评论