进程管理
进程是计算机中用来描述程序执行过程且能用来共享资源的基本单位。本章将通过实际案例重点介绍系统对进程生命周期遇到的问题以及系统调用在CPU上的切换策略。
百度Linux服务器操作系统 V5.0中的进程管理与调度
本节将重点介绍 百度Linux服务器操作系统 V5.0中CPU调度的基本原理、主要算法以及关键实现技术。
调度策略与调度算法
百度Linux服务器操作系统 V5.0中进程调度的算法主要包括先进先出(FIFO)算法、轮转调度(RR)算 法、优先级调度、CFS调度算法等。其中,FIFO算法和RR算法相对简单,一般是和优先级调度结合实现的,轮转调度算法引入了时间片的概念,其示意图如下图所示:

A、B、C三个进程在执行一定时间(时间片)之后都会进行切换。
操作系统中实际运行着不同场景的进程,其要求也是多种多样的,百度Linux服务器操作系统 V5.0中主要包括限期进程、实时进程、普通进程,每种类别的进程对应不同的调度策略,限期进程使用的是限期调度策略(SCHED_DEADLINE),实时进程对应两种调度策略:FIFO和RR,普通进程对应的则是标准轮流分时调度策略,其算法是 CFS。
多核调度策略
百度Linux服务器操作系统 V5.0使用了多队列调度策略,即每个CPU都维护一个单独的调度队列,运行各自的调度程序从自己的调度队列中选择进程执行,这样的好处一是避免了共同使用一个队列造成的锁资源争抢问题,提升了扩展性,二是更好地利用缓存数据,保证亲和性。除此之外,百度Linux服务器操作系统 V5.0还在每个处理器都引入了一个迁移线程(migration/CPUID),专门用于空闲CPU与其他处理多个进程的CPU上的进程迁移,从而实现动态的负载均衡。
trace event 工具
对于测试数据存在波动的情况,尝试从调度的角度进行分析,对比调度轨迹的差异。
trace event 获取进程切换信息
ftrace 是内核自带的调试工具,从久远的 2.6 内核就支持了,可以辅助定位内核问题,trace event就是利用ftrace框架在低性能损耗情况下获取debug信息的工具,系统支持的所有 trace event 都位于 /sys/kernel/debug/tracing/events 目录。
使用 trace even获取进程切换信息过程如下:
- 用于打开sched_switch event。
1# echo 1 > events/sched/sched_switch/enable
- 开始 trace sched_wakeup 这个事件,用于跟踪进程调度信息。
1# echo 1 > events/sched/sched_wakeup/enable
- 开启上面配置的trace event
1# echo 1 > tracing_on
- 提取进程切换信息

评价此篇文章
