首页 / 专利库 / 钟表 / 指针 / 接收缓存描述符队列维护方法及设备

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

阅读:210发布:2021-06-08

专利汇可以提供接收缓存描述符队列维护方法及设备专利检索,专利查询,专利分析的服务。并且本 发明 提出接收缓存描述符队列维护方法及设备。方法包括:在每个BD指向的Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址;当Target设备将报文写入Head 指针 指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。本发明提高了接收BD队列的容错性。,下面是接收缓存描述符队列维护方法及设备专利的具体信息内容。

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真正“无效”,不作进一步处理。

说明书全文

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

技术领域

[0001] 本发明涉及BD(Buffer Descriptor,缓存描述符)技术领域,尤其涉及接收BD队列维护方法及设备。

背景技术

[0002] 当CPU(Central Processing Unit,中央处理单元)通过PCI(Peripheral Component Interconnect,外围组件互连)或者PCIE(Peripheral Component Interconnect Express,快捷外围组件互连)等总线同业务接口相连时,一般都采用BD(Buffer Descriptor,缓存描述符)队列的方式来实现报文的收发处理。BD的主要内容如表1所示,每个BD都指向一个Buffer(缓存),该Buffer用于缓存报文数据,BD本身则包含着对该报文的描述信息,如表1所示,BD中主要包含:
[0003] Valid(有效)标识:指示Buffer中是否包含有效的报文数据;
[0004] SOP(Start of Packet,包头)/EOP(End of Packet,包尾):指示Buffer中的报文数据是否包头或者包尾;
[0005] CMD(Command,命令)/Status(状态):指示Buffer中的报文数据是否有错误等;
[0006] 报文长度:表示Buffer中的报文数据长度;
[0007] Buffer地址:表示该BD指向的Buffer地址。
[0008]Valid标识
SOP/EOP标识
CMD/Status指示
报文长度
Buffer地址
[0009]
[0010] 表1BD的结构示意图
[0011] 图1为现有的BD队列的运行机理示意图,如图1所示:
[0012] CPU负责分配内存,创建接收BD队列,该队列是一个环形队列,每个接收BD都指向一预先分配好内存的Buffer;
[0013] Target(目标)设备维护Head(头)指针,Head指针总是指向第一个准备接收报文的BD;当Target设备收到一个报文时,将报文数据写入Head指针指向BD对应的Buffer,将报文描述信息写入Head指针指向的BD,然后将Head指针向前挪动到指向下一个BD;
[0014] Host(主机)设备维护Tail(尾)指针,Tail指针总是指向第一个已经接收好报文的BD,根据该BD中的信息从对应Buffer中取出报文处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,同时将Tail指针向前挪动到指向下一个BD。其中,BD的控制信息主要指:Valid标识、SOP/EOP标识、CMD/Status指示和报文长度。
[0015] 在实际应用中,Target设备例如分布式系统中的板卡,Host设备例如分布式系统中的CPU。
[0016] 从图1所示BD队列的运行机理可以看出:接收BD队列的BD与BD之间存在着一种顺序关系:只有处理完当前BD才能处理下一个BD,并且BD和报文之间存在着一一对应的同步关系。
[0017] 图2给出了现有的Target设备向Host设备传输数据的示意图,如图2所示,当Target设备收到报文向Host设备传输时,传输顺序是这样的:Target设备先向Host设备的一Buffer写入第一个报文,然后向该buffer对应的BD写入第一个报文的描述信息,再向Host设备的下一Buffer写入第二个报文,然后向该Buffer对应的BD写入第二个报文的描述信息,依此类推。

发明内容

[0018] 本发明提供接收BD队列维护方法及设备,以提高接收BD队列的容错性。
[0019] 本发明的技术方案是这样实现的:
[0020] 一种接收缓存描述符BD队列维护方法,该方法包括:
[0021] 在每个BD指向的缓存Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址;
[0022] 当目标Target设备将报文写入头Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
[0023] 所述方法进一步包括:
[0024] 主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD。
[0025] 所述方法进一步包括:Target设备按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
[0026] 所述Host设备读取该BD的Valid标识之后,进一步包括:
[0027] 若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态由“有效”更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
[0028] 所述Host设备读取该BD的Valid标识之后,进一步包括:
[0029] 若该Valid标识指示“有效”,则读取该BD对应Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD,且,将状态快照中该BD的状态更新为“无效”。
[0030] 一种接收缓存描述符BD队列维护方法,该方法包括:
[0031] 主机Host设备查看尾Tail指针指向的BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;
[0032] 其中,Host设备从BD对应Buffer的预留区域中读取到的该BD的地址为:Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
[0033] 所述方法进一步包括:
[0034] Host设备接收Target设备发来的接收BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或无效,以该状态快照更新自身保存的接收BD队列的状态快照;
[0035] 且,当Host设备在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
[0036] 所述Host设备读取该BD的Valid标识之后,进一步包括:
[0037] 若该标识指示“无效”,则从状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
[0038] 一种目标Target设备,该设备包括:
[0039] 报文写入模块:当将报文写入头Head指针指向缓存描述符BD对应的缓存Buffer时,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
[0040] 所述Target设备进一步包括:
[0041] 状态快照同步模块:按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
[0042] 一种主机Host设备,该设备包括:
[0043] 报文读取模块:查看尾Tail指针指向的缓存描述符BD,读取该BD的有效Valid标识,若该标识指示“有效”,则读取该BD对应缓存Buffer的预留区域,若读取到信息且该信息为该BD的地址,则确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,为该BD分配预留区域为空的Buffer,同时将Tail指针向前挪动到指向下一个BD;若未读取到信息或者读取到的信息不为该BD的地址,确认报文丢失,直接将Tail指针向前挪动到指向下一个BD;其中,从该BD对应Buffer的预留区域中读取到的该BD的地址为:目标Target设备将报文写入该BD对应的该Buffer时,在该Buffer的预留区域中写入的。
[0044] 该Host设备进一步包括:状态快照接收保存模块,用于接收Target设备发来的BD队列的状态快照,该状态快照包含了接收BD队列中的BD的实时状态:有效或者无效,以该状态快照更新自身保存的接收BD队列的状态快照;
[0045] 且,所述报文读取模块在从Buffer的预留区域读取到信息且该信息为该BD的地址,或者未读取到信息或者读取到的信息不为该BD的地址时,所述将Tail指针向前挪动到指向下一个BD进一步包括:将状态快照中该BD的状态更新为“无效”。
[0046] 所述报文读取模块读取该BD的Valid标识之后,进一步用于,若该标识指示“无效”,则从状态快照接收模块收到的状态快照中读取该BD的状态,若该状态为“有效”,则确认该BD的真正状态为“有效”,确认该BD中的信息丢失,将Tail指针向前挪动到指向下一个BD,将状态快照接收保存模块保存的状态快照中该BD的状态更新为“无效”;若该状态为“无效”,则确认该BD真正“无效”,不作进一步处理。
[0047] 可见,本发明可以提高接收BD队列的容错性。附图说明
[0048] 图1为现有的BD队列的运行机理示意图;
[0049] 图2为现有的Target设备向Host设备传输数据的示意图;
[0050] 图3为现有的Target设备向Host设备传输数据时,BD或Packet丢失时的示例图;
[0051] 图4为本发明实施例提供的接收BD队列的维护方法流程图
[0052] 图5为本发明又一实施例提供的接收BD队列的维护方法流程图;
[0053] 图6为本发明实施例提供的Target设备的组成示意图;
[0054] 图7为本发明实施例提供的Host设备的组成示意图。

具体实施方式

[0055] 下面结合附图及具体实施例对本发明再作进一步详细的说明。
[0056] 对现有的BD队列运行机理进行分析发现:如果物理总线上的数据传输完全没有丢失,那么能够保证报文的传输、接收处理始终正常进行。但是在实际的使用场景中,任何一种数据总线都不能完全保证在总线上传输的数据不丢失,尤其是当物理数据总线连接拓扑比较复杂,硬件信号环境比较恶劣时更是如此,极有可能因为物理信号的瞬间劣化导致数据信息的丢失。当前各种高速总线的数据传输一般都是基于报文或者数据块而不是基于字节流的,一次总线操作完成一块数据的传输,所以,数据的丢失也是一个完整的报文或者数据块的丢失。
[0057] 假如某个时刻物理总线硬件信号突然劣化,则可能导致某个报文或者某个报文对应的BD在总线传输时丢失了,而这种丢失,对于目前的BD队列机制是无法容忍的。如图3所示,假设Target设备在通过物理总线向Host设备传输数据时,Bd2和Packet3(报文3)丢失了,则:
[0058] 1)初始时,Host设备维护的Tail指针指向Bd1;Host设备发现Bd1中的Valid标识指示有效,则根据Bd1从对应Buffer中取出报文交给上层模块处理,并挪动Tail指针指向Bd2;因为Bd2的信息在总线上丢失了,但是Host设备感知不到,从而Host设备根据Bd2中的Valid标识认为Bd2是无效的,同时隐含着Bd2以后的Bd3、Bd4等都是无效的,所以,Host设备会错误地认为当前接收BD队列已经空了,没有报文等待处理,Tail指针因此也不会再向前挪动;
[0059] 2)后续的报文会触发Target设备持续向前挪动Head指针,直到Head指针追上Tail指针,Target设备会认为接收BD队列满,再也没有空闲BD可以接收报文,因此也不再向前挪动Head指针;
[0060] 3)Tail指针一直要等到Bd2变成有效才向前挪动;而Head指针一直要等到Tail指针向前挪动了才能继续接收报文,这就进入了一种阻塞状态:Head和Tail指针都静止不动,而后续的报文都收不上来,全部丢弃了。
[0061] 4)假如Bd2没有丢失,则Tail指针会正常向前挪动到Bd3,但是Bd3对应的报文Packet3在总线上丢了,Bd3指向的Buffer所包含的是无效的数据,但是Bd3没有办法感知到,这样Host设备会根据Bd3取走一块无效的数据交给上层模块进行处理,同样是有险的。
[0062] 由此可见,当前的BD队列运行机理是无法承受物理层面的数据丢失的。
[0063] 图4为本发明实施例提供的接收BD队列的维护方法流程图,如图4所示,其具体步骤如下:
[0064] 步骤401:预先在每个BD指向的Buffer中预留一区域,该区域用于存放该Buffer指向的BD的地址。
[0065] 步骤402:当Target设备接收到一个报文时,将报文写入Head指针指向BD对应的Buffer,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
[0066] 步骤403:Host设备查看Tail指针指向的BD,读取该BD的Valid标识,判断该标识是否指示“有效”,若是,执行步骤404;否则,执行步骤408。
[0067] 步骤404:Host设备从该BD中读取Buffer地址,根据该Buffer地址找到对应的Buffer。
[0068] 步骤405:Host设备判断是否从该Buffer的预留区域中读取到信息且该信息为该BD的地址,若是,执行步骤406;否则,执行步骤407。
[0069] 步骤406:Host设备确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,将该Buffer的预留区域清零,同时将Tail指针向前挪动到指向下一个BD,本流程结束。
[0070] 步骤407:Host设备确认报文丢失,直接将BD的控制信息恢复为初始值,同时将Tail指针向前挪动到指向下一个BD,本流程结束。
[0071] 步骤408:Host设备不作进一步处理,本流程结束。
[0072] 仍以图3为例,仍然假设Packet3丢失。采用图4所示本发明提供的方案后,Host设备从Bd3中读取Buffer地址后,会先查询Buffer的预留区域,发现该预留区域中存放的并不是Bd3的地址,则得知Packet3丢失,不从Buffer读取数据递交上层模块处理,直接将Tail指针向前挪动到Bd4。
[0073] 从图4所示本发明实施例可以看出:通过在Buffer中写入对应BD的地址,使得Host设备能够得知Packet是否丢失,从而提高了接收BD队列的容错性和可靠性。
[0074] 图5为本发明又一实施例提供的接收BD队列的维护方法流程图,如图5所示,其具体步骤如下:
[0075] 步骤501:预先在每个BD指向的Buffer中预留一固定区域,该区域用于存放该Buffer指向的BD的地址。
[0076] 步骤502:当Target设备接收到一个报文时,将报文写入Head指针指向BD对应的Buffer,在该Buffer的预留区域中写入该BD的地址,将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
[0077] 步骤503:Target设备按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
[0078] 若一个BD中写入了报文描述信息,即该BD对应Buffer中写入了报文,则该BD的状态为“有效”,否则,该BD的状态为“无效”。
[0079] 在实际应用中,状态快照可以一个位图表示,位图中的每个比特对应一个BD。比如,若一个接收BD队列中有8个BD,则其状态快照可以用1个字节的8个比特的位图来表示。如:整个接收BD队列为空,则其位图就是0;整个接收BD队列为满,则其位图就是0xFF;接收BD队列的前4个BD有效,则其位图是0xF0。
[0080] 这里,需要说明的是,若接收BD队列较长,则其状态快照也是较长的,例如:接收BD队列长度为1024,则其状态快照位图需要128个字节,这样,若在每次状态快照变化时,都将状态快照同步到Host设备,则会占用较多的传输资源。因此,在实际应用中可以设定对接收BD队列的状态作快照,并将该状态快照同步到Host设备的策略如下:
[0081] 策略1)Target设备周期性地对整个接收BD队列的状态分次作快照并分次同步到Host设备,即,将整个接收BD队列划分为n(n>1)个单元,按照顺序,依次对每个单元的状态作快照并同步到Host设备。
[0082] 例如:接收BD队列长度为1024,设为Bd0~1023,则将其划分为8个单元,每个单元的长度为128比特,则第一次只对第一个单元,即Bd0~Bd127的状态作快照并同步到Host设备,第二次只对第二个单元,即Bd128~Bd255的状态作快照并同步到Host设备,依此类推,循环进行。
[0083] 策略2)当Target设备发现在预设数目个时钟周期内Tail指针未向前移动,且Head指针与Tail指针不相等时,开始持续地对整个接收BD队列的状态一次性地或分次作快照并同步到Host设备,直至Tail指针向前挪动时停止同步。
[0084] 步骤504:当Host设备接收到Target设备发来的状态快照时,执行步骤505~514。
[0085] 步骤505:Host设备以该状态快照更新自身保存的接收BD队列的状态快照。
[0086] 当然,若该状态快照为target设备第一次发来的,则Host设备直接保存即可。
[0087] 步骤506:Host设备在要从Buffer中读取数据时,查看Tail指针指向的BD,读取该BD的Valid标识,判断该Valid标识是否指示“有效”,若是,执行步骤511;否则,执行步骤507。
[0088] 步骤507:Host设备判断自身保存的接收BD队列的状态快照中是否包含了该BD的状态,若是,执行步骤508;否则,执行步骤510。
[0089] 如上述对步骤503的说明,为了减少对传输资源的占用,Target设备可能不会实时地将状态快照同步到Host设备,同时在同步状态快照时,也可能不会将所有BD的状态都一次性同步。
[0090] 步骤508:Host设备判断状态快照中该BD的状态是否为“有效”,若是,执行步骤509;否则,执行步骤510。
[0091] 步骤509:Host设备确认该BD的真正状态为“有效”,确认该BD的信息丢失,则将Tail指针向前挪动到指向下一个BD,将自身保存的状态快照中该BD的状态由“有效”更新为“无效”,本流程结束。
[0092] 此时,无需为BD重新分配Buffer,该BD仍对应原来的Buffer即可,为可靠起见,可将该Buffer的预留区域清零。
[0093] 步骤510:Host设备不作进一步处理,本流程结束。
[0094] 若BD的Valid标识指示“无效”,同时状态快照中该BD的状态也为“无效”,则Host设备可确认该BD的状态确实为“无效”。
[0095] 步骤511:Host设备从该BD中读取Buffer地址,根据该Buffer地址找到对应的Buffer。
[0096] 步骤512:Host设备判断是否从该Buffer的预留区域中读取到信息且该信息为该BD的地址,若是,执行步骤513;否则,执行步骤514。
[0097] 步骤513:Host设备确认报文没有丢失,从该Buffer中取出报文数据交给上层模块处理,然后将BD的控制信息恢复为初始值,并为该BD重新分配一块新的Buffer,将该Buffer的预留区域清零,同时将Tail指针向前挪动到指向下一个BD,且,将自身保存的状态快照中该BD的状态更新为“无效”,本流程结束。
[0098] 步骤514:Host设备确认报文丢失,直接将BD的控制信息恢复为初始值,同时将Tail指针向前挪动到指向下一个BD,且,将自身保存的状态快照中该BD的状态更新为“无效”,本流程结束。
[0099] 当Target设备没有同步过来Tail指针指向的BD的状态时,Host设备按照现有方法进行处理即可。
[0100] 仍以图3为例,采用图5所示本发明提供的方案后,Target设备会按策略对接收BD队列的状态作快照并同步到Host设备。
[0101] A、仍然假设Bd2丢失
[0102] 则:当Tail指针指向Bd2时,虽然Bd2中的Valid标识指示无效,但是Host设备会根据Target设备传送过来的状态快照,得知Bd2应该是有效的,从而得知Bd2中的信息在总线上丢了,因此,Host设备继续向前挪动Tail指针到Bd3。这样就不会陷入阻塞状态了。
[0103] B、仍然假设Packet3丢失
[0104] 此时,Host设备根据Target设备传送过来的状态快照,得知Bd3是有效的,从Bd3中读取Buffer地址,然后查询Buffer的预留区域,发现该预留区域中存放的并不是Bd3的地址,则得知Packet3丢失,不从Buffer读取数据递交上层模块处理,直接将Tail指针向前挪动到Bd4。
[0105] 从图5所示本发明实施例可以看出:通过Target设备在Buffer中写入对应BD的地址,同时按策略对接收BD队列中每个BD的状态作快照并同步到Host设备,使得Host设备能够得知Packet和BD是否丢失,更进一步提高了接收BD队列的容错性和可靠性。
[0106] 图6为本发明实施例提供的Target设备的组成示意图,如图6所示,其主要包括:报文写入模块61和状态快照同步模块62,其中:
[0107] 报文写入模块61:当将报文写入Head指针指向BD对应的Buffer时,在该Buffer的预留区域中写入该BD的地址,并将报文描述信息写入该BD,将Head指针向前挪动到指向下一个BD。
[0108] 状态快照同步模块62:按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备,该状态快照包含接收BD队列中的BD的实时状态:有效或者无效。
[0109] 其中,状态快照同步模块62按策略对接收BD队列的状态作快照,并将该状态快照同步到Host设备包括:
[0110] 周期性地对整个接收BD队列的状态一次性地或分次作快照,并将状态快照同步到Host设备;
[0111] 或者,当Target设备发现在预设数目个时钟周期内Tail指针未向前移动,且Head指针与Tail指针不相等时,开始持续地对整个接收BD队列的状态一次性地或分次作快照,并将状态快照同步到Host设备,直至Tail指针向前挪动时停止同步。
[0112] 图7为本发明实施例提供的Host设备的组成示意图,如图7所示,其主要包括:状态快照接收保存模块71和报文读取模块72,其中:
[0113] 状态快照接收保存模块71:接收Target设备发来的接收BD队列的状态快照,该状态快照记录了接收BD队列中的BD的实时状态:有效或者无效,以该状态快照更新自身保存的接收BD队列的状态快照。
[0114] 报文读取模块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的预留区域中写入的。
[0115] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
相关专利内容
标题 发布/更新时间 阅读量
一种结构更为紧凑的指针 2020-05-13 562
一种新型导光结构的指针 2020-05-12 105
一种车用仪表指针 2020-05-11 525
指针钟表 2020-05-13 688
一种双色指针 2020-05-11 744
一种全自动指针装配机 2020-05-11 697
一种汽车仪表指针自动生产设备 2020-05-12 359
一种汽车仪表指针直径测量仪 2020-05-12 410
一种指针全自动装配机 2020-05-11 391
汽车仪表指针 2020-05-12 367
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈