edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1938回复:19

关于改造 Passthru,请给点建议。

楼主#
更多 发布于:2002-12-05 15:34
我想达到这样的效果,每从上层接到一个包或从底层收到一个包,都将包数据复制到自己的“单一缓冲区”中,使包数据变成连续的。

这样一来,肯定还要分配缓冲池,那么缓冲区描述符所描述的内存该怎么分配?每得到一个包就调用 NdisAllocateMemory 分配?这样做效率会不会很差?

应该怎么做?大家请给点建议!
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-12-05 16:04
你可以一次分配若干个,然后再分片用一个list管理,用的时候从list中取,用完了再还回去即可。
magicx
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2014-08-18
  • 粉丝1
  • 关注0
  • 积分-14分
  • 威望13点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-12-05 18:18
一次就分配一个大的内存先。
[color=red]大头鬼! :P[/color]
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-12-06 10:55
那我为每个缓冲区预留的缓冲区应该有多大?也就是说一个包最大能有多大?我看到 PCAUSA 的 PIM 代码里是 2048 Bytes。
monkeyy
驱动中牛
驱动中牛
  • 注册日期2001-12-06
  • 最后登录2010-10-10
  • 粉丝0
  • 关注0
  • 积分315分
  • 威望84点
  • 贡献值0点
  • 好评度32点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-12-06 19:19
记得胡老大的VPN就是自己分配的内存!呵呵,不一定非要进行二次分配吧!!
听说老虎会吃人,所以从没想过去摸老虎的屁股。:( :(
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-12-06 21:59
 
使包数据变成连续的


你想要达到什么效果??详细说一说?是让包在一块连续的内存中??那你只能是先申请一块大内存,然后往里面copy了
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-12-07 09:57
对,就是这个意思。象 PCAUSA 的 PIM 那样,每收到一个包就把它复制到一个连续的缓冲区中,我不知道这样做一般的或者说比较优化的方法是什么。我现在在初始化的时候一次性的申请了 N 块 2048 Bytes 的内存用来完成这个工作。
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-12-07 10:16
我没有仔细看他处理收到的包的过程,不过他好像只是把一个packet的buffercopy到了一块连续的缓冲区了,不是把N个packet的buffer都copy到一个连续的缓冲区了吧
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-12-07 10:19
对啊,它是把一个包的数据都复制到了一个连续的缓冲区中,我实现申请了 N 块以备后用,大概我上面没说清楚。

那 mikeluo,你认为该怎么做的呢?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-07 10:30
你只是想把一个packet的buffer copy到一个连续的内存中么?如果是这样的话,你可以动态申请的,每次根据receive里面的packetsize来申请一块合适的内存
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-07 11:28
可是 mikeluo,这样效率会不会很差(每处理一个包就动态申请,处理完再释放)?

我现在在初始化期间可能申请的内存太多了,Passthru 居然不能工作了!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-07 11:30
那样不会差到哪里去的,协议层也是动态分配的
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-07 11:37
你的 VPN 也是在处理包的时候这样操作吗?我还听说如果在 SendPacket 里面处理包的话会降低效率,所以现在对程序结构和运作逻辑都觉得挺没底!
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-12-07 11:40
第一次做 WDM 和 IMD,感觉就象到了外太空,又新奇又觉得心里没数,呵呵,还望老兄指点!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-12-07 11:41
我都是在收包处理的,很多VPN也都是,除非有硬件的加密卡,我的发包是发一个处理一个,收包是有一个队列,
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-12-07 13:19
mikeluo,最后一个问题!为什么收包就要特殊处理?
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-12-07 13:27
收包的时候如果处理的慢的话,ndis的缓冲区满了以后就会丢包了,
发包是你交给ndis的,我是这样理解的,
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-12-07 13:32
哦,原来如此,又学到东西了!给分!
mikeluo
驱动老牛
驱动老牛
  • 注册日期2001-09-04
  • 最后登录2007-05-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-12-07 13:36
老大,以后给分你就一次给个够吧,俺的信箱里一下收到6封信,删都要删半天
学而不思则罔,思而不学则殆 学而思之,思而学之,岂非圣人乎?
edust
驱动中牛
驱动中牛
  • 注册日期2002-04-02
  • 最后登录2003-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-12-07 13:38
哈哈,好的!
游客

返回顶部