惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
Security Archives - TechRepublic
Security Archives - TechRepublic
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
A
Arctic Wolf
T
Threatpost
P
Proofpoint News Feed
AWS News Blog
AWS News Blog
C
Cybersecurity and Infrastructure Security Agency CISA
G
GRAHAM CLULEY
Cisco Talos Blog
Cisco Talos Blog
Simon Willison's Weblog
Simon Willison's Weblog
L
Lohrmann on Cybersecurity
Scott Helme
Scott Helme
T
Tenable Blog
L
LINUX DO - 最新话题
Help Net Security
Help Net Security
WordPress大学
WordPress大学
Hacker News: Ask HN
Hacker News: Ask HN
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Announcements
Recent Announcements
Vercel News
Vercel News
The Hacker News
The Hacker News
J
Java Code Geeks
博客园 - 【当耐特】
D
Docker
V
V2EX
H
Heimdal Security Blog
GbyAI
GbyAI
博客园 - 叶小钗
Google DeepMind News
Google DeepMind News
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
News | PayPal Newsroom
The Register - Security
The Register - Security
The Cloudflare Blog
C
CERT Recently Published Vulnerability Notes
T
The Blog of Author Tim Ferriss
博客园 - Franky
MongoDB | Blog
MongoDB | Blog
SecWiki News
SecWiki News
S
Secure Thoughts
Attack and Defense Labs
Attack and Defense Labs
Microsoft Security Blog
Microsoft Security Blog
S
Schneier on Security
Latest news
Latest news
Project Zero
Project Zero

StudyingLover's Blog

Diffusion Policy笔记 rwkv笔记 act笔记 nanovllm-block_manager opencode多智能体 nanobot-pre-train nanobot-rl nanobot-sft nanobot-checkpoint_manager nanobot-gpt nanobot-mid-train Vision Mamba (Vim)笔记 BPE演示 最后一遍学习Transformer YOLOv5 目标检测笔记 下载根服务器解析记录 Dynaseal A Backend-Controlled LLM API Key Distribution Scheme with Constrained Invocation Parameters 判断链表有环 王道25数据结构勘误 关于perplexity的open-sourcing-r1-1776 AI为什么不像人类一样进行多轮对话 新博客改造日记和功能测试 linuxqq只显示登陆背景图 数字设计和计算机体系结构(机械工业出版社)勘误(自制) Dynaseal:面向未来端侧llm agent的llm api key分发机制 A Definitive Guide to Markdown Style This post is using MDX, Where you can embed JSX and Astro components pydantic实现的LLM ReAct fastapi 和 uvicorn 设置监听 ipv6 pydantic+openai+json 控制大模型输出的最佳范式 解决 Matplotlib Scatter 不支持 Marker 列表的问题:mscatter 实现 roofline model zhipuAI接口兼容openai 在docker部署fastapi宝塔里使用nginx反代套上cloudflare获取请求的真实ip clion搭建libbpf-bootstrap开发环境 coze+coze-discord-proxy+ChatNextWebUI实现AI自由 安卓内核时间使用的是UTC时间 colab运行google最新开源模型Gemma Sora技术报告 视频生成模型作为世界模拟器 笔记 archlinux flutter开发踩坑 fastapi集成google auth登录 linux下NTFS磁盘报错输入输出错误 Venn-Abers 预测器 基于Venn-Abers预测器的系统日志异常检测方法_顾兆军 手机平板远程访问kvm虚拟机的windows phi-2弱智吧测评 poe的gemini pro或是百度开发 google gemini api使用 google gemini api申请 构建用于复杂数据处理的高效UDP服务器和客户端 matplotlib中文字体渲染 TruFor笔记和代码复现 深入分析:GitHub Trending 项目 "multipleWindow3dScene" pua大模型 ggml教程|mnist手写体识别量化推理 xgboost2.0最佳实践 xgboost使用GPU最佳实践 马踏棋盘 cloudlflare推理llama2 docker搭建elasticsearch并使用python连接 FreeU-文字生成图片的免费午餐笔记 使用xgboost的c接口推理模型 Archlinux使用CMake调用xgboost的c接口 m2cgen生成机器学习c语言推理代码 xgboost模型序列化存储并推理 speculative-sampling笔记 prompt2model笔记 RoboTAP笔记 自建obsidian同步服务 MediaPipe即将推出图像生成服务 Dual-Stream Diffusion Net for Text-to-Video Generation笔记 ViT在DDPM取代UNet(DiT) arch4edu搞崩了我的flutter LISA(推理分割)笔记 在终端绘制GPU显存使用曲线 GPTBot介绍 arch蓝牙无法连接 GPU部署llama-cpp-python(llama.cpp通用) 花式求GCD 使用llama构建一个蜜罐(前端) 使用llama构建一个蜜罐(后端) llama-cpp-python快速上手 快速上手llama2.c(更新版) Paper Gestalt笔记 DINO-v2笔记 快速上手llama2.c AnyDoor笔记 Archlinux安装scrcpy加载共享库出错 error while loading shared libraries:libusb-1.0.so.0:wrong ELF class:ELFCLASS32 npc_gzip笔记 python调用c++函数 Filesystem type ntfs3,ntfs not configured in kernel open_clip编码图像和文本 PicGo配置CloudflareR2图片储存 ArchlinuxGnome快捷键打开终端 clip-interrogator代码解析 GroundingDINO安装报错解决 2023华为鲲鹏畅想日暨西安高新国际会议中心零食午饭测评 RoboMaster开源仓库汇总(长期更新) 没有手都可以在腾讯云创建镜像 I3D笔记
RT-Patch学习
About the Author StudyingLover · 2024-08-13 · via StudyingLover's Blog

RT 是什么

在标准的 Linux 内核中,内核不是完全可抢占的(not fully preemptible)。虽然 Linux 内核支持一些程度的抢占(如在用户空间任务之间的抢占),但在内核态执行关键代码(如持有锁时),内核通常是不可抢占的。这意味着在某些情况下,特别是在处理复杂内核任务时,高优先级的任务可能不得不等待较长时间,直到当前的内核任务完成。

内核抢占指的是在操作系统内核中,当一个高优先级任务需要运行时,低优先级任务可以被暂停(抢占),高优先级任务立即获取 CPU 的控制权。抢占的程度直接影响操作系统响应外部事件的速度。

RT-Preempt 补丁是为 Linux 内核设计的,它将标准的 Linux 内核改造成一个几乎完全可抢占的内核。补丁通过修改内核代码路径,减少或消除内核中的不可抢占部分,使得内核任务可以在更多场景下被抢占。具体来说,RT-Preempt 补丁对内核中的锁机制进行了调整,将大多数“禁用抢占”的区域变成可以被抢占的区域,使得高优先级的任务可以在任何时刻获取 CPU 的控制权。

在一个完全可抢占的内核(例如应用了 RT-Preempt 补丁的 Linux 内核)中,即使内核态正在运行某个任务,只要有一个高优先级的任务准备好执行,操作系统调度器可以暂停当前的内核态任务,切换到高优先级的任务。

普通 linux RT 改进

想要实现 RTLinux 有两种方法

  1. 加一个内核:通过在 Linux 内核与硬件中断之间增加一个可抢先的实时内核,把标准的 Linux 内核作为该实时内核的一个优先级。它可以被实时进程抢断,正常的 Linux 进程仍可以在 Linux 内核上运行,这样既可以使用标准分时操作系统即 Linux 的各种服务,又能提供低延时的实时环境。RT�Linux 是采用双内核法改造 Linux 实时性的典型代表。
  2. 打 patch:通过打补丁的方式,对内核的进程调度、中断服务程 序等代码进行修改与优化,提高系统的实时性能

我们可以通过应用 RT-Preempt 补丁,将标准的 Linux 内核转换为一个完全可抢占的内核。LinuxWiki 地址

自内核版本 v2.6.11 以来,每个主线 Linux 内核的长期稳定版本都提供 PREEMPT_RT 补丁。大多数 Linux 内核的长期稳定版本都有偶数子版本号。

RT 技术基础

必须抢占当前正在运行的低优先级任务,以便让实时关键任务运行。抢占取决于任务的调度策略规则。实时系统的另一个重要方面是保证实时任务独占使用某些资源。

中断线程化

Wiki 地址

在标准 Linux 内核中,中断服务例程(ISR)是在硬中断上下文中执行的。在这个上下文中,硬件中断被禁用。这意味着在处理 ISR 的过程中,系统不会响应其他硬件中断,直到当前的中断处理完。硬件中断被禁用的同时,也意味着内核抢占和软中断(soft interrupts)也被禁用。软中断是内核中较低优先级的中断类型,通常用于延迟处理任务。禁用抢占和软中断确保了当前 ISR 的处理不会被其他任务打断,但这也会影响系统的实时性,因为高优先级任务可能无法及时执行。

线程化中断也是 RT-patch Linux 使 Linux 实时化的主要工作,其主要目标是通过将中断处理过程转化为可调度的内核线程,从而提升系统的实时性。

中断处理分为两部分:

  • 上半部: 上半部的处理依然在硬中断上下文中执行,这部分处理的工作量最小,主要处理紧急任务,如清除硬件中断标志或简单的数据读取。
  • 下半部: 下半部的工作则被转化为一个独立的内核线程来执行。这意味着它可以被操作系统调度,具有优先级管理,并且不会阻塞其他更高优先级任务的执行。

优先级继承

Wiki 地址

优先级继承(Priority Inheritance) 是解决 优先级翻转(Priority Inversion) 问题的一种机制

优先级翻转是指在一个多任务操作系统中,低优先级任务因为占用了某种资源,而导致高优先级任务被迫等待,从而让一个中等优先级的任务获得了执行机会,最终造成系统实时性下降的一种现象。

RT-Preempt 补丁通过优先级继承机制有效解决了优先级翻转问题。在这种机制下,当高优先级任务需要被低优先级任务持有的资源时,低优先级任务将继承高优先级任务的优先级,从而能够尽快完成其任务并释放资源。这种机制确保了高优先级任务不会因为等待资源而被中等优先级任务的执行延迟.

下面举一个优先级反转的例子

  1. 低优先级任务 L 先获得了某个共享资源的锁,并开始执行。
  2. 这时,高优先级任务 H 变得可运行,并试图获取 L 已经占用的锁,但由于 L 持有该锁,H 必须等待 L 释放锁。
  3. 然而,另一个 中等优先级任务 M 在 H 等待时也变得可运行,因为 M 的优先级高于 L 且无需该锁,它将抢占 L 的执行时间。这导致 L 无法继续执行,从而无法释放 H 需要的锁。

要解决这个问题,我们需要一个技术叫做优先级继承:

  1. 通过提高持有资源的低优先级任务 L 的优先级来解决优先级翻转的问题。
  2. 当高优先级任务 H 需要一个资源,而该资源正被低优先级任务 L 持有时,L 将继承 H 的优先级。这样 L 就可以优先于中等优先级任务 M 执行,从而尽快释放资源。
  3. 一旦 L 释放了资源,它的优先级将恢复到原来的低优先级,H 重新获得该资源并继续执行。