[导读]改善Linux内核实时性方法的研究与实现
0 引言
由于Linux具有功能强大、源代码开放、支持多种硬件平台、模块化的设计方案以及丰富的开发工具支持等特点,在实际系统中,得到了广泛的应用。但由于其最初的设计目标为通用分时操作系统,对于实时系统而言,Linux仍然存在核心不可抢占、关中断、时钟粒度
粗糙等缺陷。为了使其应用于嵌入式系统,实时控制等领域,越来越多的厂家和研究机构热衷于改善其实时性,构建基于Linux的实时操作系统。
在Linux 2.4和以前的版本,内核是不可抢占的,也就是说,如果当前任务运行在内核态,即使当前有更紧急的任务需要运行,当前任务也不能被抢占。因此那个紧急任务必须等到当前任务执行完内核态的操作返回用户态后或当前任务因需要等待某些条件满足而主动让出CPU才能被考虑执行,这很明显严重影响抢占延迟。在Linux 2.6中,内核已经可以
抢占,因而实时性得到了加强。但是内核中仍有大量的不可抢占区域, 如由自旋锁spinlock保护的临界区,以及一些失效抢占的临界区。另一个影响Linux实时性的因素就是关中断,同步操作中使用的关中断指令增大了中断延迟,这样很多由中断驱动的实时任务得不到及时的执行,系统的实时性能得不到保障。因此提高Linux的可抢占性,改进其中断机制有利于改善内核的实时性。
本文详细阐述了这些措施的原理并基于标准Linux2.6内核加以实现,最后通过测试,验证了此改进方法的效果。
1 中断线程化
1.1 Linux中断对内核实时性的影响
中断处理是由内核执行的最敏感的任务之一,当内核正打算去做一些别的事情时,中
断随时会到来,中断当前的任务进而执行中断处理程序。因此内核的目标就是让中断尽可能快的处理完,尽其所能把更多的处理工作向后推迟。为此Linux把中断的处理分成上半部分和下半部分。上半部分立即执行,下半部分将唤醒相应的和中断处理相关的进程稍后执行。虽然这种机制使得中断处理变得更加高效和易于维护,但是对于系统如果有严重的网络负载或其他I/O负载时,中断将非常频繁,内核当前的实时任务会被不停中断,这对于Linux的实时应用来说是不可接受的。
另外,Linux为了使内核同步而采用了关中断,在内核的关中断区域,中断是被屏蔽的。即使此时有通过中断驱动的实时任务也得不到响应,增加了实时任务的中断延迟。实时化后的Linux中,自旋锁被互斥锁取代,而中断处理代码中大量运用了自旋锁,中断处理代码就有可能因为得不到锁而需要被挂到该锁的等待队列上去。但是只有可调度的进程才可这么做,如果中断处理代码仍然使用原来的自旋锁,那么互斥锁取代自旋锁改进内核实时性的努力将大打折扣。
线程化的中断管理可以有效的解决这些问题。中断线程化后,中断将作为内核线程运行而且赋予不同的实时优先级,实时任务可以有比中断线程更高的优先级,这样,实时任务就可以作为最高优先级的执行单元来运行,即使在严重负载下仍有实时性保证。另一方面中断处理线程也可以因为在内核同步中得不到锁而挂载到锁的等待队列中。很多关中断就不必真正的禁止硬件中断了,而是禁止内核进程抢占,这样就可以减小中断延迟。
1.2 设计与实现
Linux提供了kthread_create创建内核线程,该内核线程在内核空间执行,因此在调度时没有用户空间和内核空间切换,使得其运行更为高效。中断线程化要做的工作是创建中断线程以及中断的处理。中断线程是在系统初始化或者调用requestirq函数时通过kthread_create函数创建的。其过程等同于如下功能代码:
for (i = 0; i < NR_IRQS; i++) {
irq_desc_t *desc = irq_desc + i;
if (desc->action && !(desc->status & IRQ_NODELAY))
desc->thread = kthread_create();
}
对于非紧急中断,kthread_create为其创建一个内核线程,并且根据中断号为其赋予一定的静态实时优先级和设置其调度策略。中断到来后,内核并不是直接进入中断服务函数,而是通过设置调度标志告知内核,内核调度程序比较该中断线程的优先级和当前运行任务的优先级,作出调度决策。因此当前正在运行的高优先级的实时任务不会受中断的太大的影响,保证了实时任务运行的可靠性和准确性,中断线程将会其他合适的时刻被调度执行,而且Linux2.6内核的O(1)调度机制也不会因为内核线程数的增加在调度时间上额外增加调度开销。对于紧急的中断(比如时钟中断),内核保持原来的中断处理方式,而不为其创建中断线程,这样保证了紧急中断的快速响应。
2 自旋锁改互斥锁
2.1 新的自旋锁设计
为了同步不同内核控制路径对共享资源的访问,标准Linux内核提供了很多内核同步原语,其中自旋锁spinlock是一种广泛应用于可抢占内核,SMP环境下的内核同步机制。在spinlock的保持期间,内核是抢占失效的。被自旋锁保护的区域称为临界区,内核中大量使用了spinlock,存在大量的内核不可抢占的临界区,这将严重影响系统的实时性,我们使用新的实时互斥锁rt_mutex来替换spinlock,即让临界区内内核可抢占。其结构体如下:
typedef struct {
struct rt_mutex lock;
unsigned int break_lock;
} spinlock_t;
struct rt_mutex {
…
raw_spinlock_t wait_lock;
struct plist wait_list;
struct thread_info *owner;
……
}
类型raw_spinlock_t就是原来的spinlock_t。新的自旋锁还是使用spinlock_t来标记。在结构struct rt_mutex中的wait_list字段就是优先级化的等待队列。Owner字段为拥有该锁的进程的环境信息。mutex比spinlock优越的地方有这么几点:(1)当遇到一个锁住的临界区时,任务被挂起到锁的优先级等待队列wait_list中,临界区解锁时等待任务被激活。(2)内核将一个锁住的临界区和一个任务关联,当获得互斥锁时将任务的标识存入锁中。(3)临界区可以在被保护的同时不禁止抢占。(4)在被锁住的临界区中可以实现优先级继承。
2.2 实时互斥锁的操作
并不是所有内核中的自旋锁都可以转换为互斥锁的,一些底层的临界区必须是不可抢占的,所以必须由不可抢占的自旋锁保护,比如:保护硬件寄存器的锁、调度器的运行队列锁、和其它不可抢占自旋锁嵌套的锁。实时内核中,不可抢占的自旋锁与RT互斥锁共存,不可抢占的自旋锁被重命为raw_spinlock_t。spin_lock函数利用gcc的内嵌技术根据锁的类型通过预处理选择具体的锁执行函数。预处理器使用__builtin_types_compatible函数,由宏TYPE_EQUAL调用:
#define TYPE_EQUAL(lock, type) \
__builtin_types_compatible_p(typeof(lock), type *)
函数映射结构PICK_OP是允许两种锁共存的机制,PICK_OP在编译阶段将锁操作转化为合适的种类(mutex或者spinlock):
#define PICK_OP(type, optype, op, lock) \
do { \
if (TYPE_EQUAL((lock), type)) \
_raw_##optype##op((type *)(lock)); \
else if (TYPE_EQUAL(lock, spinlock_t)) \
_spin##op((spinlock_t *)(lock)); \
else __bad_spinlock_type(); \
} while (0)
#define spin_lock(lock) \
PICK_OP(raw_spinlock_t, spin, _lock, lock)
根据宏处理的结果,如果类型为spinlock_t,将运行函数_spin_lock,而如果类型为raw_spinlock_t,将运行函数_raw_spin_lock。对于实时rt_mutex获取,当前任务由于优先级高如果可以抢占该锁,则把锁的先前拥有者添加到该锁的等待队列中并且在新的锁拥有者的task_struct中标记等待该锁的所有任务;而如果不能获得锁,则把当前任务放到锁的优先级等待队列中,直到锁的拥有者释放该锁,唤醒等待队列中最高优先级的任务进入临界区。为了防止优先级反转,可以改变锁的当前拥有者的优先级为锁的等待队列中任务的最高优先级。
实时互斥锁的应用使得高优先级的任务通过抢占锁可以进入临界区,这样内核的不可抢占区的数量和范围都大大缩小,内核可抢占性有了很大的提高,充分减小了实时高优先级任务的抢占延迟。
3 改进后的内核实时性能测试
对Linux进行了实时化改造后,需要对其进行测试来确定系统是否符合实际应用的需要。实时性能测试主要包括测试内核的最大中断延迟和任务调度时间延迟两个重要的指标。
中断延迟反映的是中断信号发生到内核对中断做出响应所需要的时间,通过利用并口的7号中断,短路并口的9-10脚,其中10脚为中断引脚,9口为并口数据口的高位,往IO口0X378写8就可以引发中断,然后在中断服务程序里往0x378写0就会重新拉低中断引脚电平。用高精度示波器测量这个脉冲的宽度来测得中断延迟时间。对于赛扬650MHz,内存128M的工控平台,负载为拷贝CF卡情况下,标准Linux2.6内核最长中断延迟为240us,而改进后的实时内核最长中断延迟为16us。
采用开源软件LMbench3.0测试系统调度延迟时间。测试机器配置为:CPU ,Intel P4 2.8GHz,内存512M,负载情况为拷贝硬盘、访问网络。标准Linux2.6内核调度延迟为1038us,而改进后的内核的调度延迟为140us。
可见改进后的内核的最长中断延迟和调度延迟比标准内核要短很多,内核的实时性能有了很大的提高。
4 结束语
针对标准Linux2.6内核由于中断关闭时间过长、内核临界不可抢占区过大而多,明显存在实时性能方面的不足,提出了改进其实时性的方法,实现了实时Linux内核的中断线程化以及新的内核同步自旋锁,使其具有更短的中断延迟和调度延迟。
本文作者的创新点:在标准的Linux2.6可抢占内核上对其中断处理机制进行线程化改造,大大的减小了中断响应时间。另外对内核同步机制采用新的自旋锁使得内核可抢占性能更加优异,改进后的内核可以适用于对Linux内核实时性要求更高的场合。
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
世界上最大的两家资产管理公司贝莱德(BlackRock)和先锋(Vanguard)等金融机构已在英国一项问询中表示,它们将继续投资化石燃料,并且不认同气候变化计划要求停止新的煤炭、石油和天然气投资的观点。贝莱德是试图采取...
关键字:
CK
天然气
AN
AC
成都2022年10月19日 /美通社/ -- 近期,平安养老险积极筹备个人养老金的产品设计和系统开发工作,发展多样化的养老金融产品,推动商业养老保险、个人养老金、专属商业养老保险等产品供给。 搭养老政策东风 ...
关键字:
温度
BSP
东风
大众
广东佛山2022年10月19日 /美通社/ -- 空间是人居生活的基础单元,承载着生存与活动的最基本功能。而对于理想空间的解构意义却在物理性容器之外,体现出人们对于空间和生活深层关系的思考,同时也塑造着人与空间的新型连接...
关键字:
温度
BSP
智能化
进程
上海2022年10月19日 /美通社/ -- 10月17日晚间,安集科技披露业绩预告。今年前三季度,公司预计实现营业收入7.54亿元至8.33亿元,同比增长60.24%至77.03%;归母净利润预计为1.73亿...
关键字:
电子
安集科技
BSP
EPS
北京2022年10月19日 /美通社/ -- 10月18日,北京市经济和信息化局发布2022年度第一批北京市市级企业技术中心创建名单的通知,诺诚健华正式获得"北京市企业技术中心"认定。 北京市企业技...
关键字:
BSP
ARMA
COM
代码
北京2022年10月18日 /美通社/ -- 10月14日,国际数据公司(IDC)发布《2022Q2中国软件定义存储及超融合市场研究报告》,报告显示:2022年上半年浪潮超融合销售额同比增长59.4%,近5倍于...
关键字:
IDC
BSP
数字化
数据中心
上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都银行集团成立60周年的纪念日。趁着首都银行集团成立60周年与首都银行(中国)在华深耕经营12年的“大日子”,围绕作为外资金融机构对在华战略的构想和业...
关键字:
数字化
BSP
供应链
控制
东京2022年10月18日 /美通社/ -- NIPPON EXPRESS HOLDINGS株式会社(NIPPON EXPRESS HOLDINGS, INC.)旗下集团公司上海通运国际物流有限公司(Nipp...
关键字:
温控
精密仪器
半导体制造
BSP
广州2022年10月18日 /美通社/ -- 10月15日,第 132 届中国进出口商品交易会("广交会")于"云端"开幕。本届广交会上高新技术企业云集,展出的智能产品超过140,...
关键字:
中国智造
BSP
手机
CAN
要问机器人公司哪家强,波士顿动力绝对是其中的佼佼者。近来年该公司在机器人研发方面获得的一些成果令人印象深刻,比如其开发的机器人会后空翻,自主爬楼梯等。这不,波士顿动力又发布了其机器人组团跳男团舞的新视频,表演的机器人包括...
关键字:
机器人
BSP
工业机器人
现代汽车
南京2022年10月17日 /美通社/ -- 日前《2022第三届中国高端家电品牌G50峰会》于浙江宁波落幕,来自两百余名行业大咖、专家学者共同探讨了在形势依然严峻的当下,如何以科技创新、高端化转型等手段,帮助...
关键字:
LINK
AI
BSP
智能家电
SAIHUB CAB 025M成功获得安全试验所UL美国与加拿大认证证书 新加坡2022年10月17日 /美通社/ -- SAI.TECH Global Corporation("SAI.TECH"...
关键字:
AI
BSP
PS
清洁能源
郑州2022年10月17日 /美通社/ -- 近日,《福布斯》发布了"2022年全球最佳雇主榜单"(The World's Best Employers 2022),中国平安再度上榜并排名全...
关键字:
福布斯
ST
TI
BSP
通过第二项3nm设计选用扩展技术领先地位 第三季度强劲的贸易和设计选用反映出我们结合了IP和定制硅的混合业务模式 自2022年9月1日起,OpenFive首次并入集团 尽管宏观环境困难,但管理层仍对业务...
关键字:
BSP
ALPHA
PEN
Silicon
(全球TMT2022年10月17日讯)日前,德勤中国旗下德勤管理咨询中国数据科学卓越中心所出品的"机器学习推荐算法"论文被第十三届IEEE 知识图谱国际会议(简称"ICKG")收录。ICKG是知识图谱研究领域的国际权威...
关键字:
机器学习
IC
CK
MULTI
欧洲药品管理局人用药品管理委员会 (CHMP) 的积极建议是基于 EFFISAYIL® 1 研究结果,该研究是针对泛发性脓疱型银屑病 (GPP) 发作患者的最大的临床研究[1] 与斑块状银屑病不同,GP...
关键字:
HM
BSP
GP
FOR
流体动压滑动轴承为风机发展书写崭新篇章 轴承滑动层增材制造与精加工为工业级大规模生产铺平道路 轴承设计从综合性系统理念出发 德国施韦因富特和汉堡2022年10月17日 /美通社/ -- 舍弗勒推出了采...
关键字:
齿轮箱
滑动轴承
风力涡轮机
BSP
上海2022年10月17日 /美通社/ -- Brother内置墨仓彩色喷墨一体机DCP-C421W新上市。此次Brother创新引入"按需打印,按页付费"...
关键字:
DC
打印机
BSP
DESIGN
上海2022年10月17日 /美通社/ -- 日前,德勤中国迎来喜讯:旗下德勤管理咨询中国数据科学卓越中心所出品的"机器学习推荐算法"论文被第十三届IEEE 知识图谱国际会议(以下简称"IC...
关键字:
机器学习
IC
CK
FM
慕尼黑2022年10月17日 /美通社/ -- TUV南德意志集团(以下简称"TUV南德")在EcoVadis全球企业社会责任评级中以总分71分荣获金奖。...
关键字:
OV
ADIS
BSP
COM