CN112463654A - 一种带预测机制的cache实现方法 - Google Patents

一种带预测机制的cache实现方法 Download PDF

Info

Publication number
CN112463654A
CN112463654A CN202010073159.1A CN202010073159A CN112463654A CN 112463654 A CN112463654 A CN 112463654A CN 202010073159 A CN202010073159 A CN 202010073159A CN 112463654 A CN112463654 A CN 112463654A
Authority
CN
China
Prior art keywords
queue
queue information
information
network card
command
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.)
Pending
Application number
CN202010073159.1A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to PCT/CN2020/094031 priority Critical patent/WO2021042782A1/zh
Publication of CN112463654A publication Critical patent/CN112463654A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0853Cache with multiport tag or data arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供一种带预测机制的cache实现方法,本端服务器与远端服务器通过RDMA进行数据传输,本端服务器的存储器中保存有至少一个队列,每个队列用于保存IO命令,IO命令指示本端服务器向远端服务器进行数据访问,该方法包括:网卡预测高频队列信息,该高频队列信息被访问的可能性大于其他队列信息,在缓存空间中保存高频队列信息,该缓存空间在网卡中,该缓存空间保存的队列信息与存储器中的队列一一对应,每个队列信息用于网卡对队列信息对应的队列中的IO命令进行处理。本申请可以提高缓存空间的命中率。

Description

一种带预测机制的cache实现方法
本申请要求于2019年09月06日提交中国专利局、申请号为201910843922.1、申请名称为“一种带预测机制的cache实现方法”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及服务器领域,并且更具体地,涉及一种带预测机制的cache实现方法。
背景技术
在数据中心的网络***中,为了避免网络传输中服务器端数据处理的延迟,可以使用远程直接内存存取(remote direct memory access,RDMA)技术。在使用RDMA技术时,通信的本端服务器可以通过网卡将需要传输的数据传输至远端服务器的网卡中,并由该远端服务器的网卡将该需要传输的数据传输至远端服务器的内存中。
在实际业务中,本端服务器接收到待处理的输入输出(input output,IO)命令后,需要通过网卡对该待处理的IO命令进行处理,将处理后的IO命令发送至对端服务器的网卡中。网卡可以获取队列信息(例如,队列对的上下文(queue pair context,QPC))对待处理的IO命令进行处理,通常这些队列信息存储在服务器的存储器中,为了避免网卡频繁通过总线读写存储器中的队列信息,可以在网卡的缓存空间中缓存部分队列信息。由于网卡中缓存空间的规模较小,因此,需要对网卡的缓存空间中缓存的队列信息进行更新,如何提高网卡的缓存空间的命中率,减少由于网卡频繁通过总线读写存储器中存储的队列信息所造成的延时以及总线带宽的浪费成为当前亟需要解决的问题。
发明内容
本申请提供一种网卡的信息处理方法、芯片,可以提高缓存空间的命中率。
第一方面,提供了一种网卡的信息处理方法,本端服务器与远端服务器通过远程直接内存存取RDMA进行数据传输,本端服务器的存储器中保存有至少一个队列,每个队列用于保存输入输出IO命令,IO命令指示所述本端服务器向远端服务器进行数据访问,该方法包括:网卡预测高频队列信息,高频队列信息被访问的可能性大于其他队列信息;网卡在缓存空间中保存所述高频队列信息,其中,缓存空间在该网卡中,缓存空间保存的队列信息与本端服务器的存储器中的队列一一对应,每个队列信息用于该网卡对该队列信息对应的队列中的IO命令进行处理。
上述技术方案中,可以对高频队列信息进行预测,并将高频队列信息保存在网卡的缓存空间中,从而提高网卡的缓存空间的命中率,进一步地可以减少该网卡产生的总线读写访问次数,减少总线带宽浪费,降低网卡对待处理的IO命令的处理延时,提高服务器的传输性能。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:网卡在缓存空间中缓存的队列信息中查找当前被读取的队列信息,将当前被读取的队列信息确定为高频队列信息。
上述技术方案中,由于缓存空间中队列信息的读写访问是成对出现的,如果某一个队列信息接收到读请求,那么在短期内该队列信息被访问到的可能性较大,可以将该当前被读取的队列信息确定为高频队列信息,可以提高缓存空间的命中率。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:队列信息为队列对上下文QPC,网卡计算缓存空间中缓存的QPC中的读指针和写指针的差值,将读指针和写指针的差值大于预设阈值的QPC确定为高频队列信息。
上述技术方案中,可以根据QPC中的读指针和写指针的差值,确定该QPC对应的队列中待处理的IO命令的数量,从而根据待处理的IO命令的数量确定该QPC后续被访问的可能性,从而提高缓存空间的命中率。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:网卡获取IO命令调度顺序IO命令调度顺序记录了待处理的IO命令;网卡根据IO命令调度顺序,确定待处理的IO命令所属的队列对应的队列信息,将待处理的IO命令所属的队列对应的队列信息确定为高频队列信息。
上述技术方案中,可以先对未处理的IO命令进行预读,根据未处理的IO命令所属的队列信息确定处理该IO命令需要的队列信息,该队列信息后续被访问到的可能性较大,可以将该队列信息确定为高频队列信息,从而提高缓存空间的命中率。
需要说明的是,本申请中所述网卡还可以根据上述任意两种或三种预测方法预测高频队列信息,并将预测的高频队列信息保存在网卡的缓存空间中。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:网卡在缓存空间中缓存的队列信息中查找当前被读取的队列信息,将当前被读取的队列信息确定为高频队列信息,和,队列信息为队列对上下文QPC时,网卡计算缓存空间中缓存的QPC中的读指针和写指针的差值,将读指针和写指针的差值大于预设阈值的QPC确定为高频队列信息。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:网卡在缓存空间中缓存的队列信息中查找当前被读取的队列信息,将当前被读取的队列信息确定为高频队列信息,和,网卡获取IO命令调度顺序IO命令调度顺序记录了待处理的IO命令;网卡根据IO命令调度顺序,确定待处理的IO命令所属的队列对应的队列信息,将待处理的IO命令所属的队列对应的队列信息确定为高频队列信息。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:队列信息为队列对上下文QPC,网卡计算缓存空间中缓存的QPC中的读指针和写指针的差值,将读指针和写指针的差值大于预设阈值的QPC确定为高频队列信息,和,网卡获取IO命令调度顺序IO命令调度顺序记录了待处理的IO命令;网卡根据IO命令调度顺序,确定待处理的IO命令所属的队列对应的队列信息,将待处理的IO命令所属的队列对应的队列信息确定为高频队列信息。
在第一方面的另一种可能的实现方式中,网卡预测高频队列信息具体包括:队列信息为队列对上下文QPC,网卡计算缓存空间中缓存的QPC中的读指针和写指针的差值,将读指针和写指针的差值大于预设阈值的QPC确定为高频队列信息,和,网卡获取IO命令调度顺序IO命令调度顺序记录了待处理的IO命令;网卡根据IO命令调度顺序,确定待处理的IO命令所属的队列对应的队列信息,将待处理的IO命令所属的队列对应的队列信息确定为高频队列信息,和,网卡在缓存空间中缓存的队列信息中查找当前被读取的队列信息,将当前被读取的队列信息确定为高频队列信息。
在第一方面的另一种可能的实现方式中,所述网卡从所述存储器中读取所述高频队列信息;将所述高频队列信息保存在所述缓存空间中。
上述技术方案中,可以从存储器中获取网卡确定的高频队列信息并保存在网卡的缓存空间中,避免在处理IO命令时去存储器中获取所需的队列信息所造成的较大的处理延时。
在第一方面的另一种可能的实现方式中,所述网卡确定所述高频队列信息已经保存在所述缓存空间中;网卡设置缓存空间中的所述高频队列信息的状态信息,所述状态信息用于指示所述高频队列信息继续被保存在所述缓存空间中。
在第一方面的另一种可能的实现方式中,所述状态信息包括优先级信息或锁定信息,其中,优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,所述锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
在第一方面的另一种可能的实现方式中,优先级信息或锁定信息可以由状态标志位表示。
在第一方面的另一种可能的实现方式中,队列信息的状态标志位被置位,则表示该队列信息在缓存空间中处于暂不更新的锁定状态。
在第一方面的另一种可能的实现方式中,队列信息的优先级信息由多个状态标志位表示,每个状态标志位用于表示一种预测高频队列信息的方法获得的结果,当采用一种预测高频队列信息的方法对一个队列信息进行预测,获得的结果为该队列信息为高频队列信息时,则将该队列信息对应的状态标志位进行置位,结合每个队列信息的多个状态标志位,可以确定队列信息的被更新的优先级。
在第一方面的另一种可能的实现方式中,队列信息对应的状态标志位被置位的个数越多,该队列信息在缓存空间中被更新的优先级越低。
在第一方面的另一种可能的实现方式中,队列信息包括以下信息中的一种或多种:队列对上下文QPC,完成队列上下文CQC,事件队列上下文EQC。
在第一方面的一种可能的实现方式中,所述方法还包括:网卡还可以对缓存空间保存的部分或全部队列信息进行更新或替换。
在第一方面的另一种可能的实现方式中,所述方法还包括:网卡还可以根据优先级信息或锁定信息对缓存空间中存储的部分或全部队列信息进行更新或替换。
在第一方面的另一种可能的实现方式中,网卡根据所述缓存空间中的状态信息,将所述缓存空间中的队列信息按等级划分,其中,等级越高的队列信息被访问的可能性越大;优先更新所述缓存空间中存储的等级低的队列信息。
第二方面,提供了一种芯片,所述芯片应用于服务器***,所述服务器***中的本端服务器与远端服务器通过远程直接内存存取RDMA进行数据传输,所述本端服务器的存储器中保存有至少一个队列,每个队列用于保存输入输出IO命令,所述IO命令指示所述本端服务器向所述远端服务器进行数据访问,所述芯片包括:
预测单元,用于预测高频队列信息,所述高频队列信息被访问的可能性大于其他队列信息;
处理单元,用于在缓存空间中保存所述高频队列信息,其中,所述缓存空间在所述本端服务器的网卡中,所述缓存空间保存的队列信息与所述存储器中的队列一一对应,每个队列信息用于所述网卡对该队列信息对应的队列中的IO命令进行处理。
在第二方面的一种可能的实现方式中,所述处理单元还用于:对缓存空间保存的部分或全部队列信息进行更新或替换。
在第二方面的另一种可能的实现方式中,所述预测单元具体用于:在所述缓存空间中缓存的队列信息中查找当前被读取的队列信息,将所述当前被读取的队列信息确定为所述高频队列信息。
在第二方面的另一种可能的实现方式中,所述队列信息为队列对上下文QPC,所述预测单元具体用于:计算所述缓存空间中缓存的QPC中的读指针和写指针的差值,将所述读指针和所述写指针的差值大于预设阈值的QPC确定为所述高频队列信息。
在第二方面的另一种可能的实现方式中,所述预测单元具体用于:获取IO命令调度顺序,所述IO命令调度顺序记录了待处理的IO命令;根据所述IO命令调度顺序,确定所述待处理的IO命令所属的队列对应的队列信息,将所述待处理的IO命令所属的队列对应的队列信息确定为所述高频队列信息。
需要说明的是,本申请中所述网卡还可以根据上述任意两种或三种预测方法预测高频队列信息,并将预测的高频队列信息保存在网卡的缓存空间中。
在第二方面的另一种可能的实现方式中,所述处理单元具体用于:从所述存储器中读取所述高频队列信息;将所述高频队列信息保存在所述缓存空间中。
在第二方面的另一种可能的实现方式中,所述处理单元具体用于:确定所述高频队列信息已经保存在所述缓存空间中;设置所述缓存空间中的所述高频队列信息的状态信息,所述状态信息用于指示所述高频队列信息继续被保存在所述缓存空间中。
在第二方面的另一种可能的实现方式中,所述状态信息包括优先级信息或锁定信息,所述优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,所述锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
在第二方面的另一种可能的实现方式中,优先级信息或锁定信息可以由状态标志位表示。
在第二方面的另一种可能的实现方式中,所述队列信息包括以下信息中的一种或多种:队列对上下文QPC,完成队列上下文CQC,事件队列上下文EQC。
在第二方面的另一种可能的实现方式中,所述处理单元还用于:根据优先级信息或锁定信息对缓存空间中存储的部分或全部队列信息进行更新或替换。
在第二方面的另一种可能的实现方式中,所述处理单元具体用于:网卡所述缓存空间中的状态信息,将所述缓存空间中的队列信息按等级划分,其中,等级越高的队列信息被访问的可能性越大;优先更新所述缓存空间中存储的等级低的队列信息。
第二方面和第二方面的任意一个可能的实现方式的有益效果和第一方面以及第一方面的任意一个可能的实现方式的有益效果是对应的,对此,不再赘述。
第三方面,提供了一种网卡,包括:如第二方面或第二方面的任意一个可能的实现方式中的芯片。
第四方面,提供了一种服务器,包括存储器和如第三方面中的网卡。
附图说明
图1是本申请实施例提供的一种可能的服务器***示意图。
图2是本申请实施例提供的一种服务器处理IO命令的方法的示意性流程图。
图3是本申请实施例提供的一种可能的服务器110的示意性结构图。
图4是本申请实施例提供的一种网卡上的缓存空间中存储的队列信息的示意性结构图。
图5是本申请实施例提供的一种更新缓存空间中队列信息的方法的示意性流程图。
图6是本申请实施例提供的一种网卡上的缓存空间中划分的QPC优先级示意图。
图7是本申请实施例提供的一种芯片700的示意性结构图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
为了便于描述,下面先对本申请实施例涉及的几个概念进行说明。
(1)输入输出(input output,IO)命令
IO命令可以分为读命令和写命令,是指由服务器上运行的应用程序下发的用于指示向远端设备读数据或向远端设备写数据的命令。服务器的处理器可以接收IO命令,并将其存储在存储器中,以使得IO命令等待被处理。具体的,可以将IO命令存储在存储器的队列中。
需要说明的是,本申请实施例中提及的IO命令可以理解为待处理的IO命令。IO命令可以由网卡进行处理。
(2)队列
队列是一种特殊的线性表,可以在表的前端(front)进行删除操作,而在表的后端(rear)进行***操作。进行***操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列的数据元素又称为队列元素。在队列中***一个队列元素称为入队,从队列中删除一个队列元素称为出队。队列可以在一端***,在另一端删除,队列又可以被称为先进先出(first in first out,FIFO)线性表。
队列的类型可以有多种,例如,发送队列(send queue,SQ),接收队列(receivequeue,RQ),完成队列(complete queue,CQ),事件队列(event queue,EQ)。
本端服务器的发送队列和对端服务器的接收队列可以称为队列对(queue pair,QP)。
发送队列可以用于存储待处理的IO命令;接收队列用于存储处理IO命令所需的内存信息。
作为一个示例,本端服务器中的发送队列用于存储该本端服务器下发的用于指示向对端服务器读数据或写数据的IO命令,例如,该IO命令为读取对端服务器中存储的数据的读命令,本端服务器中的网卡可以将处理后的读命令发送至对端服务器,该读命令中可以包括需要读取的对端服务器中存储的数据的地址和长度等,以使得对端服务器可以根据该处理后的读命令,向本端服务器发送其需要读取的数据。
又如,该IO命令为向对端服务器中写入数据的写命令,本端服务器中的网卡可以对写命令进行处理之后,将处理后的写命令发送至对端服务器,以使得对端服务器可以根据处理后的写命令查找接收队列中的内存信息,根据查找到的内存信息将处理后的写命令中的数据存储至对端服务器的内存中。
同样的,对端服务器中的发送队列也可以存储该对端服务器下发的用于指示向本端服务器读数据或写数据的IO命令,并通过对端服务器中的网卡发送至本端服务器。具体的请参考上文中的描述,此处不再赘述。
完成队列用于存储完成命令。也就是说,服务器中的网卡对IO命令处理完成之后,可以将完成信息存储在完成队列中,该完成信息也可以称为完成命令。
事件队列用于存储事件命令。也就是说,服务器中的网卡在完成队列中存储完成命令后,当完成队列中的完成命令达到一定数量之后,可以产生事件命令。作为示例,事件命令中可以包括:事件类型,完成队列索引。以便于触发处理器对完成队列中存储的一个或多个完成命令进行处理。
应理解,在事件队列中存储事件命令可以避免服务器中的网卡在完成队列中存储一个完成命令后频繁地触发处理器对完成队列中存储的完成命令进行处理。
(3)队列信息
队列的上下文信息也可以称为队列信息,该队列信息与队列一一对应,用于处理该队列信息对应的队列中的IO命令。
本申请实施例中可以对在服务器中存储的至少一个队列信息被访问的可能性进行预测,如果某一个队列信息被访问的可能性大于其他队列信息被访问的可能性,该队列信息可以被称为高频队列信息。也就是说,高频队列信息被访问的可能性较大。具体的有关高频队列信息的确定方法请参见下文中描述的方法,此处暂不详述。
本申请中,队列信息可以包括以下信息中的一种或多种:队列对上下文(queuepair context,QPC),完成队列上下文(complete queue context,CQC),事件队列上下文(event queue context,EQC)。
具体的,作为示例。QPC用于服务器中的网卡处理该QPC对应的QP中存储的IO命令,CQC用于处理器对该CQC对应的CQ中存储的完成命令进行处理,EQC用于处理器对该EQC对应的EQ中存储的时间命令进行处理。
本申请实施例中,服务器中还可以存储至少一个队列信息中每个队列信息对应的状态信息,该状态信息用于指示与该状态信息对应的队列信息被访问的可能性。
(4)队列对上下文(queue pair context,QPC)
在对发送队列中存储的待处理的IO命令进行处理时,需要根据与QP对应的QPC,对该QP中存储的待处理的IO命令进行权限校验、虚拟地址转换等处理。
应理解,QPC是队列对的上下文,与存储待处理的IO命令的QP一一对应。网卡在根据QPC对待处理的IO命令进行处理时,需要根据待处理的IO命令所属的队列确定与该队列相对应的QPC,并根据该QPC对待处理的IO命令进行处理。
在数据中心的网络***中,为了避免网络传输中服务器端数据处理的延迟,可以使用远程直接数据存取(remote direct memory access,RDMA)技术。应理解,RDMA是将一个设备的内存中存储的数据快速传输至其他设备的内存中,而无需双方操作***介入的一种内存访问技术。RDMA技术可以适用于高吞吐、低延迟的网络通信,尤其适合在大规模并行计算机集群中使用。
作为示例,在使用RDMA技术时,通信的本端服务器可以通过网卡将需要传输的数据传输至远端服务器的网卡中,并由该远端服务器的网卡将需要传输的数据传输至远端服务器的内存中。
下面结合图1,对适用于本申请实施例的一种网络***进行详细描述。
图1是本申请实施例提供的一种可能的服务器***示意图。该服务器***中可以包括至少两个服务器,图1中以服务器110和服务器120作为示例进行描述。
需要说明的是,除了图1所示的器件外,服务器110以及服务器120中还可以包括通信接口以及作为外存的磁盘等其他器件,在此不做限制。
以服务器110为例。服务器110中可以包括存储器111、处理器112、网卡113。可选地,服务器110还可以包括总线114。其中,存储器111、处理器112以及网卡113可以通过总线114连接。总线114可以是快捷外设部件互连标准(peripheral component interconnectexpress,PCIE)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。所述总线114可以分为地址总线、数据总线、控制总线等。为便于表示,图1中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
处理器112是服务器110的运算核心和控制核心(control unit)。处理器112中可以包括多个处理器核(core)。处理器112可以是一块超大规模的集成电路。在处理器112中安装有操作***和其他软件程序,从而使得处理器112能够实现对存储器111、缓存、磁盘及网卡113的访问。可以理解的是,在本申请实施例中,处理器112中的core例如可以是中央处理器(central processing unit,CPU),还可以是图形处理器(graphics processingunit,GPU)或其他特定集成电路(application specific integrated circuit,ASIC)。
应理解,本申请实施例中的处理器112还可以为其他通用处理器、数字信号处理器(digital signal processor,DSP)、专用集成电路(application specific integratedcircuit,ASIC)、现成可编程门阵列(field programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器111是服务器110的主存。存储器111通常用来存放操作***中各种正在运行的软件程序、上层应用下发的输入输出(input output,IO)命令以及与外存交换的信息等。为了提高处理器112的访问速度,存储器111需要具备访问速度快的优点。在一些计算机***架构中,采用动态随机存取存储器(dynamic random access memory,DRAM)作为存储器111。处理器112能够通过内存控制器(图1中未示出)高速访问存储器111,对存储器111中的任意一个存储单元进行读操作和写操作。
还应理解,本申请实施例中的存储器111可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-only memory,ROM)、可编程只读存储器(programmable ROM,PROM)、可擦除可编程只读存储器(erasable PROM,EPROM)、电可擦除可编程只读存储器(electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(random access memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的随机存取存储器(random accessmemory,RAM)可用,例如静态随机存取存储器(static RAM,SRAM)、动态随机存取存储器(DRAM)、同步动态随机存取存储器(synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(double data rate SDRAM,DDR SDRAM)、增强型同步动态随机存取存储器(enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(synchlink DRAM,SLDRAM)和直接内存总线随机存取存储器(direct rambus RAM,DR RAM)。
网卡113用于使服务器110与通信网络中的其他服务器进行通讯。网卡可以内置在服务器110中,或者还可以作为服务器110的外接设备,并通过接口与服务器110连接。该接口可以是网络接口(network interface)。例如,PCIE接口。图1中以网卡113内置在服务器110中作为示例进行描述。
对于服务器120而言,可以包括存储器121、处理器122、网卡123。可选地,服务器120还可以包括总线124。服务器120的内部结构可以与服务器110类似,例如:存储器121、处理器122、网卡123分别与前述服务器110中的存储器111、处理器112、网卡113类似,具体的请参考上文对服务器110中各部分的描述,此处不再赘述。
在数据处理和通信的场景中,以通信网络中包括服务器110和服务器120作为示例。服务器110和服务器120上分别运行有应用(application,APP),例如,“天气预报”APP。在一个具体的例子中,为了实现高性能的计算,服务器110中的处理器112承担一部分的计算,将计算结果存储至存储器111,服务器120中的处理器122承担另一部分的计算,并将计算结果存储至存储器121。此时需要对存储器111中存储的计算结果以及存储器121中存储的计算结果进行汇总处理,例如,由服务器120中的处理器122对存储器111中存储的计算结果以及存储器121中存储的计算结果进行汇总处理。服务器110中运行的“天气预报”APP会下发IO命令,该IO命令为写命令,用于指示将存储器111中存储的计算结果写入存储器121中。
服务器110中的处理器112可以将上述IO命令通过总线114发送至存储器111。网卡113可以通过总线114从存储器111中获取上述IO命令,并对上述IO命令进行处理,该IO命令为写命令,网卡113从存储器111中获取写命令指示的需要向存储器121写入的数据。网卡113通过网络向服务器120的网卡123发送该数据。网卡123可以将接收到网卡113发送的数据,并通过总线124将该数据写入存储器121中。网卡123还可以将向存储器121写入数据的处理结果通过网络发送至网卡113,网卡113通过总线114将该结果存储至存储器111,该结果用于表示网卡123已经将处理器112需要向存储器121写入的数据成功存储至存储器121中。
下面结合图2,对服务器110对待处理的IO命令进行处理的实现过程进行描述。
图2是本申请实施例提供的一种服务器处理IO命令的方法的示意性流程图。如图2所示,该方法可以包括步骤210-240,下面分别对步骤210-240进行详细描述。
步骤210:服务器110中的处理器112将待处理的IO命令发送至存储器111。
具体地,本申请实施例中可以将待处理的IO命令存储至存储器111的发送队列中,该发送队列中可以存储一个或多个待处理的IO命令。
IO命令中的信息可以包括但不限于:IO命令所属队列的队列索引,生产者指针(producer index,PI),IO命令相关信息。
PI表示该待处理的IO命令在队列中的位置。PI也可以理解为该队列中待处理的IO命令的数量。该待处理的IO命令在队列中的排序可以是从队头到队尾从1开始计数,在该QP中增加一个待处理的IO命令,该PI计数加1。
PI还可以称为写指针(WT-POINTER),由服务器110中下发IO命令的上层应用维护。
IO命令相关信息可以包括但不限于:权限校验的密钥(key),IO命令的类型。其中,key用于对IO命令的权限进行校验,IO命令的类型例如可以是读命令或写命令等。待处理的IO命令中还可以包括:数据的长度(length),数据的虚拟地址(virtual address)等。
步骤220:处理器112向网卡113发送提示消息。
处理器112将待处理的IO命令发送至存储器111后,可以向网卡113发送提示消息,该提示消息用于指示存储器111中有待处理的IO命令。作为示例,该提示消息可以为门铃(door bell,DB)。
在一些实施例中,处理器112向网卡113发送的DB中可以包括:待处理的IO命令所属队列的队列索引,待处理的IO命令在该队列中的位置(例如,PI)。可选地,DB中还可以包括上述待处理的IO命令中包括的IO命令相关信息。
步骤230:网卡113对待处理的IO命令进行处理。
网卡113可以根据队列信息对待处理的IO命令进行处理。本申请实施例中对待处理的IO命令进行处理时使用到的队列信息可以是以下中的一种或任意多种的组合:队列对上下文(queue pair context,QPC),完成队列上下文(complete queue context,CQC),事件队列上下文(event queue context,EQC)。
以队列信息为QPC为例,该QPC与QP一一对应,QP中存储有处理器下发的待处理的IO命令。网卡113根据处理器112下发的提示消息确定发送队列中存储有待处理的IO命令,并根据存储待处理的IO命令的发送队列确定对应的QPC,根据该QPC对待处理的IO命令进行处理。例如,网卡113对待处理的IO命令中的读命令或写命令进行权限校验,或者对该读命令或写命令的虚拟地址转换等。
以队列信息为CQC为例,CQC与CQ一一对应,CQ中存储有网卡113下发的完成命令。例如,网卡113在处理完发送队列中的IO命令之后,可以将完成命令存储至CQ中。具体的,网卡113可以根据存储完成命令的CQ确定对应的CQC,并根据该CQC中的地址信息确定CQ的地址,以便于网卡113根据CQ的地址,将完成命令存储至CQ中。
以队列信息为EQC为例,EQC与EQ一一对应,EQ中存储有网卡113下发的事件命令。例如,网卡113在处理完QP中的IO命令后,可以将完成命令存储在CQ中。并在CQ中的完成命令达到一定数量之后,产生事件命令,网卡113将事件命令存储在EQ中。具体的,网卡113可以根据存储事件命令的EQ确定对应的EQC,并根据该EQC中的地址信息确定EQ的地址,以便于网卡113根据EQ的地址,将事件命令存储至EQ中。
下面对QPC的数据结构进行说明。
QPC中可以但不限于包括:PI、消费者指针(consumer index,CI)。其中,CI表示该QPC对应的发送队列中网卡113已经处理的IO命令的数量,也可以称为读指针(RD-POINTER),由网卡113维护。例如,网卡113处理完一个IO命令,修改存储该IO命令的QP对应的QPC中的CI,该CI计数加1。PI为该QP中待处理的IO命令的数量,有关PI的描述请参见上文中的说明,此处不再赘述。
QPC中还可以包括:队列状态,密钥(key),队列的物理基地址。其中,网卡113在对待处理的IO命令进行处理时,可以根据队列状态确定待处理的IO命令所属的队列是否可用或是否正常。网卡113还可以根据密钥对待处理的IO命令进行处理时,对待处理的IO命令的权限进行校验。网卡113还可以根据待处理的IO命令所属的队列的物理基地址,对该队列中存储的待处理的IO命令中读命令或写命令的虚拟地址进行转换,得到该待处理的IO命令中读命令或写命令的物理地址。
可选地,QPC中还可以包括其他相关数据,例如以下中的一种或多种组合:队列在存储器111中的数据长度,信用证,工作模式等。
网卡113可以根据QPC对待处理的IO命令进行处理。为了便于描述,假设待处理的IO命令存储在队列A中,队列A对应QPC A。例如,网卡113可以根据QPC A中包括的队列状态确定队列A是否可用或是否正常。又如,网卡113可以根据QPC A中包括的密钥对队列A中存储的待处理的IO命令的权限进行校验。又如,网卡113还可以根据QPC A中包括的队列的物理基地址,对队列A中存储的待处理的IO命令中读命令或写命令的虚拟地址进行转换,得到该待处理的IO命令中读命令或写命令的物理地址。
下面对CQC的数据结构进行说明。
CQC中可以包括:队列的物理基地址、PI、CI。其中,队列的物理基地址表示CQ在内存中的物理基地址,以便于网卡113根据该物理基地址在CQ中存储完成命令。PI表示CQC对应的CQ中网卡113存储的完成命令的数量。例如,网卡113存储一个完成命令,修改存储该完成命令的CQ对应的CQC中的PI,该PI计数加1。CI表示CQC对应的CQ中处理器已经处理的完成命令的数量。例如,处理器处理一个完成命令,修改存储该完成命令的CQ对应的CQC中的CI,该CI计数加1。
下面对EQC的数据结构进行说明。
EQC中可以包括:队列的物理基地址、PI、CI。其中,队列的物理基地址表示EQ在内存中的物理基地址,以便于网卡113根据该物理基地址在EQ中存储事件命令。PI表示EQC对应的EQ中网卡113存储的事件命令的数量。例如,网卡113存储一个事件命令,修改存储该事件命令的EQ对应的EQ中的PI,该PI计数加1。CI表示EQC对应的EQ中处理器已经处理的事件命令的数量。例如,处理器处理一个事件命令,修改存储该事件命令的EQ对应的EQC中的CI,该CI计数加1。
步骤240:网卡113通过网络向服务器120的网卡123发送处理后的IO命令。
上述步骤210-步骤240描述了运行在本端服务器的上层应用发送待处理的IO命令后,本端服务器处理待处理的IO命令的过程。由上述流程可知,网卡需要根据队列信息,对该IO命令进行处理。因此,如何快速地获取对应的队列信息对IO命令的处理速度影响较大。
服务器的网卡中还可以包括缓存空间,例如,高速缓冲存储器(缓存空间)。缓存空间可以用于存储部分队列信息。网卡在对待处理的IO命令进行处理时,可以直接从网卡的缓存空间中获取存储的队列信息,并根据该队列信息对待处理的IO命令进行处理,从而避免网卡频繁通过总线读写存储器中的队列信息。
由于网卡中缓存空间的规模较小,只能缓存部分队列信息,因此,需要对缓存空间中缓存的队列信息进行更新。但是,由于存储待处理的IO命令的队列具有一定的随机性,一个队列与一个队列信息对应,较难替换出缓存空间中不常用的队列信息,导致缓存空间的命中率降低,进而导致网卡发起不必要的总线的读写访问,增大网卡对待处理的IO命令的处理延迟。
应理解,一段时间内缓存空间中缓存的被访问到的队列信息与所述缓存空间中所有缓存的比值称为缓存空间的命中率。该比值越大,可以理解为缓存空间的命中率越高。该比值越小,缓存空间的命中率越低。
本申请实施例提供的技术方案,可以提高网卡中缓存空间的命中率,进而减少由于网卡频繁通过总线读写存储器中存储的队列信息所造成的延时以及总线带宽的浪费,降低网卡对待处理的IO命令的处理延时,提高传输性能。
图3是本申请实施例提供的一种可能的服务器110的示意性结构图。如图3所示,服务器110可以包括存储器111、处理器112、网卡113。可选地,服务器110还可以包括总线114。其中,存储器111、处理器112以及网卡113可以通过总线114连接。
应理解,网卡113可以在服务器110中,或者还可以作为服务器110的外接设备,并通过接口与服务器110连接。图3中以网卡113在服务器110中为例进行描述。
存储器111中可以包括多个队列,例如,队列A、队列B,···,队列N。每个队列中可以存储一个或多个命令。以该队列为QP中的发送队列为例,该QP中可以存储一个或多个待处理的IO命令。以该队列为CQ为例,该CQ中可以存储一个或多个完成命令。以该队列为EQ为例,该EQ中可以存储一个或多个事件命令。
网卡113中可以包括:输入处理单元310,缓存空间320,预测单元330,处理单元340。下面分别对上述各个单元进行详细描述。
输入处理单元310:主要用于接收处理器112发送的提示消息(例如,DB),该DB用于指示存储器111的队列中存储有待处理的IO命令。输入处理单元310可以对待处理的IO命令进行处理。具体的,一种可能的实现方式中,输入处理单元310可以从存储器111的队列中获取待处理的IO命令以及该队列对应的QPC,并根据该QPC对待处理的IO命令进行处理。另一种可能的实现方式中,输入处理单元310还可以在对IO命令处理完成之后,可以产生完成命令。并根据存储该完成命令的CQ对应的CQC,对该完成命令进行处理。另一种可能的实现方式中,输入处理单元310还可以在对IO命令处理完成之后,可以产生事件命令。并根据存储该事件命令的EQ对应的EQC,对该事件命令进行处理。具体的处理过程请参考上文中的描述,此处不再赘述。
缓存空间320:用于存储队列信息,例如,缓存空间320中存储有队列信息A,队列信息B,···,队列信息M。其中,M小于N。队列信息A与队列A对应,用于对队列A中存储的命令进行处理,队列信息B与队列B对应,用于对队列B中存储的命令进行处理,以此类推。
一个队列信息可以包括队列信息条目(entry)以及对应的状态信息。参见图4,缓存空间320中的DATA是用于存储队列信息的队列信息条目的空间,CTRL_DATA用于存储DATA中的队列信息在缓存空间320中的对应的状态信息。例如,如图4所示,队列信息A可以包括队列信息条目A以及对应的状态信息A。
状态信息中存放队列信息在缓存空间320中的相关状态信息。该状态信息可以通过标志位来表示,或者也可以是通过字段来表示,本申请对此不做具体限定。
本申请实施例中队列信息可以包括以下中的一种或多种:QPC,CQC,EQC。
预测单元330:主要负责实现对缓存空间320中存储的队列信息后续被访问的可能性进行预测。如果某一个队列信息被访问的可能性大于其他队列信息被访问的可能性,该队列信息可以被称为高频队列信息。
处理单元340:主要负责在缓存空间中保存预测单元330确定的高频队列信息,还可以根据预测单元330得到的预测结果,对缓存空间320中存储的队列信息进行更新和替换,被替换出的队列信息所占用的存储空间可以用于存储其他新的队列信息。
应理解,这里的术语“单元”可以通过软件和/或硬件形式实现,对此不作具体限定。例如,“单元”可以是实现上述功能的软件程序、硬件电路或二者结合。当以上任一单元以软件实现的时候,所述软件以计算机程序指令的方式存在,并被存储在网卡的存储器中,网卡的处理器可以用于执行所述程序指令以实现以上方法流程。所述处理器可以包括但不限于以下至少一种:中央处理单元(central processing unit,CPU)、微处理器、数字信号处理器(digital signal processing,DSP)、微控制器(microcontroller unit,MCU)、或人工智能处理器等各类运行软件的计算设备,每种计算设备可包括一个或多个用于执行软件指令以进行运算或处理的核。该处理器可以是个单独的半导体芯片,也可以跟其他电路一起集成为一个半导体芯片,例如,可以跟其他电路(如编解码电路、硬件加速电路或各种总线和接口电路)构成一个片上***(system on chip,SoC),或者也可以作为一个专用集成电路(application-specific integrated circuit,ASIC)的内置处理器集成在所述ASIC当中,该集成了处理器的ASIC可以单独封装或者也可以跟其他电路封装在一起。该处理器除了包括用于执行软件指令以进行运算或处理的核外,还可进一步包括必要的硬件加速器,如现场可编程门阵列(field programmable gate array,FPGA)、可编程逻辑器件(programmable logic device,PLD)、或者实现专用逻辑运算的逻辑电路。
当以上单元以硬件电路实现的时候,所述硬件电路可能以通用中央处理器(central processing unit,CPU)、微控制器(micro controller unit,MCU)、微处理器(micro processing unit,MPU)、数字信号处理器(digital signal processing,DSP)、片上***(system on chip,SoC)来实现,当然也可以采用专用集成电路(application-specific integrated circuit,ASIC)实现,或可编程逻辑器件(programmable logicdevice,PLD)实现,上述PLD可以是复杂程序逻辑器件(complex programmable logicaldevice,CPLD),现场可编程门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)或其任意组合,其可以运行必要的软件或不依赖于软件以执行以上方法流程。
下面以图3所示的服务器作为示例,结合图5,对本申请实施例提供的一种网卡的信息处理的方法进行详细描述。
图5是本申请实施例提供的一种网卡的信息处理的方法的示意性流程图。如图5所示,该方法可以包括步骤510-530,下面分别对步骤510-530进行详细描述。
步骤510:预测单元330预测高频队列信息,该高频队列信息被访问的可能性大于其他队列信息。
本申请实施例中,预测单元330可以对缓存空间320中存储的至少一个队列信息被访问的可能性进行预测,将被访问的可能性大于其他队列信息的队列信息确定高频队列信息。
本申请实施例中缓存空间320中存储的至少一个队列信息可以是以下中的一种或任意多种的组合:QPC,CQC,EQC。具体的请参见上文中的描述,此处不再赘述。
以队列信息为QPC作为示例。一种可能的实现方式中,预测单元330可以根据QPC是否被输入处理单元310发送的读请求命中,对该QPC后续被访问的可能性进行预测。另一种可能的实现方式中,预测单元330还可以对待处理的IO命令进行预读(例如,获取IO命令调度顺序),并获取待处理的IO命令所属的队列的相关信息,从而根据该队列的相关信息对缓存空间320中存储的至少一个QPC后续被访问的可能性进行预测。另一种可能的实现方式中,预测单元330还可以根据QPC中的读指针(例如,CI)以及写指针(例如,PI)数值的差值,对该QPC后续被访问的可能性进行预测。
以队列信息为CQC作为示例。预测单元330对至少一个CQC被访问的可能性进行预测的方法与对至少一个QPC被访问的可能性进行预测的方法类似。例如,预测单元330可以根据CQC是否被输入处理单元310发送的读请求命中,对该CQC后续被访问的可能性进行预测。又如,预测单元330还可以对待处理的多个完成命令进行预读(例如,获取IO命令调度顺序),并获取待处理的多个完成命令所属的CQ的相关信息,从而根据该CQ的相关信息对缓存空间320中存储的至少一个CQC后续被访问的可能性进行预测。
以队列信息为EQC作为示例。预测单元330对至少一个EQC被访问的可能性进行预测的方法与对至少一个QPC被访问的可能性进行预测的方法类似。例如,预测单元330可以根据EQC是否被输入处理单元310发送的读请求命中,对该EQC后续被访问的可能性进行预测。又如,预测单元330还可以对待处理的多个事件命令进行预读,并获取待处理的多个事件命令所属的EQ的相关信息,从而根据该EQ的相关信息对缓存空间320中存储的至少一个EQC后续被访问的可能性进行预测。
下面会结合具体的例子对上述几种可能的实现方式进行详细描述,此处暂不详述。
应理解,预测单元330预测缓存空间320中存储的至少一个队列信息为高频队列信息的方法,可以是根据上述方法中的任意一种进行预测,还可以是根据上述任意两种方法的叠加进行预测,还可以是根据上述任意三种方法的叠加进行预测,本申请对此不做具体限定。
步骤520:处理单元340在缓存空间中保存所述高频队列信息。
本申请实施例中,缓存空间保存的队列信息与所述存储器中的队列一一对应,每个队列信息用于所述网卡对所述队列信息对应的队列中的IO命令进行处理。
作为示例。一种可能的实现方式中,网卡可以从存储器中读取所述高频队列信息,并将该高频队列信息保存在缓存空间中。另一种可能的实现方式中,网卡确定高频队列信息已经保存在所述缓存空间中,并在该缓存空间中设置高频队列信息的状态信息,所述状态信息用于指示高频队列信息继续被保存在所述缓存空间中。
本申请实施例中对状态信息不做具体限定,可以是优先级信息或锁定信息。其中,优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
具体的,处理单元340根据预测结果调整高频队列信息对应的状态信息。预测单元330可以对缓存空间320中存储的至少一个队列信息后续被访问的可能性进行预测,处理单元340设置预测得到的高频队列信息对应的状态信息,高频队列信息是缓存空间中存储的队列信息中的一个或多个,被确定为高频队列信息的队列信息的被访问的概率大于缓存空间中的其他队列信息的被访问的概率。
具体的实现方式有多种,一种可能的实现方式中,可以设置高频队列信息对应的标志位,例如,对该标志位进行置位操作。另一种可能的实现方式中,还可以修改所述至少一个队列信息中一个或多个队列信息对应的字段。
以设置所述高频队列信息对应的标志位为例。该高频队列信息对应的标志位可以包括以下中的一种或任意多种的组合:有效的(valid),脏的(dirty),锁(lock)等。其中,valid标志位表示队列信息条目是否有效,dirty标志位表示该队列信息条目是否是脏数据,lock标志位表示该队列信息条目是否被锁定。
本申请实施例中lock标志位可以有一个或多个,具体的有关lock标志位的数量,本申请对此不做具体限定。
步骤530:处理单元340根据缓存空间中队列信息对应的状态信息,对缓存空间320中存储的部分或全部队列信息进行更新。
以队列信息对应的状态信息为优先级信息为例,处理单元340可以根据缓存空间中存储的队列信息的优先级信息,将所述缓存空间中的队列信息按等级划分,其中,等级越高的队列信息被访问的可能性越大;并优先更新缓存空间中存储的等级低的队列信息。
以队列信息对应的状态信息为优先级信息为例,处理单元340可以根据优先级信息将所述缓存空间中的队列信息按等级划分,其中,等级越高的队列信息被访问的可能性越大;并优先更新缓存空间中存储的等级低的队列信息。
本申请实施例中,可以通过预测网卡的缓存空间中存储的队列信息被访问的可能性,确定高频队列信息,并优化缓存空间中队列信息替换或更新的策略,避免替换掉那些后续会被用到的高频队列信息,从而提高网卡的缓存空间的命中率,减少该网卡产生的总线读写访问次数,减少总线带宽浪费,降低网卡对待处理的IO命令的处理延时,提高传输性能。
下面以存储在缓存空间的队列信息为QPC作为示例,对前述步骤510和520中对缓存空间中存储的至少一个QPC被访问的可能性进行预测和设置高频队列信息的状态信息的不同实现方式进行详细描述。
一、在一种可能的实现方式中,由于网卡113中的输入处理单元310对缓存空间320中存储的QPC的读写访问是成对出现的,因此,预测单元330可以通过判断缓存空间320中存储的某一个QPC是否被读取,确定后续对该QPC访问的可能性较大,确定该QPC为高频队列信息。也就是说,网卡在所述缓存空间中缓存的QPC中查找当前被读取的QPC,将所述当前被读取的QPC确定为所述高频队列信息。
例如,输入处理单元310根据待处理的IO命令所属的队列A确定需要根据QPC A对该待处理的IO命令进行处理,输入处理单元310需要读该QPC A。在该待处理的IO命令处理完之后,需要修改该QPC A中的读指针(例如,CI),因此,后续还需要对该QPC A进行写操作。
对于缓存空间中当前已被读请求命中的QPC,处理单元340可以将这些QPC对应的状态信息进行设置。具体的,作为示例,可以设置QPC对应的标志位。比如,本申请实施例中一个标志位中可以包括锁(lock)1。处理单元340可以将QPC对应的lock 1标志位进行置位,例如,将lock 1标志位设置为1,lock 1标志位为1表示该QPC后续被访问的可能性较大。
可选的,当被读的QPC后续接收到输入处理单元310发送的写访问请求时,处理单元340可以将QPC对应的lock 1标志位清零,例如,将lock 1标志位设置为0,lock1标志位为0表示该QPC后续被访问的可能性较小。
二、另一种可能的实现方式中,预测单元330还可以获取待处理的IO命令的调度顺序,并根据所述IO命令调度顺序,确定所述待处理的IO命令所属的队列对应的QPC,将所述待处理的IO命令所属的队列对应的QPC确定为所述高频队列信息。应理解,该IO命令的调度顺序记录了待处理的IO命令。也就是说,在待处理的IO命令处理之前,预测单元330可以根据待处理的IO命令的预读结果对缓存空间320中存储的QPC短期被读的可能性进行预测。
例如,输入处理单元310接收到处理器112发送的多个提示消息(例如,DB),该多个DB指示服务器110中有多个待处理的IO命令。输入处理单元310可以在该多个待处理的IO命令处理之前,对多个DB进行预读,并将预读的结果发送至预测单元330。例如,输入处理单元310可以根据DB中包括的待处理的IO命令所属队列的队列索引,待处理的IO命令在该队列中的位置(例如,PI)等信息,确定待处理的IO命令所属队列信息。预测单元330可以根据输入处理单元310发送的多个待处理的IO命令所属队列信息确定对应的多个QPC,确定该多个QPC为高频队列信息。处理单元340将该多个QPC对应的状态信息进行设置。具体的,作为示例,可以设置这些QPC对应的标志位。比如,本申请实施例中一个标志位中可以包括锁(lock)2。预测单元330可以将QPC A对应的lock 2标志位进行置位,例如,将lock 2标志位设置为1。
可选地,在一些实施例中,如果根据上述预读结果确定的多个QPC没有存储在缓存空间320中,网卡可以提前从存储器111获取上述多个QPC,并存储在缓存空间320中。这样可以提前从存储器111中获取述多个QPC,避免在处理IO命令时去存储器111中获取述多个QPC所造成的较大的IO处理延时。
三、在另一种可能的实现方式中,预测单元330还可以根据读取缓存空间320中存储的QPC的PI,CI,并根据PI和CI之间的差来预测后续对该QPC的读写访问。当读写指针差值大于预设阈值时,说明该QPC后续被访问可能性较大,可以确定该QPC为高频队列信息。
应理解,PI表示缓存空间320中存储的QPC对应的队列中的IO命令的数量,该IO命令在队列中的排序可以是从队头到队尾从1开始计数。CI表示该QPC对应的队列中已经处理的IO命令的数量,处理一个IO命令,CI计数加1。因此,如果PI和CI之间的差值较大时,PI越大,CI越小,该队列中存储的待处理的IO命令的数量较大,后续与该队列对应的该QPC后续被访问的概率也较大。
例如,预测单元330可以实时比较QPC中PI和CI之间的差值,当该差值超过某一个预设阈值,处理单元340可以设置该QPC对应的状态信息。具体的,作为示例,可以设置QPC对应的标志位。比如,本申请实施例中一个标志位中可以包括锁(lock)3。处理单元340可以将QPC A对应的lock 3标志位置位,例如,将lock 3标志位设置为1。
可选的,当该QPC中PI和CI之间的差值小于某一个预设阈值,处理单元340可以将该QPC对应的lock 3标志位清零,例如,将lock 3标志位设置为0。
需要说明的是,上述列举的三种预测的方法,可以通过其中的一种或任意两种或三种预测方法的结合确定缓存空间中的高频队列信息。
还需要说明的是,以通过设置标志位来实现对状态信息的设置为例。标志位可以设置为一个,也可以设置为多个,标志位的数量的设置和选择的预测方法相关,本申请对此不做具体限定。例如,如果通过其中的一种方法获得预测结果,可以设置一个标志位,例如,一个锁(lock)标志位。又如,如果通过上述任意两种方法的结合获得预测结果,可以设置两个标志位,例如,锁(lock)1标志位和锁(lock)2标志位。又如,如果通过上述三种方法的结合获得预测结果,可以设置三个标志位,例如,锁(lock)1标志位,锁(lock)2标志位,锁(lock)3标志位。
本申请实施例中,预测单元330对至少一个CQC或EQC被访问的可能性进行预测的方法与对至少一个QPC被访问的可能性进行预测的方法类似。例如,由于网卡113中的输入处理单元310对缓存空间320中存储的CQC或EQC的读写访问是成对出现的,网卡113读取了缓存空间320中的CQC或EQC后,还会修改CQC或EQC中的PI指针。因此,预测单元330可以通过判断缓存空间320中存储的某一个CQC或EQC是否被读取,确定后续对该CQC或EQC访问的可能性较大,处理单元340可以调整该CQC或EQC对应的状态信息。又如,预测单元330还可以根据待处理的完成命令或事件命令的调度顺序,在待处理的完成命令或事件命令处理之前,根据待处理的完成命令或事件命令的预读结果对缓存空间320中存储的CQC或EQC短期被读的可能性进行预测。具体的预测过程与根据预测结果设置状态信息的过程请参考上文中对QPC的预测和状态信息的设置方法,此处不再赘述。
下面以通过上述三种预测方法的结合获得的预测结果,根据预测的结果设置的是至少一个队列信息对应的标志位作为示例。对处理单元340进行队列信息替换的具体实现过程进行详细描述。
为了便于描述,下面以QPC的预测结果为例进行说明。
处理单元340可以根据预测单元330设置的QPC对应的锁标志位,将缓存空间320中存储的至少一个QPC条目分为若干优先级。为了便于描述,图6中以将至少一个QPC条目划分为四个等级为例进行描述。
等级1:缓存空间320中短期内较大可能性会被访问的QPC条目,该QPC条目对应的lock1标志位置位。其余lock标志位,例如,lock2标志位,lock3标志位可以为1,或者也可以为0,本申请对此不作具体限定。
等级2:缓存空间320中短期内较大可能性会被访问的QPC条目,该QPC条目对应的lock 2标志位置位,lock 1标志位未置位。也就是说,该QPC条目对应的lock 2标志位为1,lock 1标志位为0。其余lock标志位,例如,lock 3标志位可以为1,或者也可以为0,本申请对此不作具体限定。
等级3:缓存空间320中长期内较大可能性会被访问的QPC条目,该QPC条目对应的lock 3标志位置位,lock1标志位以及lock 2标志位均未置位。也就是说,该QPC条目对应的lock 3标志位为1,lock1标志位以及lock 2标志位为0。
等级4:缓存空间320中长期内较小可能性会被访问的QPC条目,该QPC条目对应的lock1标志位、lock2标志位以及lock3标志位均未置位。也就是说,该QPC条目对应的lock1标志位、lock2标志位以及lock3标志位均为0。
参见图6,当缓存空间320中需要缓存新的QPC时,如果缓存空间320中有未被占用的空间(等级5),处理单元340则可以将新的QPC存储在未被占用的空间。如果缓存空间320没有未被占用的空间,则会发生替换,处理换单元340需要将部分QPC删掉,将新的QPC存储在删掉的QPC所占用的存储空间中。
处理单元340在进行替换时依据的优先级从高到低依次是:等级4-等级3-等级2-等级1。也就是说,本申请实施例中处理单元340可以依据锁标志位的含义进行替换。
作为一个示例,三个锁标志位(lock1标志位、lock2标志位、lock3标志位)都没有置位的QPC,例如,等级4对应的QPC,这些QPC在后续的访问过程中被访问的可能性较低,处理单元340可以优先考虑替换等级4对应的QPC。作为另一个示例,如果没有等级4对应的QPC,处理单元340可以考虑替换等级3对应的QPC,这些QPC在后续会有大量的读写访问,但是短期内这些IO命令还未被调度到,因此,也可以考虑替换等级3对应的QPC。作为另一个示例,如果没有等级3对应的QPC,处理单元340可以考虑替换等级2对应的QPC。作为另一个示例,如果没有等级2对应的QPC,处理单元340最后可以考虑替换等级1对应的QPC。
上述技术方案中,网卡可以***缓存空间中存储的QPC被访问的可能性,从而避免在需要对缓存空间中的QPC进行更新时,替换到后续会用到的QPC,优化缓存空间的替换策略,从而提高网卡的缓存空间的命中率。
本申请实施例中,处理单元340根据CQC被访问的预测结果或EQC被访问的预测结果,对存储的CQC或EQC进行替换的具体实现过程与上述方法类似,具体的请参考上文中以QPC的预测结果对QPC进行替换的方法,此处不再赘述。
图7是本申请实施例提供的一种芯片700的示意性结构图,芯片700应用于服务器***,所述服务器***中的本端服务器与远端服务器通过远程直接内存存取RDMA进行数据传输,所述本端服务器的存储器中保存有至少一个队列,每个队列用于保存输入输出IO命令,所述IO命令指示所述本端服务器向所述远端服务器进行数据访问,所述芯片700包括:
预测单元330,用于预测高频队列信息,所述高频队列信息被访问的可能性大于其他队列信息;
处理单元340,用于在缓存空间中保存所述高频队列信息,其中,所述缓存空间在所述本端服务器的网卡中,所述缓存空间保存的队列信息与所述存储器中的队列一一对应,每个队列信息用于所述网卡对该队列信息对应的队列中的IO命令进行处理。
可选地,所述处理单元340还用于:对缓存空间保存的部分或全部队列信息进行更新或替换。
可选地,所述预测单元330具体用于:在所述缓存空间中缓存的队列信息中查找当前被读取的队列信息,将所述当前被读取的队列信息确定为所述高频队列信息。
可选地,所述队列信息为队列对上下文QPC,所述预测单元330具体用于:计算所述缓存空间中缓存的QPC中的读指针和写指针的差值,将所述读指针和所述写指针的差值大于预设阈值的QPC确定为所述高频队列信息。
可选地,所述预测单元330具体用于:获取IO命令调度顺序,所述IO命令调度顺序记录了待处理的IO命令;根据所述IO命令调度顺序,确定所述待处理的IO命令所属的队列对应的队列信息,将所述待处理的IO命令所属的队列对应的队列信息确定为所述高频队列信息。
需要说明的是,本申请中所述网卡还可以根据上述任意两种或三种预测方法预测高频队列信息,并将预测的高频队列信息保存在网卡的缓存空间中。
可选地,所述处理单元340具体用于:从所述存储器中读取所述高频队列信息;将所述高频队列信息保存在所述缓存空间中。
可选地,所述处理单元340具体用于:确定所述高频队列信息已经保存在所述缓存空间中;设置所述缓存空间中的所述高频队列信息的状态信息,所述状态信息用于指示所述高频队列信息继续被保存在所述缓存空间中。
可选地,所述状态信息包括优先级信息或锁定信息,所述优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,所述锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
可选地,优先级信息或锁定信息可以由状态标志位表示。
可选地,所述队列信息包括以下信息中的一种或多种:队列对上下文QPC,完成队列上下文CQC,事件队列上下文EQC。
可选地,所述处理单元340还用于:根据优先级信息或锁定信息对缓存空间中存储的部分或全部队列信息进行更新或替换。
可选地,所述处理单元340具体用于:网卡所述缓存空间中的状态信息,将所述缓存空间中的队列信息按等级划分,其中,等级越高的队列信息被访问的可能性越大;优先更新所述缓存空间中存储的等级低的队列信息。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
本申请实施例还提供了一种网卡,该网卡包括如上文中描述的任一项所述的芯片700。具体的有关网卡的描述,请参见图3和对网卡113的说明,此处不再赘述。
本申请实施例还提供了一种服务器,该服务器包括:存储器,处理器,网卡等。具体的有关服务器的描述,请参见对图1和图3的说明,此处不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (18)

1.一种网卡的信息处理方法,其特征在于,本端服务器与远端服务器通过远程直接内存存取RDMA进行数据传输,所述本端服务器的存储器中保存有至少一个队列,每个队列用于保存输入输出IO命令,所述IO命令指示所述本端服务器向所述远端服务器进行数据访问,所述方法包括:
所述网卡预测高频队列信息,所述高频队列信息被访问的可能性大于其他队列信息;
所述网卡在缓存空间中保存所述高频队列信息,其中,所述缓存空间在所述网卡中,所述缓存空间保存的队列信息与所述存储器中的队列一一对应,每个队列信息用于所述网卡对所述队列信息对应的队列中的IO命令进行处理。
2.根据权利要求1所述的方法,其特征在于,所述网卡预测高频队列信息包括:
所述网卡在所述缓存空间中缓存的队列信息中查找当前被读取的队列信息,将所述当前被读取的队列信息确定为所述高频队列信息。
3.根据权利要求1所述的方法,其特征在于,所述队列信息为队列对上下文QPC,所述网卡预测高频队列信息包括:
所述网卡计算所述缓存空间中缓存的QPC中的读指针和写指针的差值,将所述读指针和所述写指针的差值大于预设阈值的QPC确定为所述高频队列信息。
4.根据权利要求1所述的方法,其特征在于,所述网卡预测高频队列信息包括:
所述网卡获取IO命令调度顺序,所述IO命令调度顺序记录了待处理的IO命令;
所述网卡根据所述IO命令调度顺序,确定所述待处理的IO命令所属的队列对应的队列信息,将所述待处理的IO命令所属的队列对应的队列信息确定为所述高频队列信息。
5.根据权利要求1至4中任一项所述的方法,其特征在于,所述网卡在缓存空间中保存所述高频队列信息,包括:
所述网卡从所述存储器中读取所述高频队列信息;
将所述高频队列信息保存在所述缓存空间中。
6.根据权利要求1至4中任一项所述的方法,其特征在于,所述网卡在缓存空间中保存所述高频队列信息,包括:
所述网卡确定所述高频队列信息已经保存在所述缓存空间中;
所述网卡设置所述缓存空间中的所述高频队列信息的状态信息,所述状态信息用于指示所述高频队列信息继续被保存在所述缓存空间中。
7.根据权利要求6所述的方法,其特征在于,所述状态信息包括优先级信息或锁定信息,所述优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,所述锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述队列信息包括以下信息中的一种或多种:队列对上下文QPC,完成队列上下文CQC,事件队列上下文EQC。
9.一种芯片,其特征在于,所述芯片应用于服务器***,所述服务器***中的本端服务器与远端服务器通过远程直接内存存取RDMA进行数据传输,所述本端服务器的存储器中保存有至少一个队列,每个队列用于保存输入输出IO命令,所述IO命令指示所述本端服务器向所述远端服务器进行数据访问,所述芯片包括:
预测单元,用于预测高频队列信息,所述高频队列信息被访问的可能性大于其他队列信息;
处理单元,用于在缓存空间中保存所述高频队列信息,其中,所述缓存空间在所述本端服务器的网卡中,所述缓存空间保存的队列信息与所述存储器中的队列一一对应,每个队列信息用于所述网卡对该队列信息对应的队列中的IO命令进行处理。
10.根据权利要求9所述的芯片,其特征在于,所述预测单元具体用于:在所述缓存空间中缓存的队列信息中查找当前被读取的队列信息,将所述当前被读取的队列信息确定为所述高频队列信息。
11.根据权利要求9所述的芯片,其特征在于,所述队列信息为队列对上下文QPC,所述预测单元具体用于:计算所述缓存空间中缓存的QPC中的读指针和写指针的差值,将所述读指针和所述写指针的差值大于预设阈值的QPC确定为所述高频队列信息。
12.根据权利要求9所述的芯片,其特征在于,所述预测单元具体用于:
获取IO命令调度顺序,所述IO命令调度顺序记录了待处理的IO命令;
根据所述IO命令调度顺序,确定所述待处理的IO命令所属的队列对应的队列信息,将所述待处理的IO命令所属的队列对应的队列信息确定为所述高频队列信息。
13.根据权利要求9至12中任一项所述的芯片,其特征在于,所述处理单元具体用于:
从所述存储器中读取所述高频队列信息;
将所述高频队列信息保存在所述缓存空间中。
14.根据权利要求9至12中任一项所述的芯片,其特征在于,所述处理单元具体用于:
确定所述高频队列信息已经保存在所述缓存空间中;
设置所述缓存空间中的所述高频队列信息的状态信息,所述状态信息用于指示所述高频队列信息继续被保存在所述缓存空间中。
15.根据权利要求14所述的芯片,其特征在于,所述状态信息包括优先级信息或锁定信息,所述优先级信息用于指示所述高频队列信息在所述缓存空间中被更新的优先级,所述锁定信息用于指示所述高频队列信息在所述缓存空间中处于不更新的锁定状态。
16.根据权利要求9至15中任一项所述的芯片,其特征在于,所述队列信息包括以下信息中的一种或多种:队列对上下文QPC,完成队列上下文CQC,事件队列上下文EQC。
17.一种网卡,其特征在于,包括:如权利要求9至16中任一项所述的芯片。
18.一种服务器,其特征在于,包括存储器和如权利要求17所述的网卡。
CN202010073159.1A 2019-09-06 2020-01-22 一种带预测机制的cache实现方法 Pending CN112463654A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
PCT/CN2020/094031 WO2021042782A1 (zh) 2019-09-06 2020-06-02 网卡的信息处理方法及芯片

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2019108439221 2019-09-06
CN201910843922 2019-09-06

Publications (1)

Publication Number Publication Date
CN112463654A true CN112463654A (zh) 2021-03-09

Family

ID=74832776

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010073159.1A Pending CN112463654A (zh) 2019-09-06 2020-01-22 一种带预测机制的cache实现方法

Country Status (2)

Country Link
CN (1) CN112463654A (zh)
WO (1) WO2021042782A1 (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116303173A (zh) * 2023-05-19 2023-06-23 深圳云豹智能有限公司 减少rdma引擎片上缓存的方法、装置、***及芯片
CN117112044A (zh) * 2023-10-23 2023-11-24 腾讯科技(深圳)有限公司 基于网卡的指令处理方法、装置、设备和介质
CN117573602A (zh) * 2024-01-16 2024-02-20 珠海星云智联科技有限公司 用于远程直接内存访问报文发送的方法及计算机设备

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114024915B (zh) * 2021-10-28 2023-06-16 北京锐安科技有限公司 一种流量迁移方法、装置、***、电子设备及存储介质
CN117749739B (zh) * 2024-02-18 2024-06-04 北京火山引擎科技有限公司 数据发送方法、数据接收方法、装置、设备及存储介质

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7631106B2 (en) * 2002-08-15 2009-12-08 Mellanox Technologies Ltd. Prefetching of receive queue descriptors
US7466716B2 (en) * 2004-07-13 2008-12-16 International Business Machines Corporation Reducing latency in a channel adapter by accelerated I/O control block processing
CN103647807B (zh) * 2013-11-27 2017-12-15 华为技术有限公司 一种信息缓存方法、装置和通信设备
US9311044B2 (en) * 2013-12-04 2016-04-12 Oracle International Corporation System and method for supporting efficient buffer usage with a single external memory interface
CN105468494A (zh) * 2015-11-19 2016-04-06 上海天玑数据技术有限公司 一种i/o密集型应用识别方法
CN109117270A (zh) * 2018-08-01 2019-01-01 湖北微源卓越科技有限公司 提高网络数据包处理效率的方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116303173A (zh) * 2023-05-19 2023-06-23 深圳云豹智能有限公司 减少rdma引擎片上缓存的方法、装置、***及芯片
CN116303173B (zh) * 2023-05-19 2023-08-08 深圳云豹智能有限公司 减少rdma引擎片上缓存的方法、装置、***及芯片
CN117112044A (zh) * 2023-10-23 2023-11-24 腾讯科技(深圳)有限公司 基于网卡的指令处理方法、装置、设备和介质
CN117112044B (zh) * 2023-10-23 2024-02-06 腾讯科技(深圳)有限公司 基于网卡的指令处理方法、装置、设备和介质
CN117573602A (zh) * 2024-01-16 2024-02-20 珠海星云智联科技有限公司 用于远程直接内存访问报文发送的方法及计算机设备
CN117573602B (zh) * 2024-01-16 2024-05-14 珠海星云智联科技有限公司 用于远程直接内存访问报文发送的方法及计算机设备

Also Published As

Publication number Publication date
WO2021042782A1 (zh) 2021-03-11

Similar Documents

Publication Publication Date Title
CN112463654A (zh) 一种带预测机制的cache实现方法
US11256431B1 (en) Storage system having a field programmable gate array
US10380035B2 (en) Using an access increment number to control a duration during which tracks remain in cache
US9639280B2 (en) Ordering memory commands in a computer system
EP3229142B1 (en) Read cache management method and device based on solid state drive
US20180357234A1 (en) Memory efficient persistent key-value store for non-volatile memories
US9021189B2 (en) System and method for performing efficient processing of data stored in a storage node
WO2017050014A1 (zh) 一种数据存储处理方法和装置
US20130219117A1 (en) Data migration for composite non-volatile storage device
CN110688062B (zh) 一种缓存空间的管理方法及装置
US20190073305A1 (en) Reuse Aware Cache Line Insertion And Victim Selection In Large Cache Memory
CN110209502B (zh) 一种信息存储方法、装置、电子设备及存储介质
EP3115904B1 (en) Method for managing a distributed cache
CN112667528A (zh) 一种数据预取的方法及相关设备
US11500577B2 (en) Method, electronic device, and computer program product for data processing
KR20100064673A (ko) 메모리 장치 및 메모리 장치의 관리 방법
CN115934625B (zh) 一种用于远程直接内存访问的敲门铃方法、设备及介质
CN116324745A (zh) 读取可选命令和写入可选命令
CN113094392A (zh) 数据缓存的方法和装置
US10795825B2 (en) Compressing data for storage in cache memories in a hierarchy of cache memories
US20200042367A1 (en) Determining when to send message to a computing node to process items using a machine learning module
WO2023165543A1 (zh) 共享缓存的管理方法、装置及存储介质
CN117009389A (zh) 数据缓存方法、装置、电子设备和可读存储介质
CN112667847A (zh) 数据缓存方法、数据缓存装置和电子设备
CN116027982A (zh) 数据处理方法、设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination