当前位置: 首页 > news >正文

中移(苏州)软件技术有限公司面试问题与解答(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内核代码看看这些参数是如何在内核中通过代码起作用的。

http://www.lryc.cn/news/291445.html

相关文章:

  • 初识C语言·文件操作
  • 跨境卖家:如何利用自养号测评抢占市场先机?
  • 开发手札:Github Timeout 22
  • 学习鸿蒙基础(3)
  • 2024/1/27 备战蓝桥杯 1-2
  • 【PyQt】02-基本UI
  • 无需 Root 卸载手机预装软件,精简过的老年机又行了
  • 【Spring连载】使用Spring Data访问Redis(一)----快速指南
  • Redis 学习笔记 2:Java 客户端
  • React Native
  • 分布式搜索引擎_学习笔记_3
  • 机器学习系列——(二)主要任务
  • 十分钟快速上手Spring Boot与微信小程序API接口的调用,快速开发小程序后端服务
  • 理想架构的高回退Doherty功率放大器理论与ADS仿真-Multistage
  • <网络安全>《11 网络安全审计系统》
  • 飞桨paddlespeech语音唤醒推理C INT8 定点实现
  • go 面试题分享
  • 华为VRP系统简介
  • SpringMVC实现对网页的访问,在请求控制器中创建处理请求的方法
  • c++循环解释
  • Hadoop3.x基础(2)- HDFS
  • 04 避免 Latch 的产生
  • 嵌入式学习第十四天!(结构体、共用体、枚举、位运算)
  • Unix/Linux上的五种IO模型
  • 电脑风扇控制温度软件 Macs Fan Control Pro 中文
  • 初谈C++:引用
  • C++ 数论相关题目 博弈论:拆分-Nim游戏
  • EDR、SIEM、SOAR 和 XDR 的区别
  • 修复idea,eclipse ,clion控制台中文乱码
  • 怎样使用Oxygen XML Editor将MS Word转换成DITA