正文
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 补丁不再强制修改锁为无法抢占。