阅读:1760回复:8
急:如何提高驱动程序的运行效率,处理大数据量??
最近开发一网络设备的驱动,该设备在收到数据时会产生中断,进入中断处理函数,我现在
的做法是:在中断处理函数中先判断中断类型,如果是接收数据中断来了,再去调用数据接收 函数,接收完后再返回中断处理函数,这方法在数据量小,发送慢时还可以,但数据量一大,中断 队列立即就满了,来不及处理数据就死机了! 请教大家:有什么好的方法可以提高效率?请多提建议!! 是否可以使用内核线程?? 谢谢!! |
|
沙发#
发布于:2004-10-15 15:41
1、可以考虑在中断服务程序中不处理数据的接收,而是触发一个任务,在这个任务中进行数据的接收。
2、可以考虑多个事件才触发一次中断,当然要看你的处理器是否支持了。 3、还有就是加大中断队列的长度。 |
|
|
板凳#
发布于:2004-10-15 17:05
使用botton half是一个解决的方案,但是linux的中断处理的方式决定了其额外负担很高,你可能还会有更糟糕的情况,就是包很小但是数据量很大的情况,多数使用linux作为router上的os的厂商都会对linux做实时化的修改,很难。
|
|
地板#
发布于:2004-10-16 08:42
谢谢大家,谢谢大家.
|
|
地下室#
发布于:2004-10-16 09:12
谢谢fwzfwz1和shownxu
to fwzfwz1: 您所说的"触发一个任务"是不是shownxu所说的bottom half的解决 方法,就是用queue_task这类的函数向系统增加一个任务?? 我对linux系统认识还很少,还想请教一下,系统在执行一个task时, 中断服务程序是不是也在执行,就象两个线程一样? 再次谢谢大家的帮助!!! |
|
5楼#
发布于:2004-10-16 17:08
谢谢fwzfwz1和shownxu 你的问题,我只能回答一半:因为linux我也不太熟。 起一个任务的来处理你的数据接收,这样可以避免中断执行的时间太长。如果中断执行时间太长的话,系统可能会死掉。 当一个任务执行时,如果中断到来的话,中断会打断任务。当中断服务程序执行完之后,任务接着执行。 |
|
|
6楼#
发布于:2004-10-18 08:54
谢谢fwzfwz1
先给分,有问题再麻烦大家! |
|
7楼#
发布于:2004-10-18 11:44
task既是一个软中断,在x86就是int 80,硬件中断可以打断task,e而task又可以打断一般的process
|
|
8楼#
发布于:2004-10-21 10:36
谢谢shownxu !!
|
|