【原創】Ubuntu Pro 中的RealTime linux(Real-time Ubuntu/PREEMPT-RT/ubuntu官方PREEMPT-RT)

沐多發表於2023-04-01

版權宣告:本文為本文為博主原創文章,轉載請註明出處。如有問題,歡迎指正。部落格地址: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 整合了 x86Arm 架構的樹外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
One moment, checking your subscription first
Real-time kernel cannot be enabled with Livepatch.
Disable Livepatch and proceed to enable Real-time kernel? (y/N) y
Disabling incompatible service: Livepatch
The Real-time kernel is an Ubuntu kernel with PREEMPT_RT patches integrated.

This will change your kernel. To revert to your original kernel, you will need
to make the change manually.

Do you want to continue? [ default = Yes ]: (Y/n)
Updating package lists
Installing Real-time kernel packages
Real-time kernel enabled
A reboot is required to complete install.

[info] A new version is available: 27.13.6~22.04.1
Please run:
    sudo apt-get install ubuntu-advantage-tools
to get the latest version with new features and bug fixes.
sudo apt-get install ubuntu-advantage-tools

啟用完成後,安裝:

 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的原理和填坑敬請關注本部落格。

相關文章