本发明涉及数据管理技术,尤其涉及一种数据管理方法及装置。
背景技术:
在网络数据的管理过程中,数据的存储方式往往能够影响数据处理的性能。目前数据存储的方式包括以下两种:
一种数据存储的方法是采用独享的空间配置,即为每一个队列分配各自单独使用的空间,地址空间都是相互独立的,互相不会造成影响。这种方法结构简单,如果使用片内或者片外存储空间,只需要分配独立的地址即可;如果使用先入先出(fifo,first-infirst-out)类缓存结构,则必须为每个队列设置足够大深度的fifo。这种方法的缺点是资源占用大,在队列较少的情况下,极易造成空间的浪费,并且对于数据突发的处理能力相当薄弱。
另一种数据存储的方法是采用共享的空间配置,即为所有的队列配置一个总的共享空间,一般采用链表的方式来实现。采用链表的实现方式能够充分利用共享空间,在队列较多的情况下能够做到相对公平占用这片共享空间,而在队列较小的情况能够做到贪婪占用,极大的提高了资源利用率。这种做法的好处是即能够节省片内资源,又能够很好的处理突发数据流量的情况,但是却存在如下缺点:
在数据流量较小的情况下,由于采用链表的装置,链表的入队和出队都需要浪费时间,尤其是使用片外链表的情况下,由于受到片外存储装置(如双倍速率同步动态随机存储器(ddr,doubledatarate))性能的影响,极易导致存储在链表中数据不能够被很快的调度,严重制约链表的数据处理能力。
技术实现要素:
为解决上述技术问题,本发明实施例提供了一种数据管理方法及装置。
本发明实施例提供的数据管理方法,包括:
获得队列数据时,判断所述队列数据是发送至缓存或是发送至链表;
当判断出所述队列数据是发送至所述缓存时,将所述队列数据发送至所述缓存进行存储;当判断出所述队列数据是发送至所述链表时,将所述队列数据发送至所述链表进行存储;
当调度队列数据时,从所述缓存中查找所述队列数据;通过所述缓存确定出所述队列数据的部分或全部存储在所述链表时,通过所述缓存向所述链表调度所述队列数据。
本发明实施例中,所述判断所述队列数据是发送至缓存或是发送至链表,包括:
判断所述缓存中分配给队列的空间是否已满,以及判断所述队列在所述链表中是否处于被调用;
当所述缓存中分配给队列的空间已满,或者所述队列在所述链表中处于被调用时,将所述队列数据发送至所述链表;
当所述缓存中分配给队列的空间未满,且所述队列在所述链表中处于未被调用时,将所述队列数据发送至所述缓存。
本发明实施例中,所述将所述队列数据发送至所述链表进行存储,包括:
根据队列号读取队列的链表地址,根据所述链表地址将所述队列数据存储至所述链表;
更新所述链表的占用信息和空闲信息。
本发明实施例中,所述通过所述缓存向所述链表调度所述队列数据,包括:
通过所述缓存向所述链表发送调度指令;
所述链表接收到所述调度指令时,根据队列号读取队列的链表地址,根据所述链表地址从所述链表中读取队列数据。
本发明实施例中,所述根据所述链表地址从所述链表中读取队列数据,包括:
对所述链表地址进行缓存,当所述链表存储所述队列数据成功后,根据所述链表地址从所述链表中读取队列数据。
本发明实施例提供的数据管理装置,包括:缓存、链表;
推送(push)模块,用于获得队列数据时,判断所述队列数据是发送至缓存或是发送至链表;当判断出所述队列数据是发送至所述缓存时,将所述队列数据发送至所述缓存进行存储;
链表入队模块,用于当判断出所述队列数据是发送至所述链表时,将所述队列数据发送至所述链表进行存储;
所述缓存,用于当调度队列数据时,从所述缓存中查找所述队列数据;确定出所述队列数据的部分或全部存储在所述链表时,向所述调度(pull)模块发送调度指令;
所述pull模块,用于接收到所述缓存发送的调度指令时,向链表出队模块发送队列请求信息;
所述链表出队模块,用于接收到所述队列请求信息时,向所述链表调度所述队列数据。
本发明实施例中,所述push模块,还用于判断所述缓存中分配给队列的空间是否已满,以及判断所述队列在所述链表中是否处于被调用;当所述缓存中分配给队列的空间未满,且所述队列在所述链表中处于未被调用时,将所述队列数据发送至所述缓存;
所述链表入队模块,还用于当所述缓存中分配给队列的空间已满,或者所述队列在所述链表中处于被调用时,将所述队列数据发送至所述链表。
本发明实施例中,所述链表入队模块,还用于根据队列号读取队列的链表地址,根据所述链表地址将所述队列数据存储至所述链表;更新所述链表的占用信息和空闲信息。
本发明实施例中,所述链表出队模块,还用于接收到所述队列请求信息时, 根据队列号读取队列的链表地址,根据所述链表地址从所述链表中读取队列数据。
本发明实施例中,所述装置还包括:
出队指令缓冲模块,用于对所述链表地址进行缓存;当所述链表存储所述队列数据成功后,将所述链表地址发送给所述链表出队模块;
所述链表出队模块,还用于接收到所述链表地址后,根据所述链表地址从所述链表中读取队列数据。
本发明实施例的技术方案中,获得队列数据时,判断所述队列数据是发送至缓存或是发送至链表;当判断出所述队列数据是发送至所述缓存时,将所述队列数据发送至所述缓存进行存储;当判断出所述队列数据是发送至所述链表时,将所述队列数据发送至所述链表进行存储;当调度队列数据时,从所述缓存中查找所述队列数据;通过所述缓存确定出所述队列数据的部分或全部存储在所述链表时,通过所述缓存向所述链表调度所述队列数据。可见,本发明实施例结合了缓存(cache)和链表进行队列管理,提高了数据访问速率,充分利用了cache的独享和链表的共享空间,解决了网络突发流量造成的数据处理能力不足的问题,同时大大提高了链表的处理能力。
附图说明
图1为本发明实施例的数据管理方法的流程示意图;
图2为本发明实施例的cache的示意图;
图3为本发明另一实施例的数据管理方法的流程示意图;
图4为本发明实施例的数据管理装置的结构组成示意图。
具体实施方式
为了能够更加详尽地了解本发明的特点与技术内容,下面结合附图对本发明的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明。
随着链表技术在互联网交换芯片中的运用不断加深,如何能够提高链表的 处理能力受到越来越广泛的关注。由于链表本身的入队出队会导致数据处理能力的不足,尤其是使用片外链表的情况下,此时数据处理的性能会受到片外较大的约束。本发明实施例对片外链表的运用,提出了通过cache和片外链表组合使用,对队列数据进行管理的方法。本发明实施例的技术方案,保证在数据流量较小的情况下可以直接使用高速的cache对数据进行管理,而在突发流量的情况下可以使用cache和片外链表的组合对数据进行管理。结合了高速cache和链表之间的push-pull机制,能够大大提高片外链表的数据处理性能。
图1为本发明实施例的数据管理方法的流程示意图,如图1所示,所述数据管理方法包括以下步骤:
步骤101:获得队列数据时,判断所述队列数据是发送至缓存或是发送至链表。
本发明实施例的数据管理方法应用于数据管理装置中,所述数据管理装置包括:缓存、链表、push模块、链表入队模块、pull模块、链表出队模块、出队指令缓冲模块。
push模块控制数据何时直接push进cache进行高速处理,而不需要使用片外链表空间。具体地,push模块获得队列数据时,判断所述队列数据是发送至缓存或是发送至链表。具体地,判断所述缓存中分配给队列的空间是否已满,以及判断所述队列在所述链表中是否处于被调用。
步骤102:当判断出所述队列数据是发送至所述缓存时,将所述队列数据发送至所述缓存进行存储;当判断出所述队列数据是发送至所述链表时,将所述队列数据发送至所述链表进行存储。
当判断出所述队列数据是发送至所述缓存时,push模块将所述队列数据发送至所述缓存进行存储。
当判断出所述队列数据是发送至所述链表时,链表入队模块将所述队列数据发送至所述链表进行存储。
具体地,当所述缓存中分配给队列的空间已满,或者所述队列在所述链表中处于被调用时,push模块将所述队列数据发送至所述缓存进行存储。当所述 缓存中分配给队列的空间未满,且所述队列在所述链表中处于未被调用时,链表入队模块将所述队列数据发送至所述链表进行存储。
本发明实施例中,所述链表入队模块根据队列号读取队列的链表地址,根据所述链表地址将所述队列数据存储至所述链表;更新所述链表的占用信息和空闲信息。
步骤103:当调度队列数据时,从所述缓存中查找所述队列数据;通过所述缓存确定出所述队列数据的部分或全部存储在所述链表时,通过所述缓存向所述链表调度所述队列数据。
本发明实施例中,当队列数据占用了片外链表空间时,如果cache中的数据产生被调度的动作时,pull模块便会发出队列请求信息,指示需要从片外链表空间pull数据来填充cache;如果数据没有占用片外链表空间,则不启动pull模块。
本发明实施例中,cache模块用来存储直接push的队列数据以及从片外链表pull的队列数据,cache模块中采用分块随机存取存储器(ram,random-accessmemory)来实现,也就是将一片ram制成多个类似fifo功能的装置,每个队列单独占用一个fifo。参照图2,图2为本发明实施例的cache的示意图,使用了ram来实现多个fifi的功能,包括写cache控制模块、写指针、读cache控制模块和读指针等构成。
本发明实施例中,链表出队模块接收到队列请求信息时,根据队列号读取队列的链表地址,根据所述链表地址从所述链表中读取队列数据。
本发明实施例中,出队指令缓冲模块对所述链表地址进行缓存;当所述链表存储所述队列数据成功后,将所述链表地址发送给所述链表出队模块;链表出队模块接收到所述链表地址后,根据所述链表地址从所述链表中读取队列数据。
具体地,出队指令缓冲模块缓冲需要从片外链表空间提取队列数据的链表地址。由于在使用片外链表空间存储数据的时候,不能保证数据能够很快的写入,需要等待片外空间写入成功标志。因此,当cache进行调度发出调度指令 需要从片外链表空间读取数据的情况下,必须先进行链表地址的缓冲,等待之前的写入成功标志有效之后,才向片外链表空间发起数据读取指令。
本发明实施例的技术方案,结合了独享和共享的特征,在数据流量较小的情况下,可以直接经过cache进行数据管理,无需进行链表操作;而在数据流量较大的情况下,也可以通过片外链表和cache之间的push-pull机制来大大的加快数据处理能力。
图3为本发明另一实施例的数据管理方法的流程图,当有队列数据需要进行队列管理时,首先经过push模块进行判断,满足push条件则直接进入cache,将数据流按队列的划分直接送入cache进行数据管理;如果当队列数据到来的过程中,cache中分配给队列的空间已满,或者此时队列空间非满但是该队列的pull模块正在工作,则直接让队列数据进入片外链表,片外链表入队模块根据队列号读取队列链表地址,包括队列头指针,队列尾指针和空闲链表尾指针。同时更新链表的占用信息和空闲信息。
如果发生数据调度的动作,则直接从cache中读取数据,如果该队列没有占用链表空间,不会启动pull模块;否则此时会触发pull模块,pull模块向片外链表出队模块发送出队请求信息;片外链表出队模块根据队列号读取链表的地址,包括队列头指针,队列尾指针,空闲链表头指针。出队完成后更新链表信息。通过片外链表出队模块计算片外链表空间的地址,然后将片外链表出队信息存储到片外出队指令缓冲装置中。进行片外空间写入成功标志的判断,只有当数据成功写入片外ddr,并且返回成功信息之后,才能将存储在片外出队指令缓存模块中的信息发送给ddr,进行读数据的操作。等到ddr中返回有效数据之后,将数据发往cache,完成pull的操作。
图4为本发明实施例的数据管理装置的结构组成示意图,如图4所示,所述装置包括:缓存11、链表12;
推送push模块13,用于获得队列数据时,判断所述队列数据是发送至缓存11或是发送至链表12;当判断出所述队列数据是发送至所述缓存11时,将所述队列数据发送至所述缓存11进行存储;
链表入队模块14,用于当判断出所述队列数据是发送至所述链表12时,将所述队列数据发送至所述链表12进行存储;
所述缓存11,用于当调度队列数据时,从所述缓存11中查找所述队列数据;确定出所述队列数据的部分或全部存储在所述链表12时,向所述调度pull模块15发送调度指令;
所述pull模块15,用于接收到所述缓存11发送的调度指令时,向链表出队模块16发送队列请求信息;
所述链表出队模块16,用于接收到所述队列请求信息时,向所述链表12调度所述队列数据。
所述push模块13,还用于判断所述缓存11中分配给队列的空间是否已满,以及判断所述队列在所述链表12中是否处于被调用;当所述缓存11中分配给队列的空间未满,且所述队列在所述链表12中处于未被调用时,将所述队列数据发送至所述缓存11;
所述链表入队模块14,还用于当所述缓存11中分配给队列的空间已满,或者所述队列在所述链表12中处于被调用时,将所述队列数据发送至所述链表12。
所述链表入队模块14,还用于根据队列号读取队列的链表12地址,根据所述链表12地址将所述队列数据存储至所述链表12;更新所述链表12的占用信息和空闲信息。
所述链表出队模块16,还用于接收到所述队列请求信息时,根据队列号读取队列的链表12地址,根据所述链表12地址从所述链表12中读取队列数据。
所述装置还包括:
出队指令缓冲模块17,用于对所述链表12地址进行缓存;当所述链表12存储所述队列数据成功后,将所述链表12地址发送给所述链表出队模块16;
所述链表出队模块16,还用于接收到所述链表12地址后,根据所述链表12地址从所述链表12中读取队列数据。
本领域技术人员应当理解,图4所示的数据管理装置中的各单元的实现功 能可参照前述数据管理方法的相关描述而理解。
本发明实施例所记载的技术方案之间,在不冲突的情况下,可以任意组合。
在本发明所提供的几个实施例中,应该理解到,所揭露的方法和智能设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。