CN103685068A - 接收缓存描述符队列维护方法及设备 - Google Patents

接收缓存描述符队列维护方法及设备 Download PDF

Info

Publication number
CN103685068A
CN103685068A CN201310659137.3A CN201310659137A CN103685068A CN 103685068 A CN103685068 A CN 103685068A CN 201310659137 A CN201310659137 A CN 201310659137A CN 103685068 A CN103685068 A CN 103685068A
Authority
CN
China
Prior art keywords
state
buffer
information
snapshot
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310659137.3A
Other languages
English (en)
Other versions
CN103685068B (zh
Inventor
杨逸
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
New H3C Information Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN201310659137.3A priority Critical patent/CN103685068B/zh
Publication of CN103685068A publication Critical patent/CN103685068A/zh
Application granted granted Critical
Publication of CN103685068B publication Critical patent/CN103685068B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Communication Control (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明提出接收缓存描述符队列维护方法及设备。方法包括:在每个BD指向的Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址;当Target设备将报文写入Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。本发明提高了接收BD队列的容错性。

Description

接收缓存描述符队列维护方法及设备
技术领域
本发明涉及BD(Buffer Descriptor,缓存描述符)技术领域,尤其涉及接收BD队列维护方法及设备。
背景技术
当CPU(Central Processing Unit,中央处理单元)通过PCI(PeripheralComponent Interconnect,外围组件互连)或者PCIE(Peripheral ComponentInterconnect Express,快捷外围组件互连)等总线同业务接口相连时,一般都采用BD(Buffer Descriptor,缓存描述符)队列的方式来实现报文的收发处理。BD的主要内容如表1所示,每个BD都指向一个Buffer(缓存),该Buffer用于缓存报文数据,BD本身则包含着对该报文的描述信息,如表1所示,BD中主要包含:
Valid(有效)标识:指示Buffer中是否包含有效的报文数据;
SOP(Start of Packet,包头)/EOP(End of Packet,包尾):指示Buffer中的报文数据是否包头或者包尾;
CMD(Command,命令)/Status(状态):指示Buffer中的报文数据是否有错误等;
报文长度:表示Buffer中的报文数据长度;
Buffer地址:表示该BD指向的Buffer地址。
Valid标识
SOP/EOP标识
CMD/Status指示
报文长度
Buffer地址
表1BD的结构示意图
图1为现有的BD队列的运行机理示意图,如图1所示:
CPU负责分配内存,创建接收BD队列,该队列是一个环形队列,每个接收BD都指向一块预先分配好内存的Buffer;
Target(目标)设备维护Head(头)指针,Head指针总是指向第一个准备接收报文的BD;当Target设备收到一个报文时,将报文数据写入Head指针指向BD对应的Buffer,将报文描述信息写入Head指针指向的BD,然后将Head指针向前挪动到指向下一个BD;
Host(主机)设备维护Tail(尾)指针,Tail指针总是指向第一个已经接收好报文的BD,根据该BD中的信息从对应Buffer中取出报文处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,同时将Tail指针向前挪动到指向下一个BD。其中,BD的控制信息主要指:Valid标识、SOP/EOP标识、CMD/Status指示和报文长度。
在实际应用中,Target设备例如分布式系统中的板卡,Host设备例如分布式系统中的CPU。
从图1所示BD队列的运行机理可以看出:接收BD队列的BD与BD之间存在着一种顺序关系:只有处理完当前BD才能处理下一个BD,并且BD和报文之间存在着一一对应的同步关系。
图2给出了现有的Target设备向Host设备传输数据的示意图,如图2所示,当Target设备收到报文向Host设备传输时,传输顺序是这样的:Target设备先向Host设备的一Buffer写入第一个报文,然后向该buffer对应的BD写入第一个报文的描述信息,再向Host设备的下一Buffer写入第二个报文,然后向该Buffer对应的BD写入第二个报文的描述信息,依此类推。
发明内容
本发明提供接收BD队列维护方法及设备,以提高接收BD队列的容错性。
本发明的技术方案是这样实现的:
一种接收缓存描述符BD队列维护方法,该方法包括:
在每个BD指向的缓存Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址;
当目标Target设备将报文写入头Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
所述方法进一步包括:
主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD。
所述方法进一步包括:Target设备按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
所述Host设备读取该BD的Valid标识之后,进一步包括:
若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态由“有效”更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
所述Host设备读取该BD的Valid标识之后,进一步包括:
若该Valid标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”。
一种接收缓存描述符BD队列维护方法,该方法包括:
主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;
其中,Host设备从BD对应Buffer的预留区域中读取到的该BD的地址为:Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
所述方法进一步包括:
Host设备接收Target设备发来的接收BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或无效,以该状态快照更新自身保存的接收BD队列的状态快照;
且,当Host设备在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
所述Host设备读取该BD的Valid标识之后,进一步包括:
若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
一种目标Target设备,该设备包括:
报文写入模块:当将报文写入头Head指针指向缓存描述符BD对应的缓存Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
所述Target设备进一步包括:
状态快照同步模块:按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
一种主机Host设备,该设备包括:
报文读取模块:查看尾Tail指针指向的缓存描述符BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;其中,从该BD对应Buffer的预留区域中读取到的该BD的地址为:目标Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
该Host设备进一步包括:状态快照接收保存模块,用于接收Target设备发来的BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或者无效,以该状态快照更新自身保存的接收BD队列的状态快照;
且,所述报文读取模块在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
所述报文读取模块读取该BD的Valid标识之后,进一步用于,若该标识指示“无效”,则从状态快照接收模块收到的状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照接收保存模块保存的状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
可见,本发明可以提高接收BD队列的容错性。
附图说明
图1为现有的BD队列的运行机理示意图;
图2为现有的Target设备向Host设备传输数据的示意图;
图3为现有的Target设备向Host设备传输数据时,BD或Packet丢失时的示例图;
图4为本发明实施例提供的接收BD队列的维护方法流程图;
图5为本发明又一实施例提供的接收BD队列的维护方法流程图;
图6为本发明实施例提供的Target设备的组成示意图;
图7为本发明实施例提供的Host设备的组成示意图。
具体实施方式
下面结合附图及具体实施例对本发明再作进一步详细的说明。
对现有的BD队列运行机理进行分析发现:如果物理总线上的数据传输完全没有丢失,那么能够保证报文的传输、接收处理始终正常进行。但是在实际的使用场景中,任何一种数据总线都不能完全保证在总线上传输的数据不丢失,尤其是当物理数据总线连接拓扑比较复杂,硬件信号环境比较恶劣时更是如此,极有可能因为物理信号的瞬间劣化导致数据信息的丢失。当前各种高速总线的数据传输一般都是基于报文或者数据块而不是基于字节流的,一次总线操作完成一块数据的传输,所以,数据的丢失也是一个完整的报文或者数据块的丢失。
假如某个时刻物理总线硬件信号突然劣化,则可能导致某个报文或者某个报文对应的BD在总线传输时丢失了,而这种丢失,对于目前的BD队列机制是无法容忍的。如图3所示,假设Target设备在通过物理总线向Host设备传输数据时,Bd2和Packet3(报文3)丢失了,则:
1)初始时,Host设备维护的Tail指针指向Bd1;Host设备发现Bd1中的Valid标识指示有效,则根据Bd1从对应Buffer中取出报文交给上层模块处理,并挪动Tail指针指向Bd2;因为Bd2的信息在总线上丢失了,但是Host设备感知不到,从而Host设备根据Bd2中的Valid标识认为Bd2是无效的,同时隐含着Bd2以后的Bd3、Bd4等都是无效的,所以,Host设备会错误地认为当前接收BD队列已经空了,没有报文等待处理,Tail指针因此也不会再向前挪动;
2)后续的报文会触发Target设备持续向前挪动Head指针,直到Head指针追上Tail指针,Target设备会认为接收BD队列满,再也没有空闲BD可以接收报文,因此也不再向前挪动Head指针;
3)Tail指针一直要等到Bd2变成有效才向前挪动;而Head指针一直要等到Tail指针向前挪动了才能继续接收报文,这就进入了一种阻塞状态:Head和Tail指针都静止不动,而后续的报文都收不上来,全部丢弃了。
4)假如Bd2没有丢失,则Tail指针会正常向前挪动到Bd3,但是Bd3对应的报文Packet3在总线上丢了,Bd3指向的Buffer所包含的是无效的数据,但是Bd3没有办法感知到,这样Host设备会根据Bd3取走一块无效的数据交给上层模块进行处理,同样是有风险的。
由此可见,当前的BD队列运行机理是无法承受物理层面的数据丢失的。
图4为本发明实施例提供的接收BD队列的维护方法流程图,如图4所示,其具体步骤如下:
步骤401:预先在每个BD指向的Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址。
步骤402:当Target设备接收到一个报文时,将报文写入Head指针指向BD对应的Buffer,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
步骤403:Host设备查看Tail指针指向的BD,读取该BD的Valid标识,判断该标识是否指示“有效”,若是,执行步骤404;否则,执行步骤408。
步骤404:Host设备从该BD中读取Buffer地址,根据该Buffer地址找到对应的Buffer。
步骤405:Host设备判断是否从该Buffer的预留区域中读取到信息且该信息为该BD的地址,若是,执行步骤406;否则,执行步骤407。
步骤406:Host设备确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,将该Buffer的预留区域清零,同时将Tail指针向前挪动到指向下一个BD,本流程结束。
步骤407:Host设备确认报文丢失,直接将BD的控制信息恢复为初始值,同时将Tail指针向前挪动到指向下一个BD,本流程结束。
步骤408:Host设备不作进一步处理,本流程结束。
仍以图3为例,仍然假设Packet3丢失。采用图4所示本发明提供的方案后,Host设备从Bd3中读取Buffer地址后,会先查询Buffer的预留区域,发现该预留区域中存放的并不是Bd3的地址,则得知Packet3丢失,不从Buffer读取数据递交上层模块处理,直接将Tail指针向前挪动到Bd4。
从图4所示本发明实施例可以看出:通过在Buffer中写入对应BD的地址,使得Host设备能够得知Packet是否丢失,从而提高了接收BD队列的容错性和可靠性。
图5为本发明又一实施例提供的接收BD队列的维护方法流程图,如图5所示,其具体步骤如下:
步骤501:预先在每个BD指向的Buffer中预留一固定区域,该区域用于存放该Buffer指向的BD的地址。
步骤502:当Target设备接收到一个报文时,将报文写入Head指针指向BD对应的Buffer,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
步骤503:Target设备按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
若一个BD中写入了报文描述信息,即该BD对应Buffer中写入了报文,则该BD的状态为“有效”,否则,该BD的状态为“无效”。
在实际应用中,状态快照可以一个位图表示,位图中的每个比特对应一个BD。比如,若一个接收BD队列中有8个BD,则其状态快照可以用1个字节的8个比特的位图来表示。如:整个接收BD队列为空,则其位图就是0;整个接收BD队列为满,则其位图就是0xFF;接收BD队列的前4个BD有效,则其位图是0xF0。
这里,需要说明的是,若接收BD队列较长,则其状态快照也是较长的,例如:接收BD队列长度为1024,则其状态快照位图需要128个字节,这样,若在每次状态快照变化时,都将状态快照同步到Host设备,则会占用较多的传输资源。因此,在实际应用中可以设定对接收BD队列的状态作快照,并将该状态快照同步到Host设备的策略如下:
策略1)Target设备周期性地对整个接收BD队列的状态分次作快照并分次同步到Host设备,即,将整个接收BD队列划分为n(n>1)个单元,按照顺序,依次对每个单元的状态作快照并同步到Host设备。
例如:接收BD队列长度为1024,设为Bd0~1023,则将其划分为8个单元,每个单元的长度为128比特,则第一次只对第一个单元,即Bd0~Bd127的状态作快照并同步到Host设备,第二次只对第二个单元,即Bd128~Bd255的状态作快照并同步到Host设备,依此类推,循环进行。
策略2)当Target设备发现在预设数目个时钟周期内Tail指针未向前移动,且Head指针与Tail指针不相等时,开始持续地对整个接收BD队列的状态一次性地或分次作快照并同步到Host设备,直至Tail指针向前挪动时停止同步。
步骤504:当Host设备接收到Target设备发来的状态快照时,执行步骤505~514。
步骤505:Host设备以该状态快照更新自身保存的接收BD队列的状态快照。
当然,若该状态快照为target设备第一次发来的,则Host设备直接保存即可。
步骤506:Host设备在要从Buffer中读取数据时,查看Tail指针指向的BD,读取该BD的Valid标识,判断该Valid标识是否指示“有效”,若是,执行步骤511;否则,执行步骤507。
步骤507:Host设备判断自身保存的接收BD队列的状态快照中是否包含了该BD的状态,若是,执行步骤508;否则,执行步骤510。
如上述对步骤503的说明,为了减少对传输资源的占用,Target设备可能不会实时地将状态快照同步到Host设备,同时在同步状态快照时,也可能不会将所有BD的状态都一次性同步。
步骤508:Host设备判断状态快照中该BD的状态是否为“有效”,若是,执行步骤509;否则,执行步骤510。
步骤509:Host设备确认该BD的真正状态为“有效”,确认该BD的信息丢失,则将Tail指针向前挪动到指向下一个BD,将自身保存的状态快照中该BD的状态由“有效”更新为“无效”,本流程结束。
此时,无需为BD重新分配Buffer,该BD仍对应原来的Buffer即可,为可靠起见,可将该Buffer的预留区域清零。
步骤510:Host设备不作进一步处理,本流程结束。
若BD的Valid标识指示“无效”,同时状态快照中该BD的状态也为“无效”,则Host设备可确认该BD的状态确实为“无效”。
步骤511:Host设备从该BD中读取Buffer地址,根据该Buffer地址找到对应的Buffer。
步骤512:Host设备判断是否从该Buffer的预留区域中读取到信息且该信息为该BD的地址,若是,执行步骤513;否则,执行步骤514。
步骤513:Host设备确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,将该Buffer的预留区域清零,同时将Tail指针向前挪动到指向下一个BD,且,将自身保存的状态快照中该BD的状态更新为“无效”,本流程结束。
步骤514:Host设备确认报文丢失,直接将BD的控制信息恢复为初始值,同时将Tail指针向前挪动到指向下一个BD,且,将自身保存的状态快照中该BD的状态更新为“无效”,本流程结束。
当Target设备没有同步过来Tail指针指向的BD的状态时,Host设备按照现有方法进行处理即可。
仍以图3为例,采用图5所示本发明提供的方案后,Target设备会按策略对接收BD队列的状态作快照并同步到Host设备。
A、仍然假设Bd2丢失
则:当Tail指针指向Bd2时,虽然Bd2中的Valid标识指示无效,但是Host设备会根据Target设备传送过来的状态快照,得知Bd2应该是有效的,从而得知Bd2中的信息在总线上丢了,因此,Host设备继续向前挪动Tail指针到Bd3。这样就不会陷入阻塞状态了。
B、仍然假设Packet3丢失
此时,Host设备根据Target设备传送过来的状态快照,得知Bd3是有效的,从Bd3中读取Buffer地址,然后查询Buffer的预留区域,发现该预留区域中存放的并不是Bd3的地址,则得知Packet3丢失,不从Buffer读取数据递交上层模块处理,直接将Tail指针向前挪动到Bd4。
从图5所示本发明实施例可以看出:通过Target设备在Buffer中写入对应BD的地址,同时按策略对接收BD队列中每个BD的状态作快照并同步到Host设备,使得Host设备能够得知Packet和BD是否丢失,更进一步提高了接收BD队列的容错性和可靠性。
图6为本发明实施例提供的Target设备的组成示意图,如图6所示,其主要包括:报文写入模块61和状态快照同步模块62,其中:
报文写入模块61:当将报文写入Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,并将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
状态快照同步模块62:按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
其中,状态快照同步模块62按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备包括:
周期性地对整个接收BD队列的状态一次性地或分次作快照,并将状态快照同步到Host设备;
或者,当Target设备发现在预设数目个时钟周期内Tail指针未向前移动,且Head指针与Tail指针不相等时,开始持续地对整个接收BD队列的状态一次性地或分次作快照,并将状态快照同步到Host设备,直至Tail指针向前挪动时停止同步。
图7为本发明实施例提供的Host设备的组成示意图,如图7所示,其主要包括:状态快照接收保存模块71和报文读取模块72,其中:
状态快照接收保存模块71:接收Target设备发来的接收BD队列的状态快照,该状态快照记录了接收BD队列中的BD的实时状态:有效或者无效,以该状态快照更新自身保存的接收BD队列的状态快照。
报文读取模块72:查看Tail指针指向的BD,读取该BD的Valid标识,若该Valid标识指示“无效”,则从状态快照接收保存模块71保存的状态快照中读取该BD的状态,若读取到的状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照接收保存模块71保存的状态快照中该BD的状态由“有效”更新为“无效”,若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理;若该Valid标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD,且,将状态快照接收保存模块71保存的状态快照中该BD的状态更新为“无效”,若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD,且,将状态快照接收保存模块71保存的状态快照中该BD的状态更新为“无效”,其中,从该BD对应Buffer的预留区域中读取到的该BD的地址为:Target设备在将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

Claims (13)

1.一种接收缓存描述符BD队列维护方法,其特征在于,该方法包括:
在每个BD指向的缓存Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址;
当目标Target设备将报文写入头Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
2.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:
主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD。
3.根据权利要求1所述的方法,其特征在于,所述方法进一步包括:Target设备按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
4.根据权利要求3所述的方法,其特征在于,所述Host设备读取该BD的Valid标识之后,进一步包括:
若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态由“有效”更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
5.根据权利要求4所述的方法,其特征在于,所述Host设备读取该BD的Valid标识之后,进一步包括:
若该Valid标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”。
6.一种接收缓存描述符BD队列维护方法,其特征在于,该方法包括:
主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;
其中,Host设备从BD对应Buffer的预留区域中读取到的该BD的地址为:Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
7.根据权利要求6所述的方法,其特征在于,所述方法进一步包括:
Host设备接收Target设备发来的接收BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或无效,以该状态快照更新自身保存的接收BD队列的状态快照;
且,当Host设备在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
8.根据权利要求7所述的方法,其特征在于,所述Host设备读取该BD的Valid标识之后,进一步包括:
若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
9.一种目标Target设备,其特征在于,该设备包括:
报文写入模块:当将报文写入头Head指针指向缓存描述符BD对应的缓存Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
10.根据权利要求9所述的Target设备,其特征在于,所述Target设备进一步包括:
状态快照同步模块:按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
11.一种主机Host设备,其特征在于,该设备包括:
报文读取模块:查看尾Tail指针指向的缓存描述符BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;其中,从该BD对应Buffer的预留区域中读取到的该BD的地址为:目标Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
12.根据权利要求11所述的Host设备,其特征在于,该Host设备进一步包括:状态快照接收保存模块,用于接收Target设备发来的BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或者无效,以该状态快照更新自身保存的接收BD队列的状态快照;
且,所述报文读取模块在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
13.根据权利要求12所述的Host设备,其特征在于,所述报文读取模块读取该BD的Valid标识之后,进一步用于,若该标识指示“无效”,则从状态快照接收模块收到的状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照接收保存模块保存的状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
CN201310659137.3A 2013-12-06 2013-12-06 接收缓存描述符队列维护方法及设备 Active CN103685068B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310659137.3A CN103685068B (zh) 2013-12-06 2013-12-06 接收缓存描述符队列维护方法及设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310659137.3A CN103685068B (zh) 2013-12-06 2013-12-06 接收缓存描述符队列维护方法及设备

Publications (2)

Publication Number Publication Date
CN103685068A true CN103685068A (zh) 2014-03-26
CN103685068B CN103685068B (zh) 2016-08-17

Family

ID=50321422

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310659137.3A Active CN103685068B (zh) 2013-12-06 2013-12-06 接收缓存描述符队列维护方法及设备

Country Status (1)

Country Link
CN (1) CN103685068B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106982176A (zh) * 2017-03-22 2017-07-25 北京东土军悦科技有限公司 一种数据传输方法及设备

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030140196A1 (en) * 2002-01-23 2003-07-24 Gilbert Wolrich Enqueue operations for multi-buffer packets
CN1542623A (zh) * 2003-04-29 2004-11-03 华为技术有限公司 一种实现内存管理的方法
CN1613066A (zh) * 2001-11-09 2005-05-04 瑞迪西斯迈克维尔通讯软件分公司 网络处理器体系的路由和转寄表管理
US20060140203A1 (en) * 2004-12-28 2006-06-29 Sanjeev Jain System and method for packet queuing
US7180887B1 (en) * 2002-01-04 2007-02-20 Radisys Patent Properties Routing and forwarding table management for network processor architectures
CN101079015A (zh) * 2007-06-28 2007-11-28 杭州华三通信技术有限公司 数据传送方法及系统
CN102377682A (zh) * 2011-12-12 2012-03-14 西安电子科技大学 基于定长单元存储变长分组的队列管理方法及设备
CN103218313A (zh) * 2013-04-02 2013-07-24 杭州华三通信技术有限公司 用于实现缓存描述符交互的方法和电子设备

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1613066A (zh) * 2001-11-09 2005-05-04 瑞迪西斯迈克维尔通讯软件分公司 网络处理器体系的路由和转寄表管理
US7180887B1 (en) * 2002-01-04 2007-02-20 Radisys Patent Properties Routing and forwarding table management for network processor architectures
US20030140196A1 (en) * 2002-01-23 2003-07-24 Gilbert Wolrich Enqueue operations for multi-buffer packets
CN1542623A (zh) * 2003-04-29 2004-11-03 华为技术有限公司 一种实现内存管理的方法
US20060140203A1 (en) * 2004-12-28 2006-06-29 Sanjeev Jain System and method for packet queuing
CN101079015A (zh) * 2007-06-28 2007-11-28 杭州华三通信技术有限公司 数据传送方法及系统
CN102377682A (zh) * 2011-12-12 2012-03-14 西安电子科技大学 基于定长单元存储变长分组的队列管理方法及设备
CN103218313A (zh) * 2013-04-02 2013-07-24 杭州华三通信技术有限公司 用于实现缓存描述符交互的方法和电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106982176A (zh) * 2017-03-22 2017-07-25 北京东土军悦科技有限公司 一种数据传输方法及设备
CN106982176B (zh) * 2017-03-22 2020-09-11 北京东土军悦科技有限公司 一种数据传输方法及设备

Also Published As

Publication number Publication date
CN103685068B (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
CN101876963B (zh) PCI.Express通信系统及其通信方法
WO2016202114A1 (zh) 一种数据传输方法、装置及存储介质
GB2582497A (en) Address/command chip synchronized autonomous data chip address sequencer for a distributed buffer memory system
CN103077147B (zh) 一种基于链表的全功能1553b总线ip核
CN101156144A (zh) Dma控制器、节点、数据传送控制方法、及程序
CN104468238A (zh) 基于vxworks系统的双网卡冗余切换方法
CN104158757A (zh) 一种gps数据入库处理方法和系统
TW200839514A (en) Memory management apparatus
CN111373382A (zh) 高速外围组件互连(PCI)(PCIe)地址转译服务(ATS)中的快速失效
RU2017118316A (ru) Способ обработки запроса на запись, процессор и компьютер
CN103092778A (zh) 一种存储系统的缓存镜像方法
CN104239252A (zh) 数据存储系统的数据传输方法、装置及系统
CN103685578A (zh) 主从设备的数据传输方法
CN111651396A (zh) 一种优化的pcie完成包乱序管理电路实现方法
US7836328B1 (en) Method and apparatus for recovering from system bus transaction errors
EP2442500B1 (en) Data transfer device and data transfer method
CN105681222A (zh) 一种数据接收缓存方法、装置及通信系统
CN101415027B (zh) 基于hdlc协议的通讯模块及数据实时转发存储控制方法
CN103685068A (zh) 接收缓存描述符队列维护方法及设备
US10095643B2 (en) Direct memory access control device for at least one computing unit having a working memory
US20150199298A1 (en) Storage and network interface memory share
CN103685063A (zh) 接收缓存描述符队列维护方法及设备
US20060129714A1 (en) Method and apparatus for transferring data
CN110659236B (zh) 可自主回复写应答的axi总线传输装置
US8799530B2 (en) Data processing system with a host bus adapter (HBA) running on a PCIe bus that manages the number enqueues or dequeues of data in order to reduce bottleneck

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No.

Patentee after: NEW H3C TECHNOLOGIES Co.,Ltd.

Address before: 310053 Hangzhou hi tech Industrial Development Zone, Zhejiang province science and Technology Industrial Park, No. 310 and No. six road, HUAWEI, Hangzhou production base

Patentee before: HANGZHOU H3C TECHNOLOGIES Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230630

Address after: 310052 11th Floor, 466 Changhe Road, Binjiang District, Hangzhou City, Zhejiang Province

Patentee after: H3C INFORMATION TECHNOLOGY Co.,Ltd.

Address before: 310052 Changhe Road, Binjiang District, Hangzhou, Zhejiang Province, No. 466

Patentee before: NEW H3C TECHNOLOGIES Co.,Ltd.