OpenEuler切換內核的方法-bcc學習後續

OpenEuler切換內核的方法


摘要

昨天使用OpenEuler 22.03 LTS學習bcc但是一直不行. 
沒辦法切換到CentOS8 還有 Anolis 8 很容易就可以直接還是用了
yum install -y bcc kernel-devel
然後直接進入
cd /usr/share/bcc/tools 下面就可以使用命令了
但是OpenEuler死活不行.
研究了很久都沒結果. 
晚上突然發現OpenEuler裏面的內核帶一個RT的字樣, 所以進行了一些新的學習和總結

OpenEuler的新特性

注意 rt內核的一些測試結論:
Preempt_RT 補丁可以有效提高系統實時性,
且在多種負載場景下,實時性表現較爲穩定。

Preempt_RT 補丁對本地通訊吞吐率有一定影響,
主要提現爲管道讀寫、文件拷貝,對系統調用延遲影響大多在 2 微秒以內。

一個測試結果的地址爲:
https://www.modb.pro/db/392580

更換回非rt內核

grep menuentry /boot/grub2/grub.cfg
看到會有多個內核:
menuentry 'openEuler (5.10.0-60.18.0.50.oe2203.x86_64) 22.03 LTS'
menuentry 'openEuler (5.10.0-60.18.0.rt62.52.oe2203.x86_64) 22.03 LTS'

修改內核:
grub2-set-default "openEuler (5.10.0-60.18.0.50.oe2203.x86_64) 22.03 LTS"
查看確認修改效果:
grub2-editenv list
重啓服務器:
reboot

重啓後再次驗證內核信息:
看到內核的提示信息:
Welcome to 5.10.0-60.18.0.rt62.52.oe2203.x86_64
變成了:
Welcome to 5.10.0-60.18.0.50.oe2203.x86_64

另外一種修改方式:

sudo vi /etc/default/grub
修改爲 0 或者是 1 
GRUB_DEFAULT=saved
然後執行命令:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
重啓就會修改內核

bcc 驗證

注意 需要根據 uname -r 查詢出來的內核進行安裝纔可以
uname -r 然後修該devel- 後面的版本信息
yum install kernel-devel-5.10.0-60.18.0.50.oe2203.x86_64 -y
注意如果之前因爲 使用rt內核已經安裝了其他版本的devel 需要先清理掉
yum remove kernel-devel -y
在執行安裝. 

其實 openEuler22.03默認帶了bcc工具鏈,不用這麼複雜的來處理. 

部分實時內核學習資料

什麼是實時系統
實時系統的典型定義如下:“所謂實時系統,就是系統中計算結果的正確性不僅取決於計算邏輯的正確性,還取決於產生結果的時間。
如果完成時間不符合要求,則可以認爲系統發生了問題。”也就是說,不管實時應用程序執行的是何種任務,
它不僅需要正確執行該任務而且必須及時完成。當前,Preempt_RT 維護者 Thomas Gleixner 給出的“實時”含義是:它和指定的一樣快。

Linux 作爲一種通用操作系統,隨着時間的推移,在功能和時序行爲方面一直在發展,
以便適合許多其他更具挑戰性的場景;尤其是實時系統對 Linux 的實時性改造一直從未停止過。

對 Linux 進行實時性改造,通常可從兩個大的方向來着手。一個方向是從 Linux 內核內部開始,直接修改其內核源代碼,
其典型代表是 Preempt_RT 實時補丁;另一個方向則是從 Linux 內核的外圍開始,實現一個與 Linux 內核共存的實時內核,
即採用雙內核方法,其典型實現爲 RTAI/Linux,即現在的 Xenomai。

因爲 Xenomai 實時內核與 Linux 內核共存,Xenomai 實時內核小而精巧,能夠很好地控制其中的代碼質量。
Xenomai 實時內核完成了基本的硬件抽象層、任務調度管理和進程間通信管理模塊等,能夠滿足一些硬實時系統的需求。
然而,其上的實時應用通常分爲實時和非實時兩部分來完成 ,實時部分必須使用 Xenomai 提供的特有的 API;
非實時部分則可以使用 Linux 提供的系統調用。與 Preempt_RT 實時編程相比,Xenomai 編程實現更爲困難,軟件移植難度更大。

與雙內核機制方案相比,Preempt_RT 實時補丁最大的優勢在於它遵循 POSIX 標準,
使用該補丁的實時系統應用程序和驅動程序與非實時系統的應用和驅動程序差異很小。
因此,在使用該補丁的平臺上做相應的開發比雙內核機制的方案更容易。另外,該補丁與硬件平臺相關性小,可移植性高。
由於 Linux 內核過於龐大,有着較多關中斷、關搶佔代碼,加上覆雜的內存管理、調度器代碼邏輯等衆多不確定性因素,
使得 Preempt_RT 雖然具有較好的軟實時性,但在硬實時性方面有所欠缺。

什麼是 Preempt_RT
Preempt_RT 補丁開發始於 2005 年。之後由德國 OSADL 組織贊助,Ingo Molnar、Thomas Gleixner 和 Steven Rostedt 三人共同發起,
旨在將 Linux 內核的最大線程切換延遲從無限制的毫秒數降低到數十微秒的有界值。
2016 年以後成爲 Linux 基金會下屬合作項目。目前 Preempt_RT 的贊助者來自:
 ARM、BMW、CIP、ELISA、Intel、National Instruments、OSADL、RedHat 和 Texas Instruments 等。
 經過 Preempt_RT 和 Linux 內核工程師在搶佔、實時性方面的努力,Linux 內核的搶佔延遲降低了幾個數量級,
 使其能夠與商業實時操作系統競爭。業界知名的 MontaVista Linux、WindRiver Linux、TimeSys Linux 都有 RT 補丁的身影。
 像 RTJVM、RTKVM、RTDocker、RTAndroid 等曾經出現過的 Preempt_RT 衍生用例,響應速度都有着不同程度的提升。

多年來,該補丁的許多部分已被納入主線 Linux,包括高分辨率計時器(2.6.16)、優先級繼承(2.6.18)、可搶佔的 RCU(2.6.25)、
內核互斥量和線程中斷處理程序(2.6.30)、完全 Tickless 機制(3.10)、DL 調度器(EDF 調度算法)(3.14)、實時搶佔鎖(5.15)。
然而,該補丁的核心部分仍然在主線之外。從近幾年的 Preempt_RT 補丁來看,當前的主要工作不是開發新功能,而是專注於增量式引入主線和特定架構的支持。

當前 openEuler 22.03 LTS 主線內核版本爲 Linux Kernel 5.10,有 180 把鎖無法搶佔,其中 8 把鎖在 RT 補丁中強制修改成無法搶佔。
在最新的 5.17 內核中,Preempt_RT 補丁大小爲 265KB,有 189 把鎖仍然無法搶佔,RT 補丁不再強制修改鎖爲無法搶佔。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章