欢迎光临散文网 会员登陆 & 注册

一篇讲解实时调度类及SMP!

2022-09-02 17:52 作者:补给站Linux内核  | 我要投稿

实时调度类源码分析

Linux 实时进程与普通进程的根本不同之处,系统中有一个实时进程且可运行,调度器总是会选择它,除非另有一个优先级更高的实时进程。 SCHED_FIFO:没有时间片,在调度器被选择之后,可以运行任意长时间; SCHED_RR:有时间片,其值在进程运行时会减少。

实时调度实体sched_rt_entity数据结构及操作

进程的插入、选择、删除三种基本操作。


【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)  

对称多处理器SMP

多处理器系统的工作方式分为非对称多处理(asym-metrical mulit-processing)和对称多处理(symmetrical mulit-processing,SMP)两种。 在对称多处理器系统中,所有处理器的地位都是相同的,所有的资源,特别是存储器、中断及I/O空间,都具有相同的可访问性,消除结构上的障碍。 多处理器系统上,内核必须考虑几个额外的问题,以确保良好的调度。

  • CPU负荷必须尽可能公平地在所有的处理器上共享。

  • 进程与系统中某些处理器的亲合性(affinity)必须是可设置的。

  • 内核必须能够将进程从一个CPU迁移到另一个。 linux SMP调度就是将进程安排/迁移到合适的CPU中去,保持各CPU负载均衡的过程。

SMP优点

  • 增加吞吐时的一种划算方法;

  • 由于操作系统由所有处理器共享,它们提供了一个单独的系统映像(容易管理);

  • 对一个单独的问题应用多处理器(并行编程);

  • 负载均衡由操作系统实现;

  • 单处理器(UP)编程模型可用于一个SMP中;

  • 对于共享数据来说,可伸缩;

  • 所有数据可由所有处理器寻址,并且由硬件监视逻辑保持连续性;

  • 由于通信经由全局共享内存执行,在处理器之间通信不必使用消息传送库;

SMP局限性

  • 由于告诉缓存相关性、锁定机制、共享对象和其它问题,可伸缩性受限制;

  • 需要新技术来利用多处理器,例如:线程编程和设备驱动程序编程等。

CPU域初始化

Linux内核中有一个数据结构struct sched_domain_topology_level用来描述CPU的层次关系。 内核对CPU的管理是通过bitmap来管理,并且定义possible、present、online、active这4种状态。

SMP负载均衡

SMP负载均衡机制从注册软中断开始,每次系统处理调度tick时会检查当前是否需要处 理SMP负载均衡。

负载均衡时机

  • 周期性调用进程调度程序scheduler_tick()->trigger_load_balance()中,通过软中断触发负载均衡。

  • 某个CPU上无可运行进程,__schedule()准备调度idle进程前,会尝试从其它CPU上拉一批进程过来。

两路4核8核心CPU,CPU调度域逻辑关系





分层角度分析

所有CPU一共分成撒个层次:SMT、MC、NUMA,每层都包含所有CPU,但是划分粒度不同。根据Cache和内存的相关性划分调度域,调度域内的CPU又划分一次调度组。越往下层调度域越小,越往上层调度域越大。进程负载均衡会尽可以在底层调度域内部解决,这样Cache利用率最优。 周期性负载均衡:CPU对应的运行队列数据结构记录下一次周期性负载均衡时间,当超过这个时间点后,将触发SCHED_SOFIRQ软中断来进行负载均衡。 用到SMP负载均衡模型的时机 内核运行中,还有部分情况需要用掉SMP负载均衡模型来确定最佳运行CPU:

  • 进程A唤醒进程B时,try_to_wake_up()中会考虑进程B将在哪个CPU上运行;

  • 进程调用execve()系统调用时;

  • fork出子进程,子进程第一次被调度运行。

Linux运行时调优:

Linux引入重要sysctls来在运行时对调度程序进行调优(单位ns) sched_child_runs_first: child在fork之后进行调度,为默认设备。如果设置为0,则先调度parent。 sched_min_granularity_ns:针对CPU密集型任务执行最低级别抢占粒度。 sched_latency_ns:针对CPU密集型任务进行目标抢占延迟。 sched_stat_granularity_ns:收集调度程序统计信息的粒度。

总结

本文主要介绍了实时调度类源码分析,包括实时调度数据结构及其相关操作(插入、选择、删除等);SMP的优缺点,负载均衡机制,CPU分层角度分析,linux运行时调优等相关参数介绍等。





一篇讲解实时调度类及SMP!的评论 (共 条)

分享到微博请遵守国家法律