CN103150278B - 基于pio和dma混合的网络接口卡描述符提交方法 - Google Patents
基于pio和dma混合的网络接口卡描述符提交方法 Download PDFInfo
- Publication number
- CN103150278B CN103150278B CN201310069161.1A CN201310069161A CN103150278B CN 103150278 B CN103150278 B CN 103150278B CN 201310069161 A CN201310069161 A CN 201310069161A CN 103150278 B CN103150278 B CN 103150278B
- Authority
- CN
- China
- Prior art keywords
- descriptor
- transmit queue
- value
- credit
- write
- 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.)
- Active
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明公开了一种基于PIO和DMA混合的网络接口卡描述符提交方法,实施步骤如下:1)在网络接口卡中建立硬件发送队列,在主存建立主存发送队列;2)初始化描述符;3)用户进程以PIO方式直接访问网络接口卡将描述符写入硬件发送队列,或者将描述符提交主存发送队列,而把门铃数据写入硬件发送队列;网络接口卡顺序处理硬件发送队列的数据时,判断当前数据类型,如果是描述符,根据长度域的值从硬件发送队列读回处理;如果是门铃数据,就启动DMA从主存发送队列中取回再进行处理,并且网络接口卡执行DMA读下一个描述符的过程与处理当前描述符的过程重叠进行。本发明具有消息启动延迟小、发送队列容量大、数据处理简单高效的优点。
Description
技术领域
本发明涉及高性能计算机高速互连网络领域,具体涉及一种基于PIO和DMA混合的网络接口卡描述符提交方法。
背景技术
高性能计算机连接数量众多的主处理器节点(以下简称节点),诸如计算节点、存储节点以及专用处理节点。这些节点中的任何一个都可以用作末端节点,其在此被定义为高性能计算机中产生或最终消费消息的设备。每个节点都包括网络接口卡(NIC),将节点连接到高速互连网络。所述NIC与节点间由通用I/O总线如PCIE总线连接。
节点的用户进程通过端口与NIC进行交互,完成各种用户级通信操作。端口利用队列对发送和接收消息。每个队列对包括发送队列和接收队列。用户进程生成消息的传输请求,以描述符的形式被放置在发送队列。
如图1所示,用户进程10和网络接口卡30之间通过PCIE总线20连接,以DMA(Direct Memory Access)方式提交描述符按以下步骤实行:
第①步,用户进程10把要发送的消息数据准备好,写入数据区101;
第②步,用户进程10构建描述符,将其写入主存发送队列102;
第③步,用户进程10执行PIO(Programmable IO,可编程IO)写,把门铃数据写入门铃数据寄存器301;
第④步,描述符预取逻辑302采取轮转方法确定读哪个端口的描述符;
第⑤步,描述符读取逻辑302启动DMA请求去读主存发送队列102的描述符;
第⑥步,描述符从主存发送队列102被读回描述符处理逻辑303。
第⑦步,描述符处理逻辑303解析描述符,产生DMA读请求去读数据区101的消息数据。
第⑧步,消息数据被读回,写入消息数据FIFO304;
第⑨步,发送逻辑305把消息数据从消息数据FIFO304中读出,进行分片,封装成报文,发往网络。
可以看出,使用DMA方式提交描述符进行一次数据发送需要经过九个步骤,其中5个步骤(③、⑤、⑥、⑦、⑧)跨PCIE总线20,根据我们的实际测试,每跨一次PCIE总线20的访问开销约为300ns,这种复杂的处理过程明显增加了消息发送的启动开销。传统的用户级通信中,发送队列被设置在节点主存中,用户进程构造描述符完毕,将描述符写入发送队列,再向NIC执行一次PIO写,这个PIO写被称为置门铃标志,通知NIC有描述符需要处理。NIC收到门铃标志后,执行一次DMA读,从主存发送队列中将描述符取回,然后分析描述符,再执行多次DMA读回消息数据进行处理。一次PIO写最多只能传输8字节数据,而一个描述符的大小往往大于8字节,例如为128字节,所以不可能用一次PIO写将一个描述符写入NIC。这种NIC使用DMA读回描述符的方式,在读消息数据前有一次读描述符的开销,增加了消息传输的启动延迟。但DMA方式有一个好处,就是发送队列设在节点主存中,可根据需要把容量设置得很大,有能力容纳用户进程短时间内提交大量描述符。
为了减小启动延迟,用户进程可以使用PIO方式向NIC提交描述符。
如图2所示,用户进程10使用PIO方式提交描述符按以下步骤实行:
第①步,用户进程10把要发送的消息数据准备好,写入数据区101;
第②步,用户进程10构建描述符,执行PIO写,将描述符写入硬件发送队列306;
第③步,描述符处理逻辑303顺序从硬件发送队列306中取回描述符;
第④-1步,描述符处理逻辑303解析描述符,产生DMA读请求去读数据区101的消息数据;第④-2步则通知发送逻辑305开始处理消息数据FIFO304中的消息数据;
第⑤步,消息数据被读回,写入消息数据FIFO304;
第⑥步,发送逻辑305把消息数据从消息数据FIFO304中读出,进行分片,封装成报文,发往网络。
用户进程构造描述符完毕,连续执行多次PIO写将描述符直接写入NIC,NIC节省了一次DMA读描述符的开销,可有效降低消息传输的启动延迟。NIC硬件实现了发送队列,接收用户进程PIO写入的描述符数据,按先进先出的原则处理。由于硬件资源的限制,硬件发送队列的容量是有限的,例如固定为能接收512个8字节的数据,这可能带来一个问题:当硬件发送队列已经写满而用户进程仍有描述符需要写入时,用户进程需查询硬件发送队列的状态,以确定能否向硬件发送队列写入新的描述符数据。由于硬件发送队列中描述符的消费速度远低于写入速度,势必使得用户进程频繁地进行查询,这种查询的实质是用户进程执行PIO读查看NIC的状态寄存器,而频繁地PIO读操作将严重挤占I/O总线的带宽,削弱正常的消息传输能力。
如上所述,DMA方式提交描述符增加了启动开销,优点是容量大;PIO方式提交描述符可获得较低的启动开销,缺点是容量小,在某些应用背景下会成为传输瓶颈。 因此需要有一种方法,既能获得最小的消息传输启动开销,又能满足用户进程对发送队列的大容量需求。
发明内容
本发明要解决的技术问题是提供一种消息启动延迟小、发送队列容量大、数据处理简单高效的基于PIO和DMA混合的网络接口卡描述符提交方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种基于PIO和DMA混合的网络接口卡描述符提交方法,其实施步骤如下:
1)在网络接口卡中建立用于存储以PIO方式写入的描述符和门铃数据的硬件发送队列,在主存中建立用于存储描述符的主存发送队列;硬件发送队列以及主存发送队列的读指针均由网络接口卡维护、硬件发送队列以及主存发送队列的写指针均由用户进程维护;
2)根据用户的通信请求初始化生成待发送描述符, 初始化生成描述符的类型为不携带数据的普通描述符或者携带有数据的立即数描述符;
3)判断待发送描述符类型,如果待发送描述符为立即数描述符则以PIO方式写入硬件发送队列;否则将待发送描述符优先以PIO方式直接写入网络接口卡的硬件发送队列,如果硬件发送队列空间不足或者待发送描述符为连续提交描述符的第二个或后续描述符时把待发送描述符写入主存发送队列,同时根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;
4)网络接口卡顺序处理硬件发送队列中的数据,判断当前数据的类型,如果是描述符,则从硬件发送队列读回一个完整的描述符进行处理;如果是门铃数据,就启动DMA从主存发送队列中取回门铃数据对应的描述符再进行处理,并且网络接口卡执行DMA读下一个描述符的过程与处理当前描述符的过程重叠进行。
作为本发明上述技术方案的进一步改进:
所述描述符的格式定义如下:所述描述符的长度为32字节~128字节之间且以8字节为单位递增得到的数值,所述描述符中头1个8字节数据中包含类型域和长度域,所述类型域用于区分当前描述符的类型为描述符头数据或者门铃数据;在当前描述符为门铃数据时,所述长度域的含义是门铃数据对应主存发送队列中的描述符个数;在当前描述符为普通描述符时,所述长度域的含义是当前描述符所包含的8字节数据的个数。
所述步骤3)的详细步骤如下:
3.1)初始化设置用于记录硬件发送队列可用空间的信用0为硬件发送队列的深度减1,所述信用0以8字节为单位,设置用于记录主存发送队列可用空间的信用1为硬件发送队列的深度减1,所述信用1以128字节为单位;复位硬件发送队列的写指针0及读指针0、主存发送队列的写指针1及读指针1,写指针0及读指针0均以8字节为单位,写指针1及读指针1均以128字节为单位;将用于标记连续发送描述符的描述符连续发送头标志置为0;初始化设置用于判断描述符是否连续发送的间隔阈值,初始化设置用于判断硬件发送队列是否有足够可用空间来存储新描述符的半满阈值;
3.2)检查信用0是否大于半满阈值,如果信用0大于半满阈值则判定硬件发送队列有足够的可用空间来存储新描述符,跳转执行步骤3.3);否则判定硬件发送队列可能没有足够的可用空间来存储新描述符,跳转执行步骤3.13);
3.3)判断待发送描述符是否为立即数描述符,如果是立即数描述符则跳转执行步骤3.4),否则跳转执行步骤3.6);
3.4)用户进程将待发送描述符以PIO方式直接写入网络接口卡的硬件发送队列,修改信用0将信用0减N,修改写指针0将写指针0加N,N为写入描述符的8字节数据的个数;记录当前时间作为发送时间,将描述符连续发送头标志置为0,跳转执行下一步;
3.5)保存待发送描述符的状态信息,向用户进程返回成功消息并退出;
3.6)读取当前时间,将当前时间减去上次发送描述符的发送时间得到当前发送描述符的发送间隔,检查发送间隔是否大于间隔阈值,如果发送间隔大于间隔阈值则判定待发送描述符为非连续提交描述符,跳转执行步骤3.4);否则跳转执行步骤3.7);
3.7)检查待发送描述符连续发送头标志是否为0,如果为0则判定待发送描述符为连续提交描述符的第一个描述符,将所述描述符连续发送头标志置为1,并跳转执行步骤3.4);如果不为0,则判定待发送描述符为连续提交描述符的第二个或后续描述符,跳转执行步骤3.8);
3.8)检查信用1是否大于0,如大于0则判定主存发送队列仍有可用空间,转到步骤3.9);否则判定主存发送队列已经没有可用空间,转到步骤3.11)尝试更新信用1;
3.9)把待发送描述符写入主存发送队列,修改信用1将信用1减1,修改写指针1将写指针1加1,记录当前时间作为发送时间,跳转执行步骤3.10);
3.10)根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;修改信用0将信用0减N,修改写指针0将写指针0加N,N为写入描述符的8字节数据的个数;跳转执行步骤3.5);
3.11)用户进程执行PIO读获得读指针1的值,跳转执行步骤3.12);
3.12)根据写指针1和读指针1的当前值计算信用1,检查计算得到的信用1是否大于0,如果信用1大于0则判定主存发送队列存在可用空间,跳转执行步骤3.9)重新将待发送描述符写入主存发送队列;否则判定主存发送队列完全已满,输出异常信息并退出;
3.13)检查信用0是否大于0,如大于0则跳转执行步骤3.8)尝试写入主存发送队列;否则判定硬件发送队列全满,转到步骤3.14)尝试更新信用0;
3.14)用户进程执行PIO读,获得读指针0的值,转到步骤3.15);
3.15)根据写指针0和读指针0的当前值计算信用0,检查计算得到的信用0是否大于0,如果信用0大于0则判定硬件发送队列已经多出部分可用空间,跳转执行步骤3.2)继续尝试将待发送描述符写入硬件发送队列;否则判定更新后硬件发送队列仍然全满,输出异常信息并退出。
所述步骤3.12)中根据写指针1和读指针1的当前值计算信用1的详细步骤如下:
A1)初始化时设置信用1的初始值为硬件发送队列的深度减1;
B1)当信用1的值为0时,读取读指针1的值和写指针1的值;
C1)比较读指针1的值和写指针1的值,如果读指针1的值等于写指针1的值,则表示描述符数据被全部读走,重置信用1的值为初始值;如果读指针1的值小于写指针1的值,则重置信用1的值为初始值减去写指针1的值与读指针1的值之间的差值;如果读指针1的值大于写指针1的值,则重置信用1的值为读指针1的值与写指针1的值之间的差值减1。
所述步骤3.15)中根据写指针0和读指针0的当前值计算信用0的详细步骤如下:
A2)初始化时设置信用0的初始值为硬件发送队列的深度减1;
B2)当信用0的值为0时,读取读指针0的值和写指针0的值;
C2)比较读指针0的值和写指针0的值,如果读指针0的值等于写指针0的值,则表示描述符数据被全部读走,重置信用0的值为初始值;如果读指针0的值小于写指针0的值,则重置信用0的值为初始值减去写指针0的值与读指针0的值之间的差值;如果读指针0的值大于写指针0的值,则重置信用0的值为读指针0的值与写指针0的值之间的差值减1。
本发明基于PIO和DMA混合的网络接口卡描述符提交方法具有下述优点:
1、本发明将待发送描述符优先以PIO方式直接写入网络接口卡的硬件发送队列,如果硬件发送队列空间不足或者待发送描述符为连续提交描述符的第二个或后续描述符时把待发送描述符写入主存发送队列,根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列,网络接口卡顺序处理硬件发送队列的数据,如果是门铃数据就启动DMA从主存发送队列中取回描述符再进行处理,因此本发明能够充分利用硬件发送队列的资源,因此在硬件发送队列空闲时能够直接利用硬件发送队列提交描述符给网络接口卡,能够减少启动延迟,提高描述符的提交效率以及数据通信效率;即使硬件发送队列比较忙时,也能够利用主存发送队列存储描述符,而仅仅向硬件发送队列提交数据量非常小的门铃数据,通过门铃数据和主存发送队列的“放大”作用,可以将总的发送队列的容量扩大,合理地组合描述符数据与门铃数据的写入比率和时机,又几乎能隐藏多数DMA读描述符的开销,同时使用网络接口卡的硬件发送队列和主机内存中的主存发送队列,能够综合PIO和DMA方式提交描述符的优点,在大多数情况下既能减小多数描述符的启动开销,又能得到大的发送队列容量,具有消息启动延迟小、发送队列容量大、数据处理简单高效的优点。
2、本发明在用户通信的数据量较少时直接将通信数据携带在描述符内构成立即数描述符,对于立即数描述符而言,立即数描述符总是直接被写入硬件发送队列,网络接口卡能够直接进行打包成报文发送而不需要再去取描述符的关联数据,节省了DMA读取消息数据的开销,网络不堵塞及没有其它端口竞争时,立即数描述符的消费速度等于写入速度,能够极大地提高小数据量的通信请求的处理效率,减少小数据量的通信请求的收发延迟。
3、本发明网络接口卡顺序处理硬件发送队列的数据时,如果是门铃数据就启动DMA从主存发送队列中取回描述符再进行处理,且网络接口卡执行DMA读下一个描述符的过程与处理当前描述符的过程重叠进行,即网络接口卡执行DMA读第N个描述符的过程与处理第N-1个描述符的过程重叠进行,与用户进程单独使用PIO方式提交第N个描述符相比,不会额外增加第N个描述符的启动开销,而总的发送队列容量却接近增大到主存发送队列与硬件发送队列容量之和,数据处理简单而又高效。
附图说明
图1为现有技术DMA方式提交描述符的原理结构示意图。
图2为现有技术PIO方式提交描述符的原理结构示意图。
图3为本发明实施例的基本流程示意图。
图4为本发明实施例中步骤3)的详细流程示意图。
图5为应用本发明实施例中网络接口卡描述符注入逻辑结构示意图。
具体实施方式
如图3所示,本实施例网络接口卡描述符提交方法的实施步骤如下:
1)在网络接口卡中建立用于存储以PIO方式写入的描述符和门铃数据的硬件发送队列,在主存中建立用于存储描述符的主存发送队列;硬件发送队列以及主存发送队列的读指针均由网络接口卡维护、硬件发送队列以及主存发送队列的写指针均由用户进程维护;
2)根据用户的通信请求初始化生成待发送描述符, 初始化生成描述符的类型为不携带数据的普通描述符或者携带有数据的立即数描述符;
3)判断待发送描述符类型,如果待发送描述符为立即数描述符则以PIO方式写入硬件发送队列;否则将待发送描述符优先以PIO方式直接写入网络接口卡的硬件发送队列,如果硬件发送队列空间不足或者待发送描述符为连续提交描述符的第二个或后续描述符时把待发送描述符写入主存发送队列,同时根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;
4)网络接口卡顺序处理硬件发送队列中的数据,判断当前数据的类型,如果是描述符,则从硬件发送队列读回一个完整的描述符进行处理;如果是门铃数据,就启动DMA从主存发送队列中取回门铃数据对应的描述符再进行处理,并且网络接口卡执行DMA读下一个描述符的过程与处理当前描述符的过程重叠进行。
本实施例中,在网络接口卡上为每个端口实现一个有限容量的硬件发送队列,该硬件发送队列被映射到对应的用户进程的虚地址空间,硬件发送队列的容量大小为8字节宽512深。本实施例中,网络接口卡的驱动程序在主存中为每个端口分配一块物理地址连续的空间,作为端口的主存发送队列,该主存发送队列被映射到对应的用户进程的虚地址空间;驱动程序把主存发送队列的基地址和上界地址以物理地址的形式写入网络接口卡,主存发送队列的容量大小为8字节宽8192深。
本实施例对描述符的格式定义如下:描述符的长度为32字节~128字节之间且以8字节为单位递增得到的数值,描述符中头1个8字节数据中包含类型域和长度域,类型域用于区分当前描述符的类型为描述符头数据或者门铃数据;在当前描述符为门铃数据时,长度域的含义是门铃数据对应主存发送队列中的描述符个数;在当前描述符为普通描述符时,长度域的含义是当前描述符所包含的8字节数据的个数。本实施例的描述符为变长的,描述符以8字节为单位递增,最小的描述符有32字节,最大的描述符有128字节,由于PIO方式一次只能提交8字节的数据,因此变长结构的描述符能够提高硬件发送队列的使用效率,并且保证通过整数次PIO即可将一个描述符写入硬件发送队列。
本实施例中,步骤2)用户进程根据用户的通信请求初始化描述符时,初始化生成的描述符包括不携带数据的普通描述符和携带有数据的立即数描述符。本实施例中,立即数描述符也是一种描述符,立即数描述符利用描述符的空闲部分携带了少量数据,立即数描述符既可以写入硬件发送队列,也可以写入主存发送队列。例如:描述符的大小固定为128字节,其中可携带最多64字节的立即数据,这64字节的数据是要组织成网络报文发往目的节点的。每次PIO写操作(CPU执行一次STORE指令)只能把8字节的数据写入网络接口卡,如果用PIO方式把128字节的描述符写入网络接口卡,需要执行16次PIO写。而门铃数据尺寸只有8字节大,只需1次PIO写即可,用来通知网络接口卡去主存发送队列取描述符。因为门铃数据中没有指明描述符的长度,所以DMA读描述符时总是按最大尺寸进行读的。对于立即数描述符而言,网络接口卡能够直接进行打包成报文发送而不需要再去取描述符的关联数据,节省了DMA读取消息数据的开销,能够极大地提高小数据量的通信请求的处理效率,减少小数据量的通信请求的收发延迟。立即数描述符可以根据需要存放在主存发送队列或者硬件队列中,本实施例中为了进一步提高立即数描述符的发送效率,将立即数描述符一律提交给硬件发送队列,只需要跨PCIE总线一次,能获得最小的启动延迟,约减小延迟1200ns。
如图4所示,本实施例中步骤3)的详细步骤3.1)~3.15)所示。
3.1)初始化设置用于记录硬件发送队列可用空间的信用0为硬件发送队列的深度减1,信用0以8字节为单位,设置用于记录主存发送队列可用空间的信用1为硬件发送队列的深度减1,信用1以128字节为单位;复位硬件发送队列的写指针0及读指针0、主存发送队列的写指针1及读指针1,写指针0及读指针0均以8字节为单位,写指针1及读指针1均以128字节为单位;将用于标记连续发送描述符的描述符连续发送头标志置为0;初始化设置用于判断描述符是否连续发送的间隔阈值,初始化设置用于判断硬件发送队列是否有足够可用空间的半满阈值。信用1、写指针1及读指针1均以128字节为单位,128字节对应可能的最大描述符的尺寸,因为门铃数据不指明网络接口卡从主存发送队列中读的描述符的大小,所以网络接口卡每次总是读回128字节,再根据128字节的第一个8字节中的信息来判断这个描述符究竟有几个8字节数据,因此信用1、写指针1及读指针1以128字节为单位能够实现管理的简洁高效。
本实施例中,硬件发送队列的深度为512,宽度为8字节;主存发送队列的深度为8192,宽度为8字节,以16个宽度(共128字节)为单位。因此信用0的初始值为511,信用1的初始值为511;每消耗一个信用0,则代表硬件发送队列被消耗掉8字节宽度的容量;每消耗一个信用1,则代表主存发送队列被消耗掉128字节宽度的容量。本实施例的间隔阈值为10μs。本实施例的半满阈值为128,本实施例通过半满阈值来判定硬件发送队列有足够的可用空间来存储新描述符,如果硬件发送队列有足够的可用空间,则将待发送描述符直接存储在硬件发送队列中,从而节省了通过DMA读取描述符的步骤,提升了提交描述符的速度,降低了提交描述符的延迟;半满阈值取值可根据需要调整,只要保证半满阈值的深度足够存储一个最大长度的描述符即可。此外,本实施例中步骤3.1)还包括记录当前时间的步骤,这个记录的时间值用于提交第一个描述符时,计算时间间隔之用。
3.2)检查信用0是否大于半满阈值,如果信用0大于半满阈值则判定硬件发送队列有足够的可用空间来存储新描述符,跳转执行步骤3.3);否则判定硬件发送队列可能没有足够的可用空间来存储新描述符,跳转执行步骤3.13)。
3.3)判断待发送描述符是否为立即数描述符,如果是立即数描述符则跳转执行步骤3.4),否则跳转执行步骤3.6)。本实施例中,在描述符中头1个8字节数据中包含了一个1位宽的立即数类型域,用来区分“立即数描述符”和“普通描述符”。
本实施例中在硬件发送队列的空闲空间足够大时,立即数描述符总是直接被写入硬件发送队列,由于立即数描述符除了描述符(描述符头数据)以外还携带有少量的数据,因此一方面能够省去从主存发送队列中读取描述符(描述符头数据)的步骤,另一方面还能够节省从主存中获取描述符对应的消息数据的步骤,后续直接通过立即数描述符即可组装成报文进行发送,而普通描述符还需要执行多次DMA读操作把消息数据读回NIC,组装成报文才可以进行发送,因此本实施例通过将少量数据夹带在描述符中的空闲区域构成立即数描述符与描述符一起提交,省却了DMA读取数据的开销,在网络不堵塞及没有其它端口竞争时,立即数描述符的消费速度等于写入速度,能够极大地提高小数据量的通信请求的处理效率,减少小数据量的通信请求的收发延迟。
3.4)用户进程将待发送描述符以PIO方式直接写入网络接口卡的硬件发送队列,修改信用0将信用0减N,修改写指针0将写指针0加N,N为写入描述符的8字节数据的个数;记录当前时间作为发送时间,将描述符连续发送头标志置为0,跳转执行下一步。
3.5)保存待发送描述符的状态信息,向用户进程返回成功消息(Return 0,返回结果为0即正常)并退出。
3.6)读取当前时间,将当前时间减去上次发送描述符的发送时间得到当前发送描述符的发送间隔,检查发送间隔是否大于间隔阈值10μs,如果发送间隔大于间隔阈值10μs则判定待发送描述符为非连续提交描述符,跳转执行步骤3.4);否则跳转执行步骤3.7)。
本实施例中通过描述符连续发送头标志和间隔阈值来判断连续提交描述符:当描述符连续发送头标志为0且相邻描述符的发送间隔小于间隔阈值10μs时,则判定待发送描述符为连续提交描述符的第一个描述符,需要发送给硬件发送队列并将描述符连续发送头标志置为1;如果后续的发送间隔仍小于10μs,由于描述符连续发送头标志为1,则判定待发送描述符为连续提交描述符的第二个或后续描述符,需要发送给主存发送队列。
3.7)检查待发送描述符连续发送头标志是否为0,如果为0则判定待发送描述符为连续提交描述符的第一个描述符,将描述符连续发送头标志置为1,并跳转执行步骤3.4);如果不为0,则判定待发送描述符为连续提交描述符的第二个或后续描述符,跳转执行步骤3.8)。
本实施例通过对连续提交描述符的第一个描述符和第二个或后续描述符分别处理,最终能够实现下述效果:离散地提交描述符时,直接把描述符数据写入硬件发送队列;连续提交N个描述符时,把第一个描述符写入硬件发送队列,把后续描述符写入主存发送队列,再把门铃数据写入硬件发送队列;硬件发送队列的空闲空间足够大时,立即数类型描述符直接写入硬件发送队列,这种提交策略希望得到如下效果:离散提交描述符时,硬件发送队列的容量可能不是问题,那么总是将描述符直接写入硬件发送队列,以期让所有描述符都获得最小的启动延迟;连续提交N个描述符时,可能硬件发送队列的容量不够用,这时,我们只把这N个描述符中的第一个描述符写入硬件发送队列,而把后续描述符写入主存发送队列,仅把对应的门铃数据写入硬件发送队列。由于门铃数据只有8字节,小于描述符的大小,这样可以减小对硬件发送队列的空间占用率。而NIC硬件的描述符处理逻辑把处理第i个描述符的过程与启动DMA读第i+1个描述符的过程重叠进行,在处理完第i个描述符时,早已读回第i+1个描述符,可以马上开始第i+1个描述符的处理,两个描述符的处理过程中间不会增加额外的等待时间。如果第i个描述符是立即数描述符,那么它的处理过程耗费的时间要小于DMA读第i+1个描述符耗费的时间,所以提交描述符时,只要硬件发送队列有足够的空间,立即数类型描述符总是直接被写入硬件发送队列。
3.8)检查信用1是否大于0,如大于0则判定主存发送队列仍有可用空间,转到步骤3.9);否则判定主存发送队列已经没有可用空间,转到步骤3.11)尝试更新信用1。
3.9)把待发送描述符写入主存发送队列,修改信用1将信用1减1(即128个字节),修改写指针1将写指针1加1(即128个字节),记录当前时间作为发送时间,跳转执行步骤3.10)。
3.10)根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;修改信用0将信用0减N,修改写指针0将写指针0加N,N为写入描述符的8字节数据的个数;跳转执行步骤3.5)。
3.11)用户进程执行PIO读获得读指针1的值,跳转执行步骤3.12)。
3.12)根据写指针1和读指针1的当前值计算信用1,检查计算得到的信用1是否大于0,如果信用1大于0则判定主存发送队列存在可用空间,跳转执行步骤3.9)重新将待发送描述符写入主存发送队列;否则判定主存发送队列完全已满,输出异常信息(Return 1,返回错误代码为1)并退出。
本实施例中,根据写指针1和读指针1的当前值计算信用1的步骤如下:
A1)初始化时设置信用1的初始值为511(虽然信用1的初始值对应硬件发送队列512深的可用值为512,但本实施例中信用1的初始值最大只设置为511,其目的是为了防止写指针1与读指针1相等时,不能分辨数据是全部读走还是根本没读这两种情况)。
B1)当信用1用完(即值为0)时,读取当前读指针1的值(本实施例中以Ptr_read_1表示);读取当前写指针1的值(本实施例中以Ptr_write_1表示)。
C1)比较读指针1的值和写指针1的值,如果读指针1的值等于写指针1的值(即Ptr_read_1 = Ptr_write_1),则表示描述符数据被全部读走,重置信用1的值为初始值511;如果读指针1的值小于写指针1的值(即Ptr_read_1 < Ptr_write_1),则重置信用1的值为初始值减去写指针1的值与读指针1的值之间的差值,即:信用1 = 511-( Ptr_write_1- Ptr_read_1);如果读指针1的值大于写指针1的值(即Ptr_read_1 > Ptr_write_1),则重置信用1的值为读指针1的值与写指针1的值之间的差值减1,即:信用1 = Ptr_read_1 - Ptr_write_1 -1。
3.13)检查信用0是否大于0,如大于0则跳转执行步骤3.8)尝试写入主存发送队列;否则判定硬件发送队列全满,转到步骤3.14)尝试更新信用0;
3.14)用户进程执行PIO读,获得读指针0的值,转到步骤3.15);
3.15)根据写指针0和读指针0的当前值计算信用0,检查计算得到的信用0是否大于0,如果信用0大于0则判定硬件发送队列已经多出部分可用空间,跳转执行步骤3.2)继续尝试将待发送描述符写入硬件发送队列;否则判定更新后硬件发送队列仍然全满,输出异常信息(Return 2,返回错误代码为2)并退出。
本实施例中,根据写指针0和读指针0的当前值计算信用0的步骤与计算信用1类同,其详细步骤如下:
A2)初始化时设置信用0的初始值为511。
B2)当信用0用完(即值为0)时,读取当前读指针0的值(本实施例中以Ptr_read_0表示);读取当前写指针0的值(本实施例中以Ptr_write_0表示)。
C2)比较读指针0的值和写指针0的值,如果读指针0的值等于写指针0的值(即Ptr_read_0 = Ptr_write_0),则表示描述符数据被全部读走,重置信用0的值为初始值511;如果读指针0的值小于写指针0的值(即Ptr_read_0 < Ptr_write_0),则重置信用0的值为初始值减去写指针0的值与读指针0的值之间的差值,即:信用0 = 511-( Ptr_write_0- Ptr_read_0);如果读指针0的值大于写指针0的值(即Ptr_read_0 > Ptr_write_0),则重置信用0的值为读指针0的值与写指针0的值之间的差值减1,即:信用0 = Ptr_read_0 - Ptr_write_0 -1。
本实施例用户进程根据描述符类型、提交频度、发送队列剩余信用等信息,采用步骤3.1)~3.15)的提交策略,支持用户进程同时使用PIO和DMA方式提交描述符,把描述符数据优先写入网络接口卡的硬件发送队列,把门铃数据写入网络接口卡的硬件发送队列,让立即数描述符的提交最快,并尽量使网络接口卡启动DMA读后续描述符的过程与处理当前描述符的过程重叠,使得在大多数情况下能够省却DMA读描述符的开销,获得最小的消息传输启动延迟。本实施例步骤3.1)~3.15)所示的用户进程提交描述符的流程可被封装成库函数的形式供进程调用,异常退出时,表示因缺乏信用没完成描述符提交,进程可重复执行该库函数,直到描述符顺利提交。此外,还可以进一步设置描述符提交超时机制,如果描述符提交超时则丢弃描述符并返回错误信息。
需要说明的是,用户进程10即使连续执行PIO写,可是在PCIE总线接口20处“看到”的PIO写入的数据并不是连续写入的,而是每间隔16个时钟周期才写入一个数据。PCIE接口20的时钟频率是250MHz,写完一个128字节的描述符耗时为4ns*16*16≈1μs,这比一次DMA读数据的时间约600ns还要大。Intel的Intel 64和IA-32体系结构中,其存储器类型中有一类是WC(Write Combining)类型,对这种类型存储器的写可以被推迟,后续的写在WC缓冲区中被合并,以减少对存储器总线的访问次数。在Intel的CPU中实现了一种写合并缓冲(Write Combining buffer),一般有64字节大,可将地址连续的PIO写的数据合并后,再以burst方式驱动到数据总线上。如果128字节的描述符按这种方式处理,只需要2次可“看到”的PIO写就可以写入NIC的硬件发送队列中,耗时约4ns*(16+16+16)≈0.2μs。我们将NIC上的硬件发送队列的地址空间映射为WC类型的存储器,就可以实现PIO的写合并,这是通过对MTRR (Memory Type Range Registers,内存类型范围寄存器)进行编程或在页面属性表PAT(Page Attribute Table)中配置参数实现的。
如图5所示,应用本实施例的NIC(网络接口卡)描述符注入逻辑结构包括:
硬件发送队列306,用于接收进程10使用PIO写经PCIE总线20的PIO处理逻辑202写入的数据,包括描述符数据和门铃数据。
描述符预取逻辑302,用于从硬件发送队列306读出数据,并判断是描述符(描述符头数据)或是门铃数据。如果是描述符,描述符预取逻辑302就接着从硬件发送队列306读数据,直到得到一个完整的描述符,然后把描述符送描述符处理逻辑303;如果读出的数据是门铃数据,描述符预取逻辑302就申请仲裁逻辑308,得到使能后,发出读描述符的DMA读请求给DMA请求处理逻辑203。门铃数据中只包含了描述符个数信息,而没有说明每个描述符大小,所以每个DMA读请求都读回主存发送队列102中的固定大小为128字节的数据块。本发明中描述符的最大尺寸为128字节。
描述符FIFO307用于接收描述符预取逻辑302读回的描述符数据。描述符预取逻辑302处理了门铃数据,就等待从描述符FIFO307读出描述符,然后送往描述符处理逻辑303进行处理。
描述符处理逻辑303分析描述符,产生DMA读消息数据的请求,申请仲裁逻辑308,得到使能后,发出读消息数据的DMA读请求给DMA请求处理逻辑203。如果描述符是立即数类型,则描述符处理逻辑303直接生成报文,送经报文发送逻辑305发往网络。
消息数据FIFO304接收PCIE总线的DMA数据处理逻辑201发来的消息数据。报文发送逻辑305从消息数据FIFO304读出消息数据,分片封装成报文并发往网络。
描述符预取逻辑302和描述符处理逻辑303是并行工作的,也就是说,在描述符处理逻辑303启动DMA读消息数据的同时,描述符预取逻辑302也可以启动DMA读后续的描述符。一旦当前描述符的数据被描述符处理逻辑303处理完,描述符处理逻辑303紧跟着就可以处理下一个描述符(已经由描述符预取逻辑302预取好),中间不会有空闲。
状态寄存器组309记录了NIC上与描述符提交有关的状态信息,其中主要包括硬件发送队列306的读指针、主存发送队列102的读指针;硬件发送队列306的读指针简称为读指针0,读指针0是以8字节为单位递增的;主存发送队列102的读指针简称为读指针1,读指针1是以128字节为单位递增的。读指针0和读指针1都由NIC维护,用户进程10可执行PIO读操作查询这些状态信息的值。硬件发送队列306的写指针,简称写指针0,主存发送队列的写指针,简称写指针1,都由用户进程维护。
参见图2可以看出,使用PIO方式提交描述符进行一次数据发送只需要经过六个步骤,其中3个步骤(②、④-1、⑤)跨PCIE总线20,比DMA方式提交描述符减少了两次跨PCIE总线20的访问开销,可以减小消息的启动开销约600ns。而本实施例通过立即数描述符将少量数据夹带在描述符中的空闲区域,与描述符一起提交,描述符处理逻辑303识别到立即数描述符,不用执行第④-1步操作,而是执行第④-2步操作,直接把描述符中的消息数据生成报文送到发送逻辑305,节省了DMA读取消息数据的开销。可见,本实施例通过将小粒度消息以立即数描述符使用PIO方式提交,只需要跨PCIE总线20一次,能获得最小的启动延迟,约减小延迟1200ns。硬件发送队列306使用NIC硬件资源实现,容量有限,容纳描述符的能力要远小于主存发送队列102,通过主存发送队列102与硬件发送队列306结合,能够极大地提高描述符的存储能力。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (3)
1.一种基于PIO和DMA混合的网络接口卡描述符提交方法,其特征在于实施步骤如下:
1)在网络接口卡中建立用于存储以PIO方式写入的描述符和门铃数据的硬件发送队列,在主存中建立用于存储描述符的主存发送队列;硬件发送队列以及主存发送队列的读指针均由网络接口卡维护、硬件发送队列以及主存发送队列的写指针均由用户进程维护;所述描述符的长度为32字节~128字节之间且以8字节为单位递增得到的数值,所述描述符中头1个8字节数据中包含类型域和长度域,所述类型域用于区分当前描述符的类型为描述符头数据或者门铃数据;在当前描述符为门铃数据时,所述长度域的含义是门铃数据对应主存发送队列中的描述符个数;在当前描述符为普通描述符时,所述长度域的含义是当前描述符所包含的8字节数据的个数;
2)根据用户的通信请求初始化生成待发送描述符, 初始化生成描述符的类型为不携带数据的普通描述符或者携带有数据的立即数描述符;
3)判断待发送描述符类型,如果待发送描述符为立即数描述符则以PIO方式写入硬件发送队列;否则将待发送描述符优先以PIO方式直接写入网络接口卡的硬件发送队列,如果硬件发送队列空间不足或者待发送描述符为连续提交描述符的第二个或后续描述符时把待发送描述符写入主存发送队列,同时根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;
4)网络接口卡顺序处理硬件发送队列中的数据,判断当前数据的类型,如果是描述符,则从硬件发送队列读回一个完整的描述符进行处理;如果是门铃数据,就启动DMA从主存发送队列中取回门铃数据对应的描述符再进行处理,并且网络接口卡执行DMA读下一个描述符的过程与处理当前描述符的过程重叠进行;
所述步骤3)的详细步骤如下:
3.1)初始化设置用于记录硬件发送队列可用空间的信用0为硬件发送队列的深度减1,所述信用0以8字节为单位,设置用于记录主存发送队列可用空间的信用1为硬件发送队列的深度减1,所述信用1以128字节为单位;复位硬件发送队列的写指针0及读指针0、主存发送队列的写指针1及读指针1,写指针0及读指针0均以8字节为单位,写指针1及读指针1均以128字节为单位;将用于标记连续发送描述符的描述符连续发送头标志置为0;初始化设置用于判断描述符是否连续发送的间隔阈值,初始化设置用于判断硬件发送队列是否有足够可用空间来存储新描述符的半满阈值;
3.2)检查信用0是否大于半满阈值,如果信用0大于半满阈值则判定硬件发送队列有足够的可用空间来存储新描述符,跳转执行步骤3.3);否则判定硬件发送队列可能没有足够的可用空间来存储新描述符,跳转执行步骤3.13);
3.3)判断待发送描述符是否为立即数描述符,如果是立即数描述符则跳转执行步骤3.4),否则跳转执行步骤3.6);
3.4)用户进程将待发送描述符以PIO方式直接写入网络接口卡的硬件发送队列,修改信用0将信用0减N,修改写指针0将写指针0加N,记录当前时间作为发送时间,将描述符连续发送头标志置为0,N为写入描述符的8字节数据的个数;跳转执行下一步;
3.5)保存待发送描述符的状态信息,向用户进程返回成功消息并退出;
3.6)读取当前时间,将当前时间减去上次发送描述符的发送时间得到当前发送描述符的发送间隔,检查发送间隔是否大于间隔阈值,如果发送间隔大于间隔阈值则判定待发送描述符为非连续提交描述符,跳转执行步骤3.4);否则跳转执行步骤3.7);
3.7)检查待发送描述符连续发送头标志是否为0,如果为0则判定待发送描述符为连续提交描述符的第一个描述符,将所述描述符连续发送头标志置为1,并跳转执行步骤3.4);如果不为0,则判定待发送描述符为连续提交描述符的第二个或后续描述符,跳转执行步骤3.8);
3.8)检查信用1是否大于0,如大于0则判定主存发送队列仍有可用空间,转到步骤3.9);否则判定主存发送队列已经没有可用空间,转到步骤3.11)尝试更新信用1;
3.9)把待发送描述符写入主存发送队列,修改信用1将信用1减1,修改写指针1将写指针1加1,记录当前时间作为发送时间,跳转执行步骤3.10);
3.10)根据描述符的格式生成被写入主存发送队列的描述符所对应的门铃数据,并将所述门铃数据以PIO方式直接写入网络接口卡的硬件发送队列;修改信用0将信用0减N,修改写指针0将写指针0加N,N为写入描述符的8字节数据的个数;跳转执行步骤3.5);
3.11)用户进程执行PIO读获得读指针1的值,跳转执行步骤3.12);
3.12)根据写指针1和读指针1的当前值计算信用1,检查计算得到的信用1是否大于0,如果信用1大于0则判定主存发送队列存在可用空间,跳转执行步骤3.9)重新将待发送描述符写入主存发送队列;否则判定主存发送队列完全已满,输出异常信息并退出;
3.13)检查信用0是否大于0,如大于0则跳转执行步骤3.8)尝试写入主存发送队列;否则判定硬件发送队列全满,转到步骤3.14)尝试更新信用0;
3.14)用户进程执行PIO读,获得读指针0的值,转到步骤3.15);
3.15)根据写指针0和读指针0的当前值计算信用0,检查计算得到的信用0是否大于0,如果信用0大于0则判定硬件发送队列已经多出部分可用空间,跳转执行步骤3.2)继续尝试将待发送描述符写入硬件发送队列;否则判定更新后硬件发送队列仍然全满,输出异常信息并退出。
2.根据权利要求1所述的基于PIO和DMA混合的网络接口卡描述符提交方法,其特征在于,所述步骤3.12)中根据写指针1和读指针1的当前值计算信用1的详细步骤如下:
A1)初始化时设置信用1的初始值为硬件发送队列的深度减1;
B1)当信用1的值为0时,读取读指针1的值和写指针1的值;
C1)比较读指针1的值和写指针1的值,如果读指针1的值等于写指针1的值,则表示描述符数据被全部读走,重置信用1的值为初始值;如果读指针1的值小于写指针1的值,则重置信用1的值为初始值减去写指针1的值与读指针1的值之间的差值;如果读指针1的值大于写指针1的值,则重置信用1的值为读指针1的值与写指针1的值之间的差值减1。
3.根据权利要求2所述的基于PIO和DMA混合的网络接口卡描述符提交方法,其特征在于,所述步骤3.15)中根据写指针0和读指针0的当前值计算信用0的详细步骤如下:
A2)初始化时设置信用0的初始值为硬件发送队列的深度减1;
B2)当信用0的值为0时,读取读指针0的值和写指针0的值;
C2)比较读指针0的值和写指针0的值,如果读指针0的值等于写指针0的值,则表示描述符数据被全部读走,重置信用0的值为初始值;如果读指针0的值小于写指针0的值,则重置信用0的值为初始值减去写指针0的值与读指针0的值之间的差值;如果读指针0的值大于写指针0的值,则重置信用0的值为读指针0的值与写指针0的值之间的差值减1。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310069161.1A CN103150278B (zh) | 2013-03-05 | 2013-03-05 | 基于pio和dma混合的网络接口卡描述符提交方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310069161.1A CN103150278B (zh) | 2013-03-05 | 2013-03-05 | 基于pio和dma混合的网络接口卡描述符提交方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103150278A CN103150278A (zh) | 2013-06-12 |
CN103150278B true CN103150278B (zh) | 2014-03-05 |
Family
ID=48548368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310069161.1A Active CN103150278B (zh) | 2013-03-05 | 2013-03-05 | 基于pio和dma混合的网络接口卡描述符提交方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103150278B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103942097B (zh) * | 2014-04-10 | 2017-11-24 | 华为技术有限公司 | 一种数据处理方法、装置及具备相应装置的计算机 |
CN104052831A (zh) * | 2014-06-11 | 2014-09-17 | 华为技术有限公司 | 一种基于队列的数据传输方法、装置及通信系统 |
CN104767606B (zh) * | 2015-03-19 | 2018-10-19 | 华为技术有限公司 | 数据同步装置及方法 |
CN111158936B (zh) * | 2017-06-15 | 2024-04-09 | 北京忆芯科技有限公司 | 队列交换信息的方法及系统 |
CN107861895B (zh) * | 2017-10-23 | 2019-11-19 | 深圳市楠菲微电子有限公司 | 基于分布式仲裁的可编程输入输出pio写合并装置和方法 |
CN109446147B (zh) * | 2018-11-09 | 2022-02-18 | 郑州云海信息技术有限公司 | 一种网络存储设备与pcie设备的数据交互方法 |
CN109992209B (zh) * | 2019-03-29 | 2023-02-03 | 新华三技术有限公司成都分公司 | 数据处理方法、装置及分布式存储系统 |
CN111666235B (zh) * | 2020-05-26 | 2022-02-08 | 中国人民解放军国防科技大学 | 用于高速互连网络接口芯片的pio通信装置,芯片,设备及方法 |
CN114237945B (zh) * | 2022-02-25 | 2022-05-13 | 四川鸿创电子科技有限公司 | 一种基于srio接口的互联系统消息处理方法、装置和介质 |
CN116795605B (zh) * | 2023-08-23 | 2023-12-12 | 珠海星云智联科技有限公司 | 一种外围器件互联扩展设备异常自动恢复系统以及方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1761222A (zh) * | 2005-11-22 | 2006-04-19 | 华中科技大学 | 一种支持虚拟接口的存储网络适配器 |
CN101449244A (zh) * | 2006-05-22 | 2009-06-03 | 英特尔公司 | 使用冗余虚拟机的错误检测 |
CN102750245A (zh) * | 2012-05-29 | 2012-10-24 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及系统 |
-
2013
- 2013-03-05 CN CN201310069161.1A patent/CN103150278B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1761222A (zh) * | 2005-11-22 | 2006-04-19 | 华中科技大学 | 一种支持虚拟接口的存储网络适配器 |
CN101449244A (zh) * | 2006-05-22 | 2009-06-03 | 英特尔公司 | 使用冗余虚拟机的错误检测 |
CN102750245A (zh) * | 2012-05-29 | 2012-10-24 | 中国人民解放军国防科学技术大学 | 报文接收方法、报文接收模块、装置及系统 |
Non-Patent Citations (4)
Title |
---|
刘路等.天河-1A互连系统的接口设计.《计算机工程与科学》.2013,第35卷(第2期), |
基于Myrinet的高性能VIA设计与实现;陈渝等;《软件学报》;20030730;第14卷(第2期);第6页 * |
天河-1A互连系统的接口设计;刘路等;《计算机工程与科学》;20130230;第35卷(第2期);第3页 * |
陈渝等.基于Myrinet的高性能VIA设计与实现.《软件学报》.2003,第14卷(第2期), |
Also Published As
Publication number | Publication date |
---|---|
CN103150278A (zh) | 2013-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103150278B (zh) | 基于pio和dma混合的网络接口卡描述符提交方法 | |
US7171526B2 (en) | Memory controller useable in a data processing system | |
KR100337056B1 (ko) | 상이한 주파수로 동작하는 버스사이에 전송되는 데이터를버퍼링하는 디바이스 및 방법 | |
CN100444131C (zh) | 具有仲裁分组协议的存储器仲裁系统及方法 | |
TWI239187B (en) | System and method for managing and validating remote keys which correspond to outstanding data transactions | |
KR101105489B1 (ko) | Nand 플래시 메모리의 커맨드 기반 제어 | |
US6823403B2 (en) | DMA mechanism for high-speed packet bus | |
CN106325758B (zh) | 一种队列存储空间管理方法及装置 | |
CN101276318A (zh) | 基于pci-e总线的直接存取数据传输控制装置 | |
US10133549B1 (en) | Systems and methods for implementing a synchronous FIFO with registered outputs | |
CN101303884A (zh) | 与非型闪存控制器和读写控制系统及方法 | |
CN101436171B (zh) | 模块化通信控制系统 | |
CN101154202A (zh) | 管理多处理器计算机系统中的系统管理中断的系统和方法 | |
CN102402401A (zh) | 一种磁盘io请求队列调度的方法 | |
CN105260332A (zh) | 一种对cpld数据包进行有序存储的方法及系统 | |
CN106254270A (zh) | 一种队列管理方法及装置 | |
CN101261611A (zh) | 一种外围设备间的数据传输装置和传输方法 | |
CN108628759A (zh) | 乱序执行nvm命令的方法与装置 | |
CN116486868A (zh) | 计算高速链路(CXL)上的高速非易失性存储器(NVMe) | |
CN103488597A (zh) | 一种先进先出缓存器及其读写数据的方法 | |
CN116166581A (zh) | 用于pcie总线的队列式dma控制器电路及数据传输方法 | |
CN105701060B (zh) | 基于fpga的高速实时数据记录系统 | |
US9535850B1 (en) | System and method for efficient DMA transfers | |
CN114168503A (zh) | 一种接口ip核控制方法、接口ip核、装置及介质 | |
CN101174248A (zh) | 利用直接存储器存取控制来传输数据的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |