Moving interrupts to threads(翻译)

翻译一篇来自lwn.net上关于kernel中断线程化的文章,比较老(08年),但还是很有学习意义。

kernel中的响应延迟主要来自于处理硬件中断,因为处理中断的过程中,其他中断被block。为此,realtime tree有一个叫做“线程化中断处理(threaded interrupt handler)”的新功能,目的在于将关闭中断的时间减小到最低,将其余的处理过程(其实就是bottom half咯)放在内核线程中。但是threaded handler能被mainline接受,并不仅仅因为减小了延迟。减少延迟是其中的一个benifit,同时还带来了其他改进。最大的改进可能就是通过简化或者避免软、硬中断之间的锁来降低复杂性。(The biggest is probably reducing complexity by simplifying or avoiding locking between the “hard” and “soft” parts of interrupt handling.)Threaded handler对kernel的可调式性(debuggability)也有很大帮助,并且可能推动从kernel中移除tasklet。基于以上及其他原因Thomas Gleixner提交了一系列patch用来实现threaded interrupt handler.

过去,中断处理由两部分组成:
1. top half(即:”hard” irq),回应硬件中断
2. bottom half(或者 “soft” irq),被top half调度以完成额外的处理
top half的执行过程中中断是disable的,所以让top half做尽量少的事情来保持系统的可响应能力显得势在必行。线程化中断处理更加减少了top half的工作量,top half由一个快速检测处理(quick check handler)组成,判断中断是否来自对应的device,如果是,它简单的回应硬件中断ack,通知kernel唤醒中断处理线程。

在realtime tree中几乎所有的驱动被转换成线程,但是Gleixner的patch中使线程化变得可选择。自动将driver转换为线程是没有必要的,Gleixner说出了它的另一个缺点:“将中断转换为线程只有在处理程序代码通过集成tasklet / softirq功能和简化锁定来利用它时才有意义”

中断通过以下接口注册线性中断处理函数:

    int request_threaded_irq(unsigned int irq, irq_handler_t handler,
                     irq_handler_t quick_check_handler,
                 unsigned long flags, const char *name, void *dev)

下面主要是介绍了request_threaded_irq接口,和现有的接口以已经不一样了,所以不再做翻译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值