
Linux实时内核机制
文章平均质量分 72
1、以Linux实时内核机制为课题,对实时机制、实时性优化、驱动&内核稳定性等方面进行深入研究。
2、对实时机制下的硬中断流程改造、软中断改造、实时锁、实时调度类、抢占机制、实时内核下的内存缺页等方面深入研究
兔斯基灬木木
一个Linux爱好者,专注Linux内核机制研究和学习。
展开
-
Tuzik_Linux内核技术栈博客
Linux内核实时机制x - 实时性之中断响应优化Linux内核实时机制x - 实时性测试工具Linux内核实时机制x - 中断响应测试 Cyclictest分析1Linux内核实时机制x - 中断响应测试 Cyclictest分析2内存屏障原子操作互斥锁信号量读写锁自旋锁之MCS算法自旋锁之spinlock自旋锁之qspinlock自旋锁之休眠改造rt-mutex上 优先级继承rt-mutex中 调整优先级RCU同步机制。原创 2025-01-14 13:50:32 · 550 阅读 · 0 评论 -
Kdump
Kdump依赖双内核机制:生产内核(Primary Kernel)和捕获内核(Capture Kernel)。当系统崩溃时,捕获内核启动并保存内存快照到指定位置。确认目标内核是否启用了以下配置选项(需查看内核的。如果未启用,需重新编译内核并包含这些配置。根据提供的命令和知识库信息,出现。文件系统模块,导致无法挂载。中包含根文件系统的镜像(如。模块或配置,导致无法识别。内核可能未分配足够的内存给。,需确认其配置正确。参数可能未正确传递,或。未正确初始化根文件系统。在启动第二个内核后,通过。原创 2025-04-04 09:17:22 · 84 阅读 · 0 评论 -
【无标题】
这段注释描述了在 Linux 内核中,将定时器的基准(timer base)切换到一个经过功耗优化后选定的 CPU 目标的条件。如果不满足这些条件,定时器将被移动到当前 CPU,或者当定时器回调函数正在运行时,定时器会保留在之前分配的 CPU 上。这段注释说明了内核在进行定时器基准切换时的决策逻辑,其目的是在满足一定条件下将定时器迁移到功耗优化的 CPU 目标上,同时确保定时器的正常运行和系统的稳定性。原创 2025-04-02 17:58:25 · 51 阅读 · 0 评论 -
Kdump配置验证
Linux内核 - Kdump原创 2025-04-01 15:26:35 · 35 阅读 · 0 评论 -
[PATCH] 提交补丁给Linux内核社区
【代码】[PATCH] 提交补丁给Linux内核社区。原创 2025-03-21 10:10:45 · 45 阅读 · 0 评论 -
Linux设备管理 - PCI总线地址空间
Linux设备管理 - PCI总线地址空间原创 2025-03-30 16:27:25 · 28 阅读 · 0 评论 -
Linux内核调试 - ps 查看系统任务
【代码】Linux内核调试 - ps 查看系统任务。原创 2025-03-27 11:01:09 · 36 阅读 · 0 评论 -
Linux内核调试 - kprobe 原理&使用
Linux内核调试 - kprobe原理&使用原创 2025-03-30 16:19:30 · 44 阅读 · 0 评论 -
Linux内核调试 - Ftrace原理分析1
Linux内核调试 - Ftrace原理分析1。原创 2025-03-30 16:17:53 · 25 阅读 · 0 评论 -
Linux系统top下的PR 优先级计算
非实时进程(SCHED_NORMAL)PR值基于静态优先级(),计算公式为。实时进程(SCHED_FIFO 和 SCHED_RR)PR值基于实时优先级(),计算公式为。负数优先级表示该进程具有较高的实时优先级。动态调整:虽然PR值通常反映了进程的静态优先级或实时优先级,但在某些情况下(如CFS调度器中的动态调整),PR值可能会有所不同。通过理解这些概念,你可以更好地解释top输出中的PR值,并根据需要调整进程的调度策略和优先级。原创 2025-03-17 13:24:43 · 82 阅读 · 0 评论 -
Linux内核实时机制30 - 实时优化方案 - 实时与非实时争抢
设置合理的优先级:确保实时任务具有较高的优先级,以便在需要时优先获得CPU资源。绑定CPU亲和性:将实时任务绑定到特定的CPU核心上,减少与其他任务的竞争。隔离CPU核心:通过isolcpus参数将某些CPU核心专用于实时任务,避免非实时任务干扰。限制非实时任务的CPU使用:使用cgroups或其他工具限制非实时任务的CPU使用率。调整实时带宽限制:通过设置和参数控制实时任务的最大CPU使用率。监控和调试:使用系统监控工具观察任务的运行情况,及时发现并解决问题。原创 2025-03-16 16:12:45 · 90 阅读 · 0 评论 -
Linux内核实时机制x - 中断响应测试 Cyclictest分析3
在 cyclictest 中,延迟时间指的是从预定的唤醒时间到实际开始执行任务之间的时间差。原创 2025-02-12 17:22:13 · 237 阅读 · 0 评论 -
Linux内核实时机制x - 中断响应测试 Cyclictest分析2
【代码】Linux内核实时机制x - 中断响应测试 Cyclictest分析2。原创 2025-02-28 15:32:37 · 65 阅读 · 0 评论 -
Linux内核实时机制x - 中断响应测试 Cyclictest分析1
从timer溢出触发中断并进入ISR调用 wake_up_process唤醒实时进程,到进程真正能被运行,这中间的时间即我们需要测量的延时。3、并通过共享内存将该值传递给master进程进行统计,如此周而复始,最终由master进程将结果输出。2、然后matser进程在启动指定数量,指定优先级的实时进程,-实时进程会设置一个timer周期性的唤醒自己。1、首先通过启动一个master的普通进程。原创 2025-02-12 13:53:38 · 593 阅读 · 0 评论 -
Linux内核实时机制x - 实时性之中断响应优化
Linux内核实时机制x - 实时性之中断响应优化原创 2025-02-11 16:02:49 · 388 阅读 · 0 评论 -
Linux内核实时机制x - 信号混洗sigwaittest优化2
【代码】Linux内核实时机制x - 信号混洗sigwaittest优化2。原创 2025-03-31 08:57:49 · 26 阅读 · 0 评论 -
Linux内核实时机制x - 信号混洗测试 sigwaittest分析1
测试实时系统的信号混洗时间,原创 2025-02-28 15:59:53 · 42 阅读 · 0 评论 -
Linux内核实时机制x - 实时性测试 - 消息传递分析
原因:arch_timer中断处理耗时25us左右。原创 2025-03-15 21:40:15 · 39 阅读 · 0 评论 -
Linux内核实时机制x - 实时性测试工具
在基于PREEMPT_RT的Linux实时系统,社区开发了一套测试工具集rt-test,用于测试实时系统的各种指标。原创 2025-02-12 12:30:42 · 212 阅读 · 0 评论 -
实时内核机制 - 任务迁移分析
【代码】实时内核机制 - 任务迁移分析。原创 2025-03-12 15:35:23 · 35 阅读 · 0 评论 -
Linux RT调度器之负载均衡
RT 负载均衡原创 2025-03-13 15:23:57 · 143 阅读 · 0 评论 -
Linux内核实时机制28 - RT调度器11 - RT 组调度
Linux内核实时机制28 - RT调度器11 - RT 组调度。原创 2025-03-16 11:12:43 · 217 阅读 · 0 评论 -
Linux内核实时机制27 - RT调度器10 - RT throttling 带宽控制下
内核通过实现的RT throttling机制,控制了period周期内,实时任务占用CPU调度的时间,在周期period内,CPU必定留出一定的时间给普通任务,从而避免了rt任务出现死循环等不可控的问题时,普通任务无法得到执行的现象。(1)调度器初始化时,初始化RT throttling的period和runtime为系统默认值,并且定义一个定时器rt_period_timer及其超时处理方法;(2)在有rt任务加入到rt_rq就绪队列时,设置超时时间为period并且启动定时器;原创 2025-03-16 15:56:30 · 118 阅读 · 0 评论 -
Linux内核实时机制27 - RT调度器10 - RT throttling 带宽控制上
系统中的所有任务组是一个倒长的树,可以想象,低层次任务组的配置参数必须要服从高层次任务组的配置参数。在CPU级别上,由下面两个全局变量表示检测周期和限定时长两个带宽控制参数。结构体来保存任务组的带宽配置,在task_group中包含了该结构。支持组调度后,可以在任务组的运行队列上配置。,配置节点是每个任务组目录下的。保存的是cpu级别的配置信息。原创 2025-03-13 08:44:30 · 75 阅读 · 0 评论 -
Linux内核实时机制26 - RT调度器9 - 运行时数据更新 update_curr_rt
实时进程所在的cpu占用超时,可以向其他的CPU借用,将其他CPU的时间借用过来,这样此实时进程所在的CPU占有率达到100%,这样做的目的是为了避免实时进程由于缺少CPU时间而向其他的CPU迁移,减少不必要的迁移成本。rt_rq实时进程运行队列里面提到rt_time和rt_runtime,一个是运行累计时间,一个是最大运行时间,当运行累计时间超过最大运行时间的时候,rt_throttled则被设置为1。5、如果累计运行时间大于最大运行时间, rt_b为运行队列rt_rq的进程组带宽控制结构体指针。原创 2025-03-11 22:40:49 · 109 阅读 · 0 评论 -
Linux内核实时机制25 - RT调度器8 - 实时任务周期调度 task_tick_rt
更新统计信息,并判断当前进程执行时间是否超过系统最大值 — 后续重点分析。Linux进程管理11 - 调度时机3 - 周期调度 &抢占触发点。原创 2025-03-13 08:40:06 · 75 阅读 · 0 评论 -
Linux内核实时机制24 - RT调度器7 - 实时任务 pull_rt_task
Linux内核实时机制24 - RT调度器7 - 实时任务 pull_rt_task。原创 2025-03-16 11:08:33 · 28 阅读 · 0 评论 -
Linux内核实时机制23 - RT调度器6 - 实时任务选择 pick_next_task_rt
【代码】Linux内核实时机制23 - RT调度器6 - 实时任务选择 pick_next_task_rt。原创 2025-03-11 22:48:51 · 70 阅读 · 0 评论 -
Linux内核实时机制22 - RT调度器5 - 实时任务选核 select_task_rq_rt
RT调度类的选核原则。原创 2025-03-12 08:46:17 · 71 阅读 · 0 评论 -
Linux内核实时机制21 - RT调度器4 - 实时就绪队列维护
1、enqueue_task->enqueue_rt_entity:实时进程在enqueue_rt_entity中把调度实体rt_se->run_list 挂载到运行队列active上:rt_prio_array *array = &rt_rq->active的队列头,每个cpu对应一个实时进程的运行队列,而且该调度实体是待唤醒进程的调度实体。注意此处enqueue_rt_entity在挂载优先级队列之前,原创 2025-03-14 17:59:56 · 171 阅读 · 0 评论 -
Linux内核实时机制20 - RT调度器3 - 实时任务唤醒
rt_rq。原创 2025-03-13 18:03:07 · 75 阅读 · 0 评论 -
Linux内核实时机制19 - RT调度器2 - 实时任务创建
1、将调度策略SCHED_FIFO和SCHED_RR设置到任务描述结构体struct task_struct的policy;2、将任务的优先级保存到描述结构体struct task_struct的rt_prority中;3、对任务的rt_priority进行转换保存到struct task_struct中的prio,以供后续调度使用。原创 2025-03-13 18:02:09 · 119 阅读 · 0 评论 -
Linux内核实时机制18 - RT调度器1 - 数据结构
实时调度器主要为了解决以下四种情况1、在唤醒任务时,待唤醒的任务放置到哪个运行队列最合适(这里称为pre-balance);2、新唤醒任务的优先级比某个运行队列的当前任务更低时,怎么处理这个更低优先级任务;3、新唤醒任务的优先级比同一运行队列的某个任务更高时,并且抢占了该低优先级任务,该低优先级任务怎么处理?4、当某个任务降低自身优先级,导致原来更低优先级任务相比之下具有更高优先级,这种情况怎么处理。对于情况2和情况3,实时调度器采用push操作。原创 2025-03-11 18:04:27 · 295 阅读 · 0 评论 -
Linux内核实时机制18 - 实时优化案例 - RCU stall 异常案例分析1
### **增加 RCU 同步点的作用**- 确保在释放内存或修改共享数据时,所有读者线程都已退出临界区。- 避免读者线程访问已释放的内存,导致内存错误。#### **使用 `call_rcu` 的优势**- 避免写者线程阻塞在 `synchronize_rcu()` 上,提高系统响应速度。- 将内存释放操作推迟到 RCU 宽限期结束后执行,确保安全性。#### **适用场景**- 高并发系统中,频繁访问和修改共享数据。- 需要避免阻塞的场景,如实时系统或高性能数据库。代码。原创 2025-02-28 14:16:27 · 166 阅读 · 0 评论 -
Linux内核实时机制17 - 实时优化机理 - RCU同步机制
1、__rcu_read_lock不再调用preempt_disable关闭抢占,而是调用rcu_preempt_read_enter,为当前进程增加一个RCU读者的引用计数。2、rcu_read_lock_nesting定义在task_struct中,当前线程调用__rcu_read_lock时,引用计数加1,可嵌套。原创 2025-02-28 13:36:25 · 65 阅读 · 0 评论 -
Linux内核实时机制15 - 实时优化机理 - rt-mutex上 优先级继承
通过优先级继承关系链,当任务A持锁失败时,锁的owner task(任务C)临时把优先级上升和任务A一样的优先级,在释放锁时在将优先级进行恢复。为了能够让PI正常起作用,优先级继承的任务必须维持这样的关系,处于PI chain中右侧的任务优先级 必须大于等于左侧的任务们。但是Task90 和 Task50没有竞争关系,但是Task50比Task90优先得到调度,这就是所谓的优先级反转。,Task90 和Task10由于处于同一临界区的原因,会造成资源的竞争,这符合逻辑。2、增加复杂的任务和锁的逻辑图。原创 2025-02-27 14:52:34 · 179 阅读 · 0 评论 -
Linux内核实时机制16 - 实时优化机理 - rt-mutex中 调整优先级
1、正常情况下,持有锁的任务继承了优先级之后,不会被低优先级抢占,在释放锁之后,会恢复到原有的优先级。2、如果高优先级的任务在阻塞过程中被signal中断或timeout退出等待,这时要将持有锁的任务优先级恢复到原来的状态,同时将整个优先级继承链恢复到原来的状态。3、如上分析,rt-mutex解决了优先级反转带来的不确定性,但同时增大了很多开销。1、T0时刻,优先级为10的Task10开始运行。2、T1时刻,Task10申请并获得了锁M,进入临界区。原创 2025-02-28 10:14:40 · 73 阅读 · 0 评论 -
Linux内核实时机制14 - 实时优化机理 - 自旋锁之休眠改造
1、preempt rt使用rt_mutex对spinlock进行了改造,即解决了spinlock关抢占关中断的问题,也利用rt_mutext解决了优先级翻转的问题,很简单,也很巧妙。2、经过改造后的spinlock,申请者可以休眠等待锁的释放。3、那么为什么申请者的休眠不会造成死锁的现象呢?由中断线程化可知,在preempt rt方案中,绝大部分的中断处理函数是运行在一个内核线程的上下文中,是可休眠,可调度的,原创 2025-02-26 10:08:57 · 86 阅读 · 0 评论 -
Linux内核实时机制13 - 实时改造机理 - 自旋锁之qspinlock
3、因为queued_fetch_set_pending_acquire是一个等待的过程,这个过程之后val的值可能发生变化。2、atomic_cond_read_relaxed 函数来自旋等待,即循环读取lock->val,直到脱离这个状态。1、判断pending域和tail域是否有值,其中_Q_LOCKED_MASK为0xff。2、运行到这,意味只有locked被置位,pending和tail都为0。5、设置:0,1,0 -> 0,0,1,成功持有锁,pending域清零。<2> 慢速获取自旋锁。原创 2025-02-26 14:08:42 · 89 阅读 · 0 评论 -
Linux内核实时机制12 - 实时改造机理 - 自旋锁spinlock
当我们的临界区代码,有可能被进程或者中断访问时,就需要在进程上下文中,自旋锁保证了不受其他CPU或者单CPU内的抢占进程的干扰,原创 2025-02-27 10:38:57 · 81 阅读 · 0 评论