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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/361376.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面向对象编程(高级)(上)

下篇链接见:面向对象编程(高级)(下) 文章目录 一. 关键字:static1.1 类属性、类方法的设计思想1.2 static关键字1.3 静态变量1.3.1 语法格式1.3.2 静态变量的特点1.3.3 举例1.3.4 内存解析 1.4 静态方法1.4.1 语法格式…

1 月 30 日算法练习-思维和贪心

文章目录 重复字符串翻硬币乘积最大 重复字符串 思路&#xff1a;判断是否能整除&#xff0c;如果不能整除直接退出&#xff0c;能整除每次从每组对应位置中找出出现最多的字母将其他值修改为它&#xff0c;所有修改次数即为答案。 #include<iostream> using namespace …

AI新工具(20240126) 夸克 AI PPT-夸克 AI PPT,一键自动生成PPT;GeminiPro Next Web-一键免费部署

夸克 AI PPT-夸克 AI PPT,一键自动生成PPT 夸克AI PPT是夸克App推出的全新产品&#xff0c;用户只需输入PPT主题&#xff0c;就能在几十秒内生成一份精美且专业的PPT文档。夸克AI PPT具有更智能、更专业、更易操作的特点&#xff0c;让用户在手机端完成PPT创作&#xff0c;并提…

【C/C++】C/C++编程——整型(一)

整型 C 中的整型是基本的数据类型之一&#xff0c;用于表示没有小数部分的数。这包括正整数、负整数以及零。C 提供了多种整型&#xff0c;以适应不同大小的数值需求和优化内存使用。 整型的种类 C 中的整型可以根据其大小&#xff08;即占用的字节数&#xff09;和能够表示…

蓝桥杯2024/1/31----第十届省赛题笔记

题目要求&#xff1a; 1、 基本要求 1.1 使用大赛组委会提供的国信长天单片机竞赛实训平台&#xff0c;完成本试题的程序设计 与调试。 1.2 选手在程序设计与调试过程中&#xff0c;可参考组委会提供的“资源数据包”。 1.3 请注意&#xff1a; 程序编写、调试完成后选手…

RocksDB是如何实现存算分离的

核心参考文献&#xff1a; Dong, S., P, S. S., Pan, S., Ananthabhotla, A., Ekambaram, D., Sharma, A., Dayal, S., Parikh, N. V., Jin, Y., Kim, A., Patil, S., Zhuang, J., Dunster, S., Mahajan, A., Chelluri, A., Datye, C., Santana, L. V., Garg, N., & Gawde,…

Flink CEP实现10秒内连续登录失败用户分析

1、什么是CEP&#xff1f; Flink CEP即 Flink Complex Event Processing&#xff0c;是基于DataStream流式数据提供的一套复杂事件处理编程模型。你可以把他理解为基于无界流的一套正则匹配模型&#xff0c;即对于无界流中的各种数据(称为事件)&#xff0c;提供一种组合匹配的…

Python完善APC netbotz 250报告功能实现主动式运维。

首先介绍一下APC netbotz 250, 这是施耐德推出的一款机架式监控主机&#xff0c;能够对所有IT环境进行经济有效而且灵活的监控&#xff0c;号称APC史上性价比最高的环境监测方案&#xff0c;这可不是我吹的&#xff0c;是APC官网的介绍&#xff0c;可参考下面的官网截图。 我们…

【原创】VMware创建子网,并使用软路由获得访问互联网的能力,并通过静态路由让上层网络访问位于虚拟机的子网

前言 一看标题就很离谱&#xff0c;确实内容也有点复杂&#xff0c;我的初衷是为后面搞软路由做准备&#xff0c;先通过VMware进行可行性验证&#xff0c;确定方案是否可行&#xff0c;再做下一步的计划。结论当然可以的&#xff0c;能通能访问&#xff0c;强的不行。 网络拓…

重大进展:国产200层存储芯片实现量产,超越国际领先企业

近日&#xff0c;中国芯片技术领域迎来了一项历史性突破&#xff1a;200层以上的存储芯片率先实现量产&#xff0c;这一成就不仅超越了国外存储芯片巨头&#xff0c;更预示着中国有望成为全球行业的领军者。 后起之秀&#xff0c;鱼跃龙门 在这场技术的赛跑中&#xff0c;中国…

“死“社群先不要扔,想办法激活一下,隔壁的运营都馋哭了

私域运营已成为当下很多企业寻求增长的标配。在这过程中&#xff0c;社群运营就是极为重要的一个环节。过去我们为了流量&#xff0c;疯狂建群拉人。但建社群容易活跃难&#xff0c;活跃一段时间后&#xff0c;社群会越来越安静。 不仅如此&#xff0c;群主和管理员也渐渐疏于…

行为型设计模式—迭代器模式

迭代器模式&#xff1a;也叫作游标模式&#xff0c;能在不暴露复杂数据结构内部细节的情况下遍历其中所有的元素。在迭代器的帮助下&#xff0c; 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。 当集合背后为复杂的数据结构&#xff0c;且希望对客户端隐藏其复…

双非本科准备秋招(12.2)—— 力扣栈与队列

复习一下栈和队列的基础知识&#xff0c;刷几道题上上手。 1、102. 二叉树的层序遍历 广度优先遍历嘛&#xff0c;每次拓展一个新结点&#xff0c;就把新结点加入队列&#xff0c;这样遍历完队列中的元素&#xff0c;顺序就是层序遍历。 class Solution {public List<Lis…

分布式搜索引擎_学习笔记_3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售…

91 C++对象模型探索。RTTI运行时类型识别回顾 与 存储位置介绍

一&#xff0c;RTTI 运行时类型识别&#xff0c;简单回顾 C运行时类型识别RTTI&#xff0c;要求父类这种必须 至少有一个虚函数&#xff0c;如果父类中没有虚函数&#xff0c;那么得到的RTTI就不准确&#xff1b; RTTI就可以在执行期间查询一个多态指针&#xff0c;或者多态应…

C++:第十四讲动态规划初步

每日C知识 想要在做C小游戏里实现等待效果&#xff0c;可以用Sleep。 Sleep函数可以使计算机程序&#xff08;进程&#xff0c;任务或线程&#xff09;进入休眠&#xff0c;使其在一段时间内处于非活动状态。 一般需要头文件windows.h。 注意"Sleep"首字母要大写…

k8s Sidecar filebeat 收集容器中的trace日志和app日志

目录 一、背景 二、设计 三、具体实现 Filebeat配置 K8S SideCar yaml Logstash配置 一、背景 将容器中服务的trace日志和应用日志收集到KAFKA&#xff0c;需要注意的是 trace 日志和app 日志需要存放在同一个KAFKA两个不同的topic中。分别为APP_TOPIC和TRACE_TOPIC 二、…

LLM之Agent(十)| 本地安装Microsoft AutoGen Studio 2.0教程

2021年3月&#xff0c;微软发布了AutoGen[2]&#xff0c;这是一个使用多个代理开发LLM应用程序的框架&#xff0c;这些代理可以协作解决任务。 2024年1月&#xff0c;微软推出了一款新的应用程序&#xff0c;它名为AutoGen Studio[3]&#xff0c;可以简化AI Agent执行过程。 一…

JavaScript入门

第二个知识点&#xff1a;javascript的基本语法 定义变量 在JavaScript里面&#xff0c;没有int&#xff0c;string 之类的数据类型&#xff0c;只有 var var num 1; var string "天玄地号"; 在javascript中&#xff0c;写完一句语句之后可以不加分号&#xff…

MyBatis概述与MyBatis入门程序

MyBatis概述与MyBatis入门程序 一、MyBatis概述二、入门程序1.准备开发环境&#xff08;1&#xff09;准备数据库&#xff08;2&#xff09;创建一个maven项目 2.编写代码&#xff08;1&#xff09;打包方式和引入依赖&#xff08;2&#xff09;新建mybatis-config.xml配置⽂件…