aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2293回复:19

中间层抓包性能问题

楼主#
更多 发布于:2004-04-13 11:31
我在中间层prreceivepacket中把包中的数据放到一个UChar的buffer中然后用Event通知应用程序,应用程序将buffer内容拷贝到应用程序,但通过和其他产品比较发现丢包率很高,有20%,哪位大侠能说说是什么原因怎么改进
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-16 07:28
[quote][quote]事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程,核心在处理事件对象时,是通过系统队列来完成的,不知我的理解对不对?


你说的EVENT是通过队列来完成的?????如果是队列的话。。。也不应该会掉包~~~~而是相应的慢一点到达而已。。。。不知道我的说法对不对~~~呵呵。。。
事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程??为什么这个过程会费时呢???是不是因为你说的队列的关系呢??? [/quote]
buffer是在驱动中的等EVENT事件到达时buffer的内容已经被重写所以会丢 [/quote]

不是吧。。。。。好象根本就是EVENT根本就响应不过来。。。。我曾经测试过。。。不进行BUF COPY。。。而是直接采用EVENT来通知一下。。。。根本EVENT就响应不过来。。。。
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-15 13:48
[quote]事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程,核心在处理事件对象时,是通过系统队列来完成的,不知我的理解对不对?


你说的EVENT是通过队列来完成的?????如果是队列的话。。。也不应该会掉包~~~~而是相应的慢一点到达而已。。。。不知道我的说法对不对~~~呵呵。。。
事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程??为什么这个过程会费时呢???是不是因为你说的队列的关系呢??? [/quote]
buffer是在驱动中的等EVENT事件到达时buffer的内容已经被重写所以会丢
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-04-15 00:27
事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程,核心在处理事件对象时,是通过系统队列来完成的,不知我的理解对不对?


你说的EVENT是通过队列来完成的?????如果是队列的话。。。也不应该会掉包~~~~而是相应的慢一点到达而已。。。。不知道我的说法对不对~~~呵呵。。。
事件机制需要应用层和操作系统核心及驱动之间的交互,这是个费时的过程??为什么这个过程会费时呢???是不是因为你说的队列的关系呢???
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-14 19:52
用户被禁言,该主题自动屏蔽!
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-14 19:23
有没有分呀???
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-14 19:22
慢也不会掉包。


首先要声明。。。并不是掉包。。。而是EVENT响应不及时。。。。具体为什么会这样。。我也不是太清楚。。。请有关的高手做出相应的解答。。。。。
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-14 16:26
老大确实是因为Event响应不及而造成丢包的,我改为每收到8个才通知一次然后一次读出就基本上解决了这个问题
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-14 16:18
慢也不会掉包。
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-14 15:16
SORRY我说错了。
我个人认为,网卡的传输速度和内存的速度根本不是一个数量级。EVENT作为一个内核对象被锁定在非分页内存中,再慢也不至于满足不了网卡的传输,否则WINDOWS造就崩溃了。一般说他慢是相对于CRITICAL_SECTION来说的。
我也用EVENT的方法取过包,发到应用层,经过处理,并写入文件,如此多的操作,也不见掉包。
可以说网卡的吞吐量比硬盘还差很远。
我说这些并不是排斥队列的方法,当让用队列可能更好,我只是想说明,如果取包的时候就出了问题,用什么方法都掉包。


我并不清楚你到底采用的是什么EVENT的方法。。我做过测试。。在内核处数据采集一切正常。。。但是。。EVENT相对的速度还是慢很多。。所以我才会采用APC的工作模式。。。。
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-14 15:07
但是我丢的包多数是那种响应快而且短的包如在直联访问FTP时的控制连接报文经常丢,还有问一下如果底层是用NdisMIndicateReceivePacket那PtReceivePacket是不是可以接收所有的包
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-14 12:53
SORRY我说错了。
我个人认为,网卡的传输速度和内存的速度根本不是一个数量级。EVENT作为一个内核对象被锁定在非分页内存中,再慢也不至于满足不了网卡的传输,否则WINDOWS造就崩溃了。一般说他慢是相对于CRITICAL_SECTION来说的。
我也用EVENT的方法取过包,发到应用层,经过处理,并写入文件,如此多的操作,也不见掉包。
可以说网卡的吞吐量比硬盘还差很远。
我说这些并不是排斥队列的方法,当让用队列可能更好,我只是想说明,如果取包的时候就出了问题,用什么方法都掉包。
ljjlovernet
驱动小牛
驱动小牛
  • 注册日期2003-10-10
  • 最后登录2004-12-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-14 11:53
asmsys说的可能是有点着急,说的不很清楚,他的意思应该是说,一串buffer,实际上还是一个包,在系统中,一个包是可能不止一个buffer组成的.你看看ndisgetnextbuffer,可以遍历到组成一个包的所有buffer,然后你才得到一个完整的包,和里面的内容.
我是来学习的。不打扫卫生
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-14 11:29
PtReceivePacket一般收到的是一串包,如果你只COPY了一个,掉包是自然的了。

PtReceivePacket中什么地方反映是一串包的,如果是又怎么一个个取出来
cyf_rich
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-13 18:53
采用EVENT事件来通知COPY数据到APP中效率及其低下。。。建议采用APC工作模式。。。。。。具体的方法。。参见PCAUSE。。。。这样的话掉包率就会比较低了。。。

[编辑 -  4/13/04 by  cyf_rich]
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-04-13 13:46
使用事件对象和应用程序同步读取IM获得的数据包,效率是查觉低的,你就使用其它机制,比如你可以将收到的数据包进入一等待队列中,应用程序从队列中读取,这样效率会高很多,我就是这么处理的!

能不能给个例子看看
aulphar
驱动牛犊
驱动牛犊
  • 注册日期2004-02-23
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-13 13:44
PtReceivePacket一般收到的是一串包,如果你只COPY了一个,掉包是自然的了。

是这样的吗,老大?PtReceivePacket的参数不是只有一个packet吗,怎么会是一串packet,那如果如你所说又怎么把它一个个的取出来
aldsd
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-05-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-04-13 13:22
使用事件对象和应用程序同步读取IM获得的数据包,效率是查觉低的,你就使用其它机制,比如你可以将收到的数据包进入一等待队列中,应用程序从队列中读取,这样效率会高很多,我就是这么处理的!

能不能给一个例子借鉴一下!谢谢!
aldsd
baoyibao99
禁止发言
禁止发言
  • 注册日期2003-05-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分894分
  • 威望8415点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-04-13 13:08
用户被禁言,该主题自动屏蔽!
asmsys
驱动老牛
驱动老牛
  • 注册日期2002-03-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望17点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-04-13 13:01
PtReceivePacket一般收到的是一串包,如果你只COPY了一个,掉包是自然的了。
游客

返回顶部