worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1760回复:8

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

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


请教大家:有什么好的方法可以提高效率?请多提建议!!
是否可以使用内核线程??
谢谢!!
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-10-15 15:41
1、可以考虑在中断服务程序中不处理数据的接收,而是触发一个任务,在这个任务中进行数据的接收。
2、可以考虑多个事件才触发一次中断,当然要看你的处理器是否支持了。
3、还有就是加大中断队列的长度。
有了驱动,人才有了力量。
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-10-15 17:05
使用botton half是一个解决的方案,但是linux的中断处理的方式决定了其额外负担很高,你可能还会有更糟糕的情况,就是包很小但是数据量很大的情况,多数使用linux作为router上的os的厂商都会对linux做实时化的修改,很难。
worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-10-16 08:42
谢谢大家,谢谢大家.
worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-10-16 09:12
谢谢fwzfwz1和shownxu

to fwzfwz1:
您所说的"触发一个任务"是不是shownxu所说的bottom half的解决
方法,就是用queue_task这类的函数向系统增加一个任务??

我对linux系统认识还很少,还想请教一下,系统在执行一个task时,
中断服务程序是不是也在执行,就象两个线程一样?
再次谢谢大家的帮助!!!
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-10-16 17:08
谢谢fwzfwz1和shownxu

to fwzfwz1:
您所说的"触发一个任务"是不是shownxu所说的bottom half的解决
方法,就是用queue_task这类的函数向系统增加一个任务??

我对linux系统认识还很少,还想请教一下,系统在执行一个task时,
中断服务程序是不是也在执行,就象两个线程一样?
再次谢谢大家的帮助!!!
 

你的问题,我只能回答一半:因为linux我也不太熟。
起一个任务的来处理你的数据接收,这样可以避免中断执行的时间太长。如果中断执行时间太长的话,系统可能会死掉。
当一个任务执行时,如果中断到来的话,中断会打断任务。当中断服务程序执行完之后,任务接着执行。
有了驱动,人才有了力量。
worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-10-18 08:54
谢谢fwzfwz1
先给分,有问题再麻烦大家!
shownxu
驱动小牛
驱动小牛
  • 注册日期2002-02-05
  • 最后登录2008-04-25
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-10-18 11:44
task既是一个软中断,在x86就是int 80,硬件中断可以打断task,e而task又可以打断一般的process
worldcup
驱动小牛
驱动小牛
  • 注册日期2004-08-19
  • 最后登录2006-10-19
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-10-21 10:36
谢谢shownxu !!
 
游客

返回顶部