Real-time Linux

2023-11-19

所谓实时操作系统(Real-time Opearting System),是指当外接世界或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,调度一切可利用的资源完成实时任务,并控制所有实时任务协调一致运行的操作系统。相比于分时操作系统有着响应及时和可靠性高的优点。

本文将在QEMU环境下,通过给内核打实时补丁的方式,使Linux成为一个实时操作系统,并使用测试程序判断内核的实时性。

对QEMU不熟悉的朋友可以移步我的上一篇博客:http://blog.csdn.net/baidu_34045013/article/details/78882607

实验环境

ubuntu 16.04.2
QEMU-2.11.0
Linux kernel-4.14.7
Real-time patch-4.14.8

安装Cyclictest

为了比较打补丁前后的性能差异,我们选用Real-Time Linux Wiki提供的基准测试用例Cyclictest
https://wiki.linuxfoundation.org/realtime/documentation/howto/tools/cyclictest
Cyclictest是一个高精度的测试程序,是rt-test下的一个测试工具,也是rt-test下使用最广泛的测试工具,样板主要用来测试使用内核的延迟,从而判断内核的实时性。
从git clone rt-test源码

git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git
cd rt-tests
git checkout stable/v1.0

交叉编译rt-test,修改Makefile中的编译器

CC = arm-linux-gnueabi-gcc
AR = arm-linux-gnueabi-ar
make

将编译好的rt-tests放入文件系统

sudo mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
sudo mkdir tmpfs/rt-tests
sudo cp rt-tests/* -r tmpfs/rt-tests/
sudo umount tmpfs

启动QEMU,进入rt-tests目录,使用Cyclictest

./cyclictest -t1 -p 80 -n -i 10000 -l 10000

运行结果如下:

结果分析
T:0(783) P:80 I:10000 C:10000 Min:259 Act:4281 Avg:5201 Max: 14962
T: 线程序号为0
P: 线程的优先级为80
C: 计数器,线程的时间间隔每达到一次,计数器加1
I: 时间间隔(单位微秒 us)
Min: 最小时延(us)
Act: 最近一次的时延
Avg: 平均时延
Max: 最大时延

参数分析
-t 线程数
-p 最高优先级线程的优先级
-n 使用clock_nanosleep
-i 基本线程间隔,默认为1000us
-l 循环次数,默认为正无穷

运行另一个测试命令
./cyclictest -t5 -p80 -n -i 10000 -l 1000

接下来我们给kernel打上实时补丁,再运行测试用例测试系统实时性

打实时补丁

Linux Real-time Patch可以在kernel.org找到
https://www.kernel.org/pub/linux/kernel/projects/rt/4.14
这里我们选择下载与内核版本对应的rt patch

wget https://www.kernel.org/pub/linux/kernel/projects/rt/4.14/patch-4.14.8-rt9.patch.gz

解压patch

gunzip patch-4.14.8-rt9.patch.gz
cp patch-4.14.8-rt9.patch linux-4.14.7/
cd linux-4.14.7

打补丁

patch -p1 < patch-4.14.8-rt9.patch

如需回退补丁使用以下命令

patch -R -p1 < patch-4.14.8-rt9.patch

打补丁成功后,重新编译内核,这里由于内核是跑在QEMU模拟的vexpress-a9单板上,所以需要交叉编译,有关交叉编译的内容也在我的上一篇博客有介绍

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig

在“Processor type and features”中
选择“Complete Preemption (Real-Time)”、“Thread Softirqs”和“Thread Hardirqs”
在“Device Drivers”中
去掉“Staging Drivers”

make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm

更新grub

sudo update-grub2

测试实时抢占系统

启动QEMU
命令行输入 uname -a

证明当前内核已打上实时补丁

接下来再运行测试用例,来检验实时补丁是否起了作用

./cyclictest -t1 -p 80 -n -i 10000 -l 10000

./cyclictest -t5 -p80 -n -i 10000 -l 1000

通过以上两个例子的运行,我们发现打了实时补丁的内核的实时性要明显优于非实时内核。

有兴趣的朋友也可以使用latencytop进行比较测试

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Real-time Linux 的相关文章

  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • Fedora dnf 更新不起作用?

    当我尝试使用 update 命令更新 Fedora 22 时 sudo dnf update 我收到以下错误 错误 无法同步存储库 更新 的缓存 无法准备内部镜像列表 Curl 错误 6 无法解析主机名 无法解析主机 mirrors fed
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • 如何与 QEMU 映像共享主机的本地主机?

    想知道这样的事情是否可能 我有一个服务器在监听localhost 1889我的本地 PC 和 QEMU 映像能够使用相同的端口和 IP 访问服务器 localhost 1889 确实正在寻找以下解决方案之一 用于启用此功能的 QEMU 标志
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • 找出 Linux 上的默认语言

    有没有办法从C语言中找出Linux系统的默认语言 有 POSIX API 可以实现这个功能吗 例如 我想要一个人类可读格式的字符串 即德语系统上的 German 或 Deutsch 法语系统上的 French 或 Francais 等 有类
  • 错误:命令“c++”失败,退出状态为 1

    所以我尝试按照以下说明安装 Pyv8https andrewwilkinson wordpress com 2012 01 23 integrating python and javascript with pyv8 https andre
  • 无需 root 访问权限即可安装 zsh? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有可能 以及如何 我确实需要在几台具有 ssh 访问权限 但没有 root 访问权限 的远程计算机上使用此功能 下载 zsh wget O zsh t
  • 如何重命名 .tar.gz 文件而不提取内容并在 UBUNTU 中创建新的 .tar.gz 文件?

    我有一个命令将创建一个新的 tar gz现有文件中的文件 sudo tar zcvf Existing tar gz New tar gz 该命令将创建一个新的New tar gz从现有的文件Existing tar gz file 谁能告
  • 运行此处编译的 C 程序会导致在另一台服务器上找不到 GLIBC 库错误 - 是我的错还是他们的错?

    此处编译的 C 程序在我们的 Ubuntu 服务器上运行良好 但是当其他人尝试在他们的特定 Linux 服务器上运行它时 他们会收到以下错误 myprog install lib tls libc so 6 version GLIBC 2
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 提高mysql导入速度[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 我有一个很大的数据库22GB 我曾经用过进行备份mysqldumpgzip 格式的命令 当我提取 gz 文件时 它会生成 sql文件的
  • 如何将 elf 解释器(ld-linux.so.2/ld-2.17.so)构建为静态库?

    如果我的问题不准确 我深表歉意 因为我没有太多 Linux 相关经验 我目前正在构建一个 Linux 从头开始 主要遵循 linuxfromscratch org 版本的指南 7 3 我遇到了以下问题 当我构建可执行文件时 获取一个称为 E
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam

随机推荐

  • 【C库函数】memcpy函数详解

    目录 memcpy 函数原型 参数讲解 返回值讲解 函数讲解 三个注意点 memcpy 拷贝内存块到目标空间 函数原型 void memcpy void dest const void src size t count 参数讲解 参数 de
  • 百度AI──自然语言处理使用教程

    百度AI 自然语言处理使用教程 情感倾向分析 创建自己的应用 python方式调用 安装Python SDK 创建一个 Python SDK客户端 配置AipNlp 调用接口 情感倾向分析 需要注意的几个点 完整代码 参考 创建自己的应用
  • Linux 配置 PaddleOCR环境

    配置环境 1 准备好CUDA和cudnn 安培架构GPU需配置CUDA 11 2 CUDNN 8 1 1 以下文档以安培架构GPU的为例 找到对应的版本下载CUDA https developer nvidia com cuda downl
  • 一位数组返回id和pid通过这两个参数转换为树形结构数据,和树形结构的渲染

    废话不多说直接上代码 html代码我是引用了一个jq的插件作为样式插件名字为 jOrgChart 具体内容大家可以评论到下方 div class com div class TheEditor 编辑 div div div div js代码
  • Java 实体设置指定日期格式

    import com fasterxml jackson annotation JsonFormat JsonFormat pattern yyyy MM dd HH mm ss timezone GMT 8 private Date cr
  • nginx 代理图片服务器

    location gif jpg jpeg png expires 24h root home sk ftp 指定图片存放路径 proxy store on proxy store access user rw group rw all r
  • MATLAB BP神经网络 笔记整理

    1 如何更改输出层的激活函数 传递函数 对于有两层神经网络结构 可以通过调用以下函数 net layers 1 or 2 transferFcn for the hidden net layers 3 transferFcn for the
  • C#实现遍历文件夹获取指定后缀名文件

    问题描述 项目需要 要进行某文件夹下所有shp数据的读取 解决方法 using System using System Collections Generic using System ComponentModel using System
  • Python机器学习/数据挖掘项目实战 波士顿房价预测 回归分析

    Python机器学习 数据挖掘项目实战 波士顿房价预测 回归分析 此数据源于美国某经济学杂志上 分析研究波士顿房价 Boston HousePrice 的数据集 在这个项目中 你将利用马萨诸塞州波士顿郊区的房屋信息数据训练和测试一个模型 并
  • Qt之一个类成员函数调用另一个类成员的方法

    原文 https blog csdn net qq 35721743 article details 83592415 在继承之外 在C 中一个类成员函数调用另一个类成员的方法主要有 类的组合 友元类 类的前向声明 单例模式等 下面主要讲讲
  • gym 101512 BAPC 2014 I Interesting Integers

    Problem codeforces com gym 101512 attachments vjudge net contest 186506 problem I Meaning 给出一个 正整数 n 要找尽量小的 a 和 b a lt b
  • 面向对象三大特性之一——多态详解

    目录 前言 一 多态的概念 二 多态的定义及实现 1 虚函数的概念 2 虚函数的重写 2 1概念 2 2虚函数重写的两个例外 3 多态的构成条件 4 c 11 override和final 4 1 final 4 2 override 5
  • Java(五)-Java集合(comparable,map,list

    集合 Collection集合 集合的概念 ArrayList就是一个集合 集合是Java提供的一种容器 可以用来存储多个数据 集合与数组的区别 1 数组的长度是固定的 集合的长度是可变的 2 数组中存储的是同一类型的元素 可以存储基本数据
  • C++ 和 C 使用的不同点(待定)

    1 结构体 C 中定义的结构体 不起别名的情况下使用时要添加 struct C 可以不用添加 struct 直接使用定义的结构体名称 struct Student int age char name C 不报错 C报错 Student Ge
  • JDK的监听 Spring的事件监听机制

    一 概述 使用场景 用户注册完成时 需要给该用户发送邮件 发送优惠劵等等操作 实现业务的解耦 MQ的异步 销峰 解耦 大体步骤 1 UserService 在完成自身的用户注册逻辑之后 仅仅只需要发布一个 UserRegisterEvent
  • 归一化与反归一化在Bi-LSTM多特征时序预测中应用(附实操代码)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 Bi LSTM 是什么 二 为什么要归一化和反归一化 1 归一化的好处 2 反归一化的好处 三 归一化和反归一化使用的公式 1 归一化 2 反归一化 四 实操
  • 使用Pandas处理Excel文件

    Excel工作表是非常本能和用户友好的 这使得它们非常适合操作大型数据集 即使是技术人员也不例外 如果您正在寻找学习使用Python在Excel文件中操作和自动化内容的地方 请不要再找了 你来对地方了 在本文中 您将学习如何使用Pandas
  • forkjoin及其性能分析,是否比for循环快?

    最近看了网上的某公开课 其中有讲到forkjoin框架 在这之前 我丝毫没听说过这个东西 很好奇是什么东东 于是 就顺道研究了一番 总感觉这个东西 用的地方很少 也有可能是我才疏学浅 好吧 反正问了身边一堆猿 没有一个知道的 因此 我也没有
  • 怎么把树莓派连接到电脑上(基于window10)

    我相信对于刚玩树莓派的新手来说 尤其是没有带显示屏的同学来说 四处碰壁 可能出现的原因有很多种 ssh登录不上 wifi连接不上 内存不足 很多问题 而对于更多新手来说 如何给树莓派连接网络更是关键 今天我给大家讲一下如何用树莓派连接电脑
  • Real-time Linux

    所谓实时操作系统 Real time Opearting System 是指当外接世界或数据产生时 能够接受并以足够快的速度予以处理 其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应 调度一切可利用的资源完成实时任务