linux实时性分析

news2024/11/18 4:35:59

什么是实时操作系统

操作系统的实时性是指执行一个特定任务的时间是确定的和可预测的,这个任务执行时限需要考虑任何的情况,包括最恶劣的情况。或者说操作系统能够在规定的时间点内完成指定的任务操作,一旦超过这个时间点会对整个系统带来不可估量的后果,也就是指任务执行的及时性。这里以车辆紧急制动为例,这个任务的响应时间就是车载系统收到紧急制动指令到真正实施紧急制动这个动作所需的时间,我们当然希望这个时间是确定的而且是及时的,即需要在最恶劣的情况下也能保证在一定的时间内完成,否则刹车失灵车企可能就要上热搜了。
实时操作系统有很多,国外的有μC/OS、FreeRTOS、SafeRTOSVxworks等,国内的代表有RT-Thread和LiteOS。本文主要讲一下Linux的实时性。
不同的应用场景对操作系统的要求是不一样的,比如在车载领域追求的是实时性,任务执行的确定性和可预测性;而服务器系统追求的是吞吐量,相同的时间内执行的任务越多越好,越快越好;而在嵌入式领域追求的则是低功耗。实时性,吞吐量,低功耗是鱼与熊掌不可兼得。

实时性衡量指标

业界一般是通过延迟来衡量一个操作系统的实时性,主要包括中断延迟和抢占延迟

  1. 中断延迟:外部中断信号触发到对应的中断处理服务第一条指令执行所需的时间
  2. 抢占延迟:外部事件触发到到对应该事件的任务(Linux 下就是thread)第一条指令执行所需的时间
    Linux系统最初是按照分时系统设计并推出的,虽然在后续的演进中其实时性得到不断的优化,但一般认为Linux不算一个实时操作系统。那具体是由哪些因素影响了Linux的实时性了呢?

影响Linux实时性的因素

这里主要从中断延迟和抢占延迟两个主要方面来分析影响Linux实时性的一些因素。

中断屏蔽和中断嵌套

Linux默认是不支持中断嵌套的,假设cpu在执行一个中断A, Linux会先屏蔽中断,意味着这个CPU在执行完中断A之前是不会响应其它的中断。假设这时候又来了一个优先级更高的,更紧急的中断B, cpu也不得不等到中断A执行完才能去执行中断B, 但中断A什么时候执行完可能是不确定的,这就导致了中断B的中断延迟的不确定性。这一点对Linux的实时性影响是非常大的

内核可抢占性

Linux的可抢占性有以下四种:

  1. CONFIG_PREEMPT_NONE,该配置表示不允许高优先级任务抢占低优先级任务,中断,异常,系统调用等都无法触发抢占,只能等由当前任务主动让出cpu ,主动schedule。一般如果系统对响应要求比较低,需要提高系统吞吐量,一般是服务器才选择这个配置。由于任务的不可抢占会导致任务抢占延迟引入很大的不确定性,严重影响系统的实时性。
  2. CONFIG_PREEMPT_VOLUNTARY, 激活kernel代码中的might_sleep()抢占点,主动让出cpu.
  3. CONFIG_PREEMPT, 该配置表示允许高优先级的任务抢占低优先级任务,无需低优先级任务主动放弃CPU,中断,异常,系统调用等都可以触发抢占
  4. CONFIG_PREEMPT_RT,spin_lock自旋锁配置成睡眠可抢占,同时中断线程化来提高任务执行的确定性。

spin_lock自旋锁

自旋锁是内核中常用的同步机制,它的特点是如果申请失败不会陷入休眠,这样可以减少任务切换context switch的次数,有利于提高系统的吞吐量。但是在自旋锁持期间会禁止抢占,有的接口可能还会禁止中断,这会给抢占延迟和中断延迟带来很大的不确定性。假设cpu A持有一个自旋锁,同时cpu B也尝试申请该自旋锁,那么cpu B就会自旋,不会主动让出CPU刚给其它线程,这也会引入一定的抢占延时。这个问题可以通过CONFIG_PREEMPT_RT把自旋锁配置成睡眠可抢占来解决。这里需要注意的是,如果自旋锁设置为休眠可抢占之后,要注意优先级反转问题。
优先级反转

系统任务调度周期

可以简单理解为操作系统每隔多久会触发一次任务调度,通常用赫兹hz来表示,即一秒会触发多少次调度,系统任务调度的赫兹数越高实时性越好。一般配置为100-1000hz,比如100hz就是10ms触发一次调度,1000hz就是1ms触发一次调度。如果hz配置太大会导致频繁触发调度会占据很大的cpu资源(或者叫浪费cpu资源,光任务切来切去就够了)。

禁止中断和禁止抢占api

如果使用spin_lock_irqsave, spin_lock_irq, spin_lock_bh, spin_lock_disable, preempt_disable, migrate_disable等禁止抢占api,会对中断延迟和调度延时带来很大的不确定性,会对系统的实时性产生影响

软中断的影响

假设一个高优先级的中断产生时,唤醒了一个实时线程,那么这个实现线程需要等到中断执行完才能执行。但是如果中断执行的过程中需要处理软中断,这可能会导致实时线程的执行被延迟很久,也就是说会造成抢占延迟的不确定性

物理内存的延迟分配和缺页异常

用户空间申请一块内存时,得到的只是一个虚拟的起始地址,内核并没有马上给这段虚拟空间分配物理内存。当程序真正访问这段虚拟空间之后会触发一个缺页异常,然后在缺页异常的处理程序中为这段虚拟空间分配内存。这也会对应用程序的执行时间上的不确定性和及时性有很大影响。

内存swap影响

当内存不够时,Linux会把一些内存swap到硬盘或者对内存进行压缩(zram),当程序访问的堆栈不在内存上时就会触发缺页异常,将数据又从硬盘swap到内存,或者是解压缩,这也会引入不确定性。

cpu idle

出于省电的目的,当cpu没事干的时候会进入idle状态. 例如ARM64架构中,当CPU Idle时,会调用WFI指令(wait for interrupt),关掉CPU的Clock以便降低功耗,当有外设中断触发时,CPU又会恢复回来。按照cpu睡眠的深度分为以下这几个C-State,睡眠越浅越耗电,但是唤醒就越快,睡眠越深越省电,唤醒也就越慢,这对中断延迟和抢占延迟也有很大影响。

cpu idle
在这里插入图片描述

其它

影响Linux实时性的因素还有:CPU频率切换(DVFS), DMA, IOBuffer, cache, branch-prediction, TrustZone, hypervisor,NMI等等因素,这里先不展开细讲。

Linux RT patch

linux提供一个实时补丁来提高Linux的实时性,这个patch主要采取的措施有以下几种

内核的可抢占性

这个补丁中内核可抢占性配置为CONFIG_PREEMPT_RT模式

spin_lock可休眠

中断线程化

不使用 禁止中断和禁止抢占的api

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【探花交友】day01—项目介绍与环境搭建

目录 1、项目介绍 1.1、功能列表 1.2、项目背景 1.3、功能概述 1.4、技术方案 1.5、技术解决方案 2、前后端分离 2.1、前后端分离的概述 2.2、YAPI介绍 3、开发工具 3.1、虚拟机配置 3.2、Android模拟器 3.3、调试工具PostMan 4、环境搭建 4.1、MYSQL数据库 4.…

【JAVA程序设计】(C00127)基于SSM+vue开发的音乐播放管理系统-有文档

基于SSMvue开发的音乐管理系统-有文档项目简介项目获取开发环境项目技术运行截图项目简介 基于ssm框架vue以及html前台的开发的音乐管理系统共分为二个角色:管理员、用户 管理员角色包含以下功能: 登录、个人中心(修改密码、个人信息修改&am…

溯源取证-内存取证 高难度篇

今天的场景依然是windows场景,只不过此次场景分为两个镜像,本次学习主要学习如何晒别钓鱼邮件、如何提取钓鱼邮件、如何修复损坏的恶意文件、如何提取DLL动态链接库文件 本次需要使用的工具: volatility_2.6_lin64_standalone readpst clams…

c++11 标准模板(STL)(std::unordered_multimap)(十三)

定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…

交互式电子沙盘数字沙盘大数据系统开发第8课

交互式电子沙盘数字沙盘大数据系统开发第8课 这次我们完成的功能为拖动一个外部的UI对象到球球上&#xff1a; private void Button_PreviewMouseMove(object sender, MouseEventArgs e) { if(e.LeftButton MouseButtonState.Pressed) DragDr…

Vue简易便签实现

Vue简易便签实现 html部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Comp…

ChatGPT这么强,你该怎么办?

总编说&#xff1a;《生命3.0》给未来选择工作的人提出的建议显得更加重要。泰格玛克认为&#xff0c;未来选择工作前需要询问三个问题&#xff1a;是否需要与人打交道&#xff0c;运用社交智慧&#xff1f;是否需要创造力&#xff0c;解决复杂问题&#xff1f;是否需要在不确定…

leetcode1306.跳跃游戏

跳跃游戏 -这里有一个非负整数数组 arr&#xff0c;你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时&#xff0c;你可以跳到 i arr[i] 或者 i - arr[i]。 请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。 注意&#xff0c;不管是什么情况下&#xff…

不会吧?该不会还有企业没实现员工赋能吧!要我说,选低代码就对了!

员工作为企业的重要生产力要素&#xff0c;员工赋能一直是企业经营者重点关注的领域。 在大部分企业经营实践中&#xff0c;员工赋能由人力资源部门负责&#xff0c;赋能的主要形式是集中培训&#xff0c;其结果往往是业务繁忙时&#xff0c;人力组织难度大、业务部门参与意愿低…

深度剖析JVM三个面试常考知识点

目录 &#x1f433;今日良言:只要你足够努力,生命都会庇佑你 &#x1f407;一、JVM内存区域划分 &#x1f407;二、类加载过程 &#x1f407;三、垃圾回收机制(GC) &#x1f433;今日良言:只要你足够努力,生命都会庇佑你 &#x1f407;一、JVM内存区域划分 先来了解一下什…

MySql的sql_mode

文章目录简介查看命令配置文件设置命令配置文件常用的模式ONLY_FULL_GROUP_BYNO_AUTO_VALUE_ON_ZEROSTRICT_TRANS_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERONO_AUTO_CREATE_USERNO_ENGINE_SUBSTITUTIONPIPES_AS_CONCATANSI_QUOTES专栏目录请点击 简介 他是…

【通过Cpython3.9源码看看列表到底是咋回事】

列表结构 typedef struct {PyObject_VAR_HEAD/* Vector of pointers to list elements. list[0] is ob_item[0], etc. */PyObject **ob_item;/* ob_item contains space for allocated elements. The number* currently in use is ob_size.* Invariants:* 0 < ob_siz…

vulnhub DC:3.2渗透笔记

kali ip :192.168.20.130 靶机下载地址:https://www.vulnhub.com/entry/dc-32,312/ 信息收集 扫描靶机ip以及开放端口 开放了80端口访问一下 Welcome to DC-3. This time, there is only one flag, one entry point and no clues. To get the flag, youll obviously have …

【Java版oj】day29求正数数组的最小不可组成和、有假币

目录 一、求正数数组的最小不可组成和 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、有假币 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码…

三、用户与权限管理

五、角色管理 1、角色的理解 引入角色的目的时方便管理相同权限的用户。只需要给相同权限的用户分配角色即可&#xff0c;而不需要分配具体的权限 2、创建角色 创建角色使用 CREATE ROLE 语句&#xff0c;语法如下&#xff1a; CREATE ROLE role_name[host_name] [,role_…

干货分享 | 常用车载总线CAN、CANFD、LIN、FlexRay 和 Ethernet概述

随着现代汽车的电子化程度越来越高&#xff0c;汽车总线系统也变得越来越复杂。汽车总线测试是一项重要的任务&#xff0c;它有助于确定车辆电子系统中的问题&#xff0c;并保障车辆的安全和可靠性。本文将介绍五种常见的汽车总线系统和相关的测试工具。 CAN总线 …… 控制器…

传输线的物理基础(八):用近似值和二维场计算特性阻抗

设计一个特定的目标特性阻抗实际上是调整线宽、电介质厚度和介电常数的问题。如果我们知道传输线的长度和导体周围材料的介电常数&#xff0c;并且我们可以计算出特征阻抗&#xff0c;我们就可以使用上面的关系来计算所有其他参数。 当然&#xff0c;每一种不同类型的横截面几…

kaggle竞赛 - Stable Diffusion - Image to Prompts

演绎提示&#xff0c;生成我们的“高度详细&#xff0c;锐利的焦点&#xff0c;插图&#xff0c;宏伟&#xff0c;史诗”图像的3d渲染 1.比赛目标 这个竞赛的目标不是从文本提示生成图像&#xff0c;而是创建一个模型&#xff0c;可以在给定生成图像的情况下预测文本提示&…

曲线平滑算法:三次Hermite曲线生成

目录 1.三次Hermite曲线的参数方程 2. 三次Hermite曲线的绘制 Hermite曲线是通过给定曲线的两个端点的位置矢量、以及两个端点处的切线矢量、来描述曲线的&#xff0c;如图1所示。这里先对Hermite曲线进行数学公式推导&#xff0c;然后讲述如何绘制Hermite曲线。&#xff08;这…

【Ansys】什么软件模块是DS,它和workbench、mechanical的区别在哪里?

一、DesignSpace和workbench 早期的Workbench称之为DesignSpace&#xff0c;更偏向于建模。 现在DS是license的一种&#xff0c;而分析的模块在11中称之为Simulation&#xff08;Design Simulation&#xff09;&#xff0c;在12中改名为Mechanical。 所以&#xff0c;你可以…