中移(苏州)软件技术有限公司面试问题与解答(5)—— Linux进程调度参数调优是如何通过代码实际完成的1

本文主要是介绍中移(苏州)软件技术有限公司面试问题与解答(5)—— Linux进程调度参数调优是如何通过代码实际完成的1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

接前一篇文章:中移(苏州)软件技术有限公司面试问题与解答(0)—— 面试感悟与问题记录

本文对于中移(苏州)软件技术有限公司面试问题中的“(11)Linux进程调度参数调优是如何通过代码实际完成的?”进行解答与解析。

本文中的进程调度调优参数主要指的是以下参数:

它们可以在不重新启动机器的情况下使用Linux提供的命令sysctl进行更改。每个参数的含义如下:

  • sched_latency_ns

CFS(完全公平调度器)是从内核2.6.23版本开始采用的进程调度器。基本原理:设定一个调度周期(sched_latency_ns),目标是让每个进程在这个周期内至少有机会运行一次,换一种说法也就是每个进程等待CPU的时间最长不超过这个调度周期;然后根据进程的数量,平分这个调度周期内的 CPU 使用权,由于进程的优先级即 nice 值不同,分割调度周期的时候要加权。

参数对应路径为:/proc/sys/kernel/sched_latency_ns。

对应内核代码中的变量为:sysctl_sched_latency(kernel/sched/fair.c中)。

  • sched_migration_cost_ns

这是在上次执行之后,任务在迁移决策中被视为热缓存的时间量。热任务更少可能迁移到另一个CPU,因此,增加此变量会减少任务迁移。当存在可运行进程时,如果CPU空闲时间高于预期,则建议降低此值;如果任务在CPU或结点之间频繁切换,最好增加它。

参数对应路径为:/proc/sys/kernel/sched_migration_cost_ns

对应内核代码中的变量为:sysctl_sched_migration_cost(kernel/sched/fair.c中)。

  • sched_min_granularity_ns

CFS设定了进程占用CPU的最小时间值,正在CPU上运行的进程如果不足这个时间是不可以被调离CPU的。如果进程数量太多的话,就会造成CPU时间片太小,如果小于 sched_min_granularity_ns 的话就以sched_min_granularity_ns为准;而调度周期也随之不再遵守 sched_latency_ns,而是以(sched_min_granularity_ns * 进程数量)的乘积为准。

参数对应路径为:/proc/sys/kernel/sched_min_granularity_ns。

对应内核代码中的变量为:sysctl_sched_min_granularity(kernel/sched/fair.c中)。

  • sched_nr_migrate

此参数控制了出于负载平衡目的可以跨处理器迁移的任务数量。当负载平衡使用禁用的中断(softirq)迭代运行队列时,它可能会导致实时任务的irq延迟损失。因此,增加此值可能会以增加实时任务的irq延迟为代价,提高大型SCHED_OTHER线程的性能。即在多CPU情况下进行负载均衡时,一次最多移动多少个进程到另一个CPU上。

参数对应路径为:/proc/sys/kernel/sched_nr_migrate。

对应内核代码中的变量为:sysctl_sched_nr_migrate(kernel/sched/core.c)。

  • sched_rr_timeslice_ms

此参数可以调整SCHED_RR策略中的量程(时间片)。

参数对应路径为:/proc/sys/kernel/sched_rr_timeslice_ms。

对应内核代码中的变量为:sysctl_sched_rt_runtime(kernel/sched/rt.c中)。 

  • sysctl_sched_rt_period/sysctl_sched_rt_runtime

参数对应路径分别为:/proc/sys/kernel/sched_rt_period_us和/proc/sys/kernel/sched_rt_runtime_us 。

对应内核代码中的变量分别为:sysctl_sched_rt_period和sysctl_sched_rt_runtime(均在kernel/sched/rt.c中)。

sysctl_sched_rt_period和sysctl_sched_rt_runtime两个参数一起决定了实时进程在以sysctl_sched_rt_period为周期的时间内,实时进程最多能够运行的总的时间不能超过sysctl_sched_rt_runtime。

  • sched_cfs_bandwidth_slice_us

当使用CFS带宽控制时,此参数控制从任务的控制组带宽池传输到运行队列的运行时(带宽)量。较小的值允许在任务之间以细粒度的方式共享全局带宽,而较大的值则减少了传输开销。

参数对应路径为:/proc/sys/kernel/sched_cfs_bandwidth_slice_us。

对应内核代码中的变量为:sysctl_sched_cfs_bandwidth_slice(kernel/sched/fair.c中)。

  • sched_wakeup_granularity_ns wakeup

该变量表示进程被唤醒后至少应该运行的时间的基数,它只是用来判断某个进程是否应该抢占当前进程,并不代表它能够执行的最小时间(sysctl_sched_min_granularity),如果这个数值越小,那么发生抢占的概率也就越高。

参数对应路径为:/proc/sys/kernel/sched_wakeup_granularity_ns。

对应内核代码中的变量为:sysctl_sched_wakeup_granularity。

下一篇开始,将结合实际Linux内核代码看看这些参数是如何在内核中通过代码起作用的。

这篇关于中移(苏州)软件技术有限公司面试问题与解答(5)—— Linux进程调度参数调优是如何通过代码实际完成的1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/663699

相关文章

HTML5的input标签的`type`属性值详解和代码示例

《HTML5的input标签的`type`属性值详解和代码示例》HTML5的`input`标签提供了多种`type`属性值,用于创建不同类型的输入控件,满足用户输入的多样化需求,从文本输入、密码输入、... 目录一、引言二、文本类输入类型2.1 text2.2 password2.3 textarea(严格

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

JAVA项目swing转javafx语法规则以及示例代码

《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、... 目录最常用的“一行换一行”速查表(直接全局替换)实际转换示例(JFramejs → JavaFX)迁移建

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

JAVA线程的周期及调度机制详解

《JAVA线程的周期及调度机制详解》Java线程的生命周期包括NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING和TERMINATED,线程调度依赖操作系统,采用抢占... 目录Java线程的生命周期线程状态转换示例代码JAVA线程调度机制优先级设置示例注意事项JAVA线程

Springboot3统一返回类设计全过程(从问题到实现)

《Springboot3统一返回类设计全过程(从问题到实现)》文章介绍了如何在SpringBoot3中设计一个统一返回类,以实现前后端接口返回格式的一致性,该类包含状态码、描述信息、业务数据和时间戳,... 目录Spring Boot 3 统一返回类设计:从问题到实现一、核心需求:统一返回类要解决什么问题?

maven异常Invalid bound statement(not found)的问题解决

《maven异常Invalidboundstatement(notfound)的问题解决》本文详细介绍了Maven项目中常见的Invalidboundstatement异常及其解决方案,文中通过... 目录Maven异常:Invalid bound statement (not found) 详解问题描述可

MyBatis中的两种参数传递类型详解(示例代码)

《MyBatis中的两种参数传递类型详解(示例代码)》文章介绍了MyBatis中传递多个参数的两种方式,使用Map和使用@Param注解或封装POJO,Map方式适用于动态、不固定的参数,但可读性和安... 目录✅ android方式一:使用Map<String, Object>✅ 方式二:使用@Param

idea粘贴空格时显示NBSP的问题及解决方案

《idea粘贴空格时显示NBSP的问题及解决方案》在IDEA中粘贴代码时出现大量空格占位符NBSP,可以通过取消勾选AdvancedSettings中的相应选项来解决... 目录1、背景介绍2、解决办法3、处理完成总结1、背景介绍python在idehttp://www.chinasem.cna粘贴代码,出