【原创】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)
版权声明:本文为本文为博主原创文章,转载请注明出处。如有问题,欢迎指正。博客地址:https://www.cnblogs.com/wsg1100/
1. Ubuntu Pro简介
Ubuntu Pro 订阅(以前称为 “Ubuntu Advantage”)是 Canonical 推出的一项扩展性的安全维护和合规性订阅计划,2022 年 10 月首次发布 Beta 版本,最初是为提供全球服务的大型企业客户而设计的,为他们额外提供 5 年的 Ubuntu LTS 版本的扩展安全维护更新,因为这类客户通常希望他们的基础设施和应用程序具有更加长期的稳定性。
最多可在 5 台设备上为个人和小规模商业用途免费订阅,Ubuntu Pro 仅适用于 Ubuntu LTS(长期支持)版本,从 Ubuntu 16.04 开始,并承诺 10 年的安全更新,以及访问专有工具。
Ubuntu Pro 订阅承诺在不到 24 小时内为关键的 CVE 打补丁,并将可选的技术支持扩展到主操作系统之外的额外 23000 个开源包和工具链,而不仅仅是 Ubuntu 的主软件存储库。
因此与标准的 Ubuntu 相比,Ubuntu Pro 是一个更全面的产品,除了为关键的、高度的和中度的常见漏洞提供扩展的安全更新,它还会将安全覆盖范围扩大到成千上万的应用程序和工具链,其中包括 Ansible、Apache Tomcat、Apache Zookeeper、Docker、Drupal、Nagios、Node.js、phpMyAdmin、Puppet、PowerDNS、Python 2、Redis、Rust、WordPress、ROS等等。
Ubuntu Pro 还使用户可以访问 FIPS 140-2 认证的加密包、在受监管和审计的环境中进行合规性管理的工具、对无重启内核更新的 Livepatch 支持,以及系统管理和使用 Landscape 的大规模自动修补。
Canonical 表示,如果超过五台 PC 需要 Ubuntu Pro 订阅,则必须购买付费计划,目前工作站的价格为每年 25 美元,服务器的价格为每年 500 美元,并提供 30 天免费试用。官方 Ubuntu 社区成员可以获得最多 50 台设备的免费支持。
更多关于ubuntu pro介绍详见官网https://ubuntu.com/pro
2. Real-time Ubuntu
以上是Ubuntu Pro 的一些介绍,不是我们的重点。
“2023 年 2 月 14 日,伦敦,Canonical 宣布实时 Ubuntu 22.04 LTS 正式发布,实时 Ubuntu 提供对外部事件的确定性响应,旨在最大限度地减少指定期限内的响应时间保证。新的企业级实时内核非常适合严格的低延迟要求。工业、电信、汽车、航空航天和国防以及公共部门和零售业的企业现在可以在开源操作系统 (OS) 上运行其要求最苛刻的工作负载并开发各种时间敏感型应用程序。”
”基于 Linux 内核的 5.15 版本,Ubuntu 22.04 LTS 集成了 x86 和 Arm 架构的树外PREEMPT_RT补丁。PREEMPT_RT补丁集可减少最严格工作负载所需的内核延迟,有助于确保时间可预测的任务执行。满足严格的确定性要求和上限执行时间,具有PREEMPT_RT的 Ubuntu 使内核比主线 Linux 更具抢占性。“
这是ubuntu首次官方支持PRRMPT-RT,要知道,以往都是要开发者自己构建,实时性暂且不谈,可靠性、稳定性完全没有保障,这下有ubuntu在背后支持,可靠性、稳定性有保障,安装玩一玩。
3. 订阅Ubuntu Pro
实时ubuntu 基于Ubuntu 22.04 LTS,且只有Ubuntu Pro提供该服务,没有Ubuntu Pro服务是无法直接通过apt-get install
安装的实时内核的。
3.1 安装Ubuntu 22.04 LTS
先安装Ubuntu 22.04 LTS版本,X64桌面版安装镜像下载地址:https://cn.ubuntu.com/download/desktop
3.2 注册并订阅个人服务
将 Ubuntu Pro 订阅添加到 Ubuntu LTS 设备,用户需要免费的 Ubuntu One 帐户,到Ubuntu Pro注册一个Ubuntu 账号,https://ubuntu.com/pro,并订阅个人服务,最多可在 5 台设备上为个人和小规模商业用途免费订阅。
在Ubuntu One 帐户中访问 Ubuntu Pro 令牌。
3.3 绑定设备
方式一,对于刚安装好的Ubuntu 22.04 LTS,第一次启动时在导航窗口可以输入token直接激活ubuntu prp服务,或者在在 Livepatch 选项卡中软件和更新实用程序中启用(其中 TOKEN 必须替换为用户的 Ubuntu Pro token)。
方式二,命令行启用,打开终端执行激活ubunutu pro服务
sudo pro attach 你的token
4. 安装 realtime Linux kernel
激活ubunutu pro服务后,默认还是普通Linux内核,如果要使用实时ubuntu,通过pro
命令启用:
wsg1100@wsg1100-virtual-machine:~$ sudo pro enable
cc-eal esm-infra fips-updates realtime-kernel ros-updates
esm-apps fips livepatch ros usg
wsg1100@wsg1100-virtual-machine:~$ sudo pro enable realtime-kernel
启用完成后,安装:
sudo apt-get install linux-realtime
重启,重启时grub中选中realtime kernel。检查当前内核版本:
5. Ubuntu Pro realtime kernel 简单测试
测试机器硬件配置如下(未启用超线程):
忽略图中的'virtual-machine',实在不想在物理机上装系统,麻烦,先在虚拟机上安装好后,插到物理机上跑的,所以请忽略。
使用stress
加点压力,开始测试:
运行一小时多,结果如下(us):
注:中途stress被我不注意停了,所以没有全程加压
T: 0( 3466)P:99 I:1000 C:4105948 Min: 2 Act: 2 Avg: 3 Max: 246
T: 1( 3467)P:99 I:1500 C:2737299 Min: 2 Act: 2 Avg: 3 Max: 241
T: 2( 3468) P:99 I:2000 C:2052974 Min: 2 Act: 2 Avg: 3 Max: 237
T: 3 ( 3469) P:99 I:2500 C:1642379 Min: 2 Act: 2 Avg: 3 Max: 245
这是安装后直接测试的结果,未经任何配置,不同的工工况下对调度、中断、外设实时性要求不同,影响因素也不同。这里的测试也只是cyclitest
周期定时调度层面的实时性,定时调度只是最基本的应用场景,所以仅供参考。
6. 获取ubuntu官方实时内核源码
实时ubuntu有ubuntu在背后支持,可靠性、稳定性有保障,一般情况下,如果只开发一些与实时无关的外设驱动模块,不需要内核源码,完成以上步骤即可。
但大多工业设备、电信、汽车使用场景,或多或少都需要实时外设,这个时候基本都需要修改PREEMPT-RT源码,比如使用实时外设需要调整外设中断线程优先级、使用网络优化实时网络包路径等等,这时候我们就需要修改内核源码,那如何获取ubuntu官方实时内核源码呢?
在/etc/apt/sources.list.d/ubuntu-realtime-kernel.list
中启用源代码存储库。
deb [arch=amd64] https://esm.ubuntu.com/realtime/ubuntu jammy main
deb-src https://esm.ubuntu.com/realtime/ubuntu jammy main
通过apt
获取源代码:
wsg1100@wsg1100-virtual-machine:~$ apt source --only-source linux-realtime
正在读取软件包列表... 完成
提示:linux-realtime 的打包工作被维护于以下位置的 Git 版本控制系统中:
git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy
请使用:
git clone git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/jammy
获得该软件包的最近更新(可能尚未正式发布)。
需要下载 206 MB 的源代码包。
获取:1 https://esm.ubuntu.com/realtime/ubuntu jammy/main linux-realtime 5.15.0-1034.37 (tar) [195 MB]
22% [1 linux-realtime 55.5 MB/195 MB 28%] 1,690 kB/s 1分 29秒
获取后自动解压到本地目录下linux-realtime-5.15.0
。
我们还可以从ubuntu仓库clone:
git clone https://git.launchpad.net/~git-ubuntu-import/ubuntu/+source/linux-meta-realtime
附
如果你想在没有启用ubunutu pro的机器上也安装上实时内核,该如何做?
方式一,apt-get install
安装的debian包会缓存在目录下/var/cache/apt/archives/
,也可以直接拷出到其他机器上安装。
wsg1100@wsg1100-virtual-machine:~$ ls /var/cache/apt/archives/linux-*realtime*
/var/cache/apt/archives/linux-headers-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
/var/cache/apt/archives/linux-headers-realtime_5.15.0.1034.33_amd64.deb
/var/cache/apt/archives/linux-image-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
/var/cache/apt/archives/linux-image-realtime_5.15.0.1034.33_amd64.deb
/var/cache/apt/archives/linux-modules-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
/var/cache/apt/archives/linux-modules-extra-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
/var/cache/apt/archives/linux-realtime_5.15.0.1034.33_amd64.deb
/var/cache/apt/archives/linux-realtime-headers-5.15.0-1034_5.15.0-1034.37_all.deb
方式二,我们可以从已安装的ubuntu中,重新打包出安装包,然后安装到其他机器上,命令如下:
#查看当前安装列表
$ dpkg -l | grep realtime
ii linux-headers-5.15.0-1034-realtime 5.15.0-1034.37 amd64 Linux kernel headers for version 5.15.0 on 64 bit x86 SMP
ii linux-headers-realtime 5.15.0.1034.33 amd64 Linux kernel headers for real-time systems.
ii linux-image-5.15.0-1034-realtime 5.15.0-1034.37 amd64 Signed kernel image realtime
ii linux-modules-5.15.0-1034-realtime 5.15.0-1034.37 amd64 Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP
ii linux-modules-extra-5.15.0-1034-realtime 5.15.0-1034.37 amd64 Linux kernel extra modules for version 5.15.0 on 64 bit x86 SMP
ii linux-realtime-headers-5.15.0-1034 5.15.0-1034.37 all Header files related to Linux kernel version 5.15.0
#从已安装系统重重新打包deb
$sudo dpkg-repack linux-modules-extra-5.15.0-1034-realtime linux-modules-5.15.0-1034-realtime linux-headers-5.15.0-1034-realtime
生成后在当前目录下,直接拷出到其他机器上安装:
$ ls *deb
linux-headers-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb linux-modules-extra-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
linux-modules-5.15.0-1034-realtime_5.15.0-1034.37_amd64.deb
方式三,基于上面的源码重新编译构建,详见本博客其他文章。
到此本文水完了,本文中我是一个装系统的ε=(′ο`*)))。更多关于实时性和xenomai原理见本博客其他文章,更多PREEMPT-RT的原理和填坑敬请关注本博客。