linux 内核实时性,改善Linux内核实时性方法的研究与实现

#define TYPE_EQUAL(lock, type)本文引用地址:http://www.eepw.com.cn/article/261723.htm

__builtin_types_compatible_p(typeof(lock), type *)

函数映射结构PICK_OP是允许两种锁共存的机制,PICK_OP在编译阶段将锁操作转化为合适的种类(mutex或者spinlock):

5f239ad4b1cfd07f6d257e3b7fd75e59.png

根据宏处理的结果,如果类型为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内核实时性要求更高的场合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值