急:如何提高驱动程序的运行效率,处理大数据量??

worldcup 2004-10-15 02:17:50
最近开发一网络设备的驱动,该设备在收到数据时会产生中断,进入中断处理函数,我现在
的做法是:在中断处理函数中先判断中断类型,如果是接收数据中断来了,再去调用数据接收
函数,接收完后再返回中断处理函数,这方法在数据量小,发送慢时还可以,但数据量一大,中断
队列立即就满了,来不及处理数据就死机了!


请教大家:有什么好的方法可以提高效率?请多提建议!!
是否可以使用内核线程??
谢谢!!
...全文
112 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldcup 2004-10-22
  • 打赏
  • 举报
回复
哥们,有帮助,谢了,给分!
qinzheng 2004-10-21
  • 打赏
  • 举报
回复
兄弟,要是我说的对你有帮助,而别人又不怎么说,那么请你把分给我 ^^

在中断程序里处理大量数据是不合理的,因为中断程序应该马上返回,在中断期间,中断程序是不接受任务调度的,也就是说,在那个时候,系统不是多任务的,所以你死机了.....
在linux中,中断处理被分成两个部分,就是上半部和底半部,上半部用来处理中断,之后马上启动底半部,把大量任务交给底半部,就可以避免长时间不能任务调度.
底半部程序的做法你自己去查好了.一句两句也说不清.<<linux内核驱动程序>>,魏永明先生译的那个很不错,你可以看看.

或者你吧读取的任务放到用户空间来也行,在你的设备驱动中实现poll,然后在用户空间用while(0){
select()
}
的形式,就象socket一样,驱动并不读取数据,只是唤醒select,然后应用程序去读,应该也可以.

沙沙的吹 2004-10-17
  • 打赏
  • 举报
回复
为什么不用DMA呢?
在内核态已经是全速运行了,又没东西和你抢CPU时间,不可能更高速了,只有DMA可以稍微好点
对了,如果事情都在内核做,尽量隔一段时间释放一下CPU,不然感觉机器就是死了
changlin365 2004-10-16
  • 打赏
  • 举报
回复
up

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧