skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
阅读:1676回复:12

请教高手:关于提高驱动的性能(50分)

楼主#
更多 发布于:2003-03-31 19:49
有两个问题想请教一下,都是实际的问题
1。想知道在IM,我在protocolReceivePacket中得到了一个包,是下层用NdisMIndicatePacket向上指示的完整包。当这个包被我接收后,当我还没有向上传送这个包时,下层还会不会继续传新的整包呢?
2。如果我要对整包做一些耗时的操作,于是很自然的,我把得到的包挂在我自己的链表中,以便进行耗时的处理,我应该在什么时候对这个链表进行操作呢?
比如:我如果调用protocolReceive将包全部入链,然后就在protocolReceiveComplete中去把各个包出链进行处理,而陆如果我在protocolReceivePacket中入链,那么应该在什么时候进行出链的操作呢?
显然,我希望系统能够有这样一个入口,否则我只能通过定时器来进行集中操作。希望问一下各位大侠的意见
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-31 20:40
receivepacket也有complete,或者你可以放入链表以后自己调用一下complete。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-31 20:42
passthru是可以重入的。不过你不用特殊处理,就按照你的过程处理就行了。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-31 23:20
有两个问题想请教一下,都是实际的问题
1。想知道在IM,我在protocolReceivePacket中得到了一个包,是下层用NdisMIndicatePacket向上指示的完整包。当这个包被我接收后,当我还没有向上传送这个包时,下层还会不会继续传新的整包呢?
2。如果我要对整包做一些耗时的操作,于是很自然的,我把得到的包挂在我自己的链表中,以便进行耗时的处理,我应该在什么时候对这个链表进行操作呢?
比如:我如果调用protocolReceive将包全部入链,然后就在protocolReceiveComplete中去把各个包出链进行处理,而陆如果我在protocolReceivePacket中入链,那么应该在什么时候进行出链的操作呢?
显然,我希望系统能够有这样一个入口,否则我只能通过定时器来进行集中操作。希望问一下各位大侠的意见


1.只要下层的资源不紧张。

2.好象有个returnpacket什么吧
[color=red]大头鬼! :P[/color]
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-04-01 14:17
mike,你是什么意思呢?我看到NDIS好象没有protocolReceive的complete吧?不知道你所说的是那种?可以把函数告诉我吗?至于NdisReturnPacket,是说的你要将包的控制权返回到Miniport的时候的调用,这个对于这里不在讨论范围内。
还有,passthru的确可以重入,但这跟我们所说的事情是不同的呀?如果有protocolReceivePaceketComplete,那就没有问题了
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-04-01 15:58
重入是针对第一个问题的。既然可以重入,就是说在你还没有处理完一个packet的时候底层可能会发送下一个packet。
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-04-01 19:02
这个我已经知道了,是看了一个网卡的驱动就知道了,那么你所说的那个所谓可以Complete的函数呢?我今天下午看了很就的NDIS都没有找到?
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-04-01 19:02
为提高大家的兴趣,决定再加50分
ljx197926
驱动牛犊
驱动牛犊
  • 注册日期2002-12-17
  • 最后登录2004-02-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-04-04 12:45
有两个问题想请教一下,都是实际的问题
****---------
1。想知道在IM,我在protocolReceivePacket中得到了一个包,是下层用NdisMIndicatePacket向上指示的完整包。当这个包被我接收后,当我还没有向上传送这个包时,下层还会不会继续传新的整包呢?
2。如果我要对整包做一些耗时的操作,于是很自然的,我把得到的包挂在我自己的链表中,以便进行耗时的处理,我应该在什么时候对这个链表进行操作呢?
比如:我如果调用protocolReceive将包全部入链,然后就在protocolReceiveComplete中去把各个包出链进行处理,而陆如果我在protocolReceivePacket中入链,那么应该在什么时候进行出链的操作呢?
显然,我希望系统能够有这样一个入口,否则我只能通过定时器来进行集中操作。希望问一下各位大侠的意见

第一个问题:
  当你还没有向上层通知接收时,下层还是继续向包池发送包,直到池满.

第二个:
   建议做用信事号机制,在ptReceive or PtTransferdataComplete or PtReceivePacket等函数中收到包就将数据插入到链表中然后通知你要处理的线程处理此链表
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-04-09 16:17
好久都上不了网,现在才看到这个回贴,我想第一个问题已经很清楚了,其实只要看一下网卡的驱动都是可以的。
用信号倒是个不错的方式,但是,我决定做单包处理了,很简单,而且方便,不需要维持队列了。
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-04-09 16:25
这几天有几个很麻烦的问题,一直困饶,请教各位高手。
我的驱动是按照IM的思想自己写的,现在有个问题,在上层使用OID进行查询的时候,第一个OID的LOLKHEAD的最大值,我查到这个request是没有问题的,但当ProtocolRequestComplete完成的时候,驱动程序不知道为什么直接去调用了我的MiniportHalt,我找了很久都没有发现原因,望大家帮忙啊
gjpland
驱动小牛
驱动小牛
  • 注册日期2001-09-13
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-04-09 19:25
这几天有几个很麻烦的问题,一直困饶,请教各位高手。
我的驱动是按照IM的思想自己写的,现在有个问题,在上层使用OID进行查询的时候,第一个OID的LOLKHEAD的最大值,我查到这个request是没有问题的,但当ProtocolRequestComplete完成的时候,驱动程序不知道为什么直接去调用了我的MiniportHalt,我找了很久都没有发现原因,望大家帮忙啊

什么样的REQUEST,
初始化时是有可能的。
我思故我在,脑袋不会坏.
skylgl
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分71分
  • 威望9点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-04-09 22:19
感谢斑竹回答,我在上面已经说了,在IM中上层的驱动会去查询LOOKHEAD的最大值,就是这个查询完成(即ProtocolRequestComplete完成后),就自动到了MiniportHalt,对照Passthru,这个过程是不正确的,我不知道原因是什么?问题出在什么地方
游客

返回顶部