一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种PCIeP2P系统测试启动方法和装置与流程

2022-05-18 05:41:19 来源:中国专利 TAG:

一种pcie p2p系统测试启动方法和装置
技术领域
1.本发明属于总线设计领域,特别涉及一种pcie p2p系统测试启动方法和装置。


背景技术:

2.pcie switch(下称sw)用来扩展pcie的通道(lane)的数量,以此增强主cpu的pcie设备的扩展能力。sw广泛应用于大型存储系统或服务器平台的板卡设备中。传统的标准sw具有一个上行端口(up)和多个下行端口(dp)。同一个sw下的多个dp端口可以同时连接相应的ep(endpoint,端点)设备,并且多个ep设备可以相互通信。ep设备例如可以是普通的nvme(non-volatile memory express)硬盘。
3.例如,连接到同一个sw的ep设备分别称为ep0和ep1。如果需要将ep0的数据传送到ep1,ep0可以首先将数据传送到cpu,cpu再将数据传送到ep1,但两个ep之间的通信完全是依赖cpu的,数据传输带宽受cpu带宽的限制,且数据需要拷贝两次,具有较高的延迟,显然不是最优传输路径。为了使两个ep之间能够直接传送数据,就需要利用sw的p2p特性。
4.在验证和测试sw的p2p特性时,现有技术主要采用以下两种方法:
5.1)模拟发包器模拟p2p:如图1所示,其中ep2是一个模拟发包器,该发包器可以构造读/写tlp(transaction layer packet)数据包,访问cmb盘的buff(control memory buffer控制存储缓冲器),达到测试p2p的效果。
6.2)nvme盘构造p2p:如图2所示,其中ep2是一个普通nvme盘,主机端host下发指令,配置普通nvme盘的dma硬件模块向cmb盘发起内存读/写的tlp包,访问cmb盘的read_buff/write_buff,达到测试p2p的效果。而这种方法根据buff的容量又分为两种情况。当cmb盘的buff容量较大时,启动p2p的线程数量可以随着buff的容量加大而不断增加,然而大容量buff会提高硬件成本。当cmb盘的buff容量较小时,硬件成本较低,但启动p2p的线程数量受到限制。每个p2p线程需要独占一份buff资源。如图3和4所示,假设一个cmb盘buff容量是512kb,每个p2p线程要读/写1kb,则最多能启动512个p2p线程。
7.另一方面,传统的p2p测试工具(如cmb_copy、p2pdma)限定了只有专用于读/写类型的buff才能启动p2p,如读类型的read_buff和写类型的write_buff,因为read_buff和write_buff会映射到内部的flash,p2p发起者读read_buff相当于从内部flash读出来数据,p2p发起者写write_buff相当于写数据到内部flash。对于市面上常见的cmb盘,可能仅支持sq_buff类型或者cq_buff类型(分别为用于缓存请求指令和响应指令的buff),当上述测试工具检测到这种cmb盘的buff类型不是读/写类型时,会导致p2p测试启动失败。


技术实现要素:

8.本发明的目的在于提供一种pcie p2p系统测试启动方法和装置,用于解决测试工具因设备buff类型不匹配而启动失败以及p2p线程数量受buff大小限制的问题。
9.根据本发明的第一方面,提供了一种pcie p2p系统测试启动方法,包括:
10.步骤101:确定与pcie switch设备连接的cmb盘的buff类型,并记录所述buff的
bar地址;
11.步骤102:当确定所述buff类型为非read_buff或者非write_buff时,根据所述bar地址创建虚拟buff;
12.步骤103:当所述cmb盘的buff接收到来自ep设备的p2p读写请求时,将所述p2p读写请求的地址指向所述虚拟buff;
13.步骤104:将所述虚拟buff划分为多个子buff,并将同一个ep设备发起的多个p2p读写请求的地址指向同一个子buff中,以启动从所述ep设备到所述cmb盘的p2p测试。
14.优选地,所述cmb盘与多个所述ep设备均连接到所述pcie switch设备的dp端口。
15.优选地,所述非read_buff或者非write_buff的buff类型包括sq_buff或者cq_buff类型。
16.优选地,所述根据所述bar地址创建虚拟buff,进一步包括:
17.将所述cmb盘的原buff的一部分作为虚拟buff,并将所述虚拟buff的bar起始地址设置为所述原buff的bar起始地址与预定义偏移量的总和。
18.优选地,所述将读写请求的地址指向所述虚拟buff,进一步包括:
19.通过host下发测试指令到所述ep设备,以使所述ep设备发送所述p2p读写请求,将所述p2p读写请求的读地址或写地址替换为所述虚拟buff对应的bar地址。
20.优选地,所述ep设备为nvme盘。
21.根据本发明的第二方面,提供了一种pcie p2p系统测试启动装置,包括:
22.确定模块,用于确定与pcie switch设备连接的cmb盘的buff类型,并记录所述buff的bar地址;
23.创建模块,用于当确定所述buff类型为非read_buff或者非write_buff时,根据所述bar地址创建虚拟buff;
24.重定向模块,用于当所述cmb盘的buff接收到来自ep设备的p2p读写请求时,将所述p2p读写请求的地址指向所述虚拟buff;
25.测试启动模块,用于将所述虚拟buff划分为多个子buff,并将同一个ep设备发起的多个p2p读写请求的地址指向同一个子buff中,以启动从所述ep设备到所述cmb盘的p2p测试。
26.优选地,所述cmb盘与多个所述ep设备均连接到所述pcie switch设备的dp端口。
27.优选地,所述非read_buff或者非write_buff的buff类型包括sq_buff或者cq_buff类型。
28.优选地,所述创建模块进一步配置为:
29.将所述cmb盘的原buff的一部分作为虚拟buff,并将所述虚拟buff的bar起始地址设置为所述原buff的bar起始地址与预定义偏移量的总和。
30.优选地,所述重定向模块进一步配置为:
31.通过host下发测试指令到所述ep设备,以使所述ep设备发送所述p2p读写请求,将所述p2p读写请求的读地址或写地址替换为所述虚拟buff对应的bar地址。
32.优选地,所述ep设备为nvme盘。
33.相比于现有技术,本发明的方案在不增加成本增加cmb盘容量的基础上,利用现有的cmb的buff大小,启动p2p线程数量不受buff容量的限制,提升了压力测试的效果,也使得
仅支持sq_buff类型或者sq_buff类型的buff能够验证p2p的正确性。
34.本发明的其它特征和优点将在随后的说明书中阐述,并且部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在说明书、权利要求书以及附图中所指出的结构和流程来实现和获取。
附图说明
35.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单介绍,显而易见地,下面描述中的附图是本发明的某些实施例,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获取其他的附图。
36.图1是根据现有技术的模拟发包器模拟p2p测试的结构示意图。
37.图2是根据现有技术的nvme盘构造p2p测试的结构示意图。
38.图3是根据现有技术的多个nvme盘共享cmb盘buff的结构示意图。
39.图4是根据现有技术的cmb盘的子buff与p2p线程数量的比例关系示意图。
40.图5是根据本发明的pcie p2p系统测试启动方法的流程图。
41.图6是根据本发明的cmb盘的子buff与p2p线程数量的非线性关系示意图。
42.图7是根据本发明的优化后多个nvme盘共享cmb盘buff的结构示意图。
具体实施方式
43.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地说明,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获取的所有其他实施例,都属于本发明保护的范围。
44.通过对传统技术的分析,发明人发现,read_buff和write_buff之所以能够被允许启动p2p,是因为两种buff会映射到内部的flash。被读取的时候硬盘才能从flash缓存数据到buff;被写入的时候硬盘才能将buff的数据刷到flash内。对write_buff执行p2p写操作相当于将数据写入flash,对read_buff执行p2p读操作相当于从flash读出数据,host端可以从flash读/写数据,从而能够对cmb盘的flash数据进行数据正确性校验。而诸如sq_buff和cq_buff类型,仅用于缓存请求指令/响应指令,不会映射到内部的flash,在被读/写时都无法直接利用这两种类型的buff读/写flash内的数据,它们分别用于硬盘内部处理指令模块从sq_buff取得指令,或者存放响应到cq_buff。有鉴于此,首先需要对nvme软件驱动流程作出优化,以解决这些类型的buff执行p2p读/写的问题。
45.本发明公开了一种pcie p2p系统测试启动方法和装置,针对目前主流的验证场景,即在cmb盘的buff容量较小并且不进行数据校验的情况下,对p2p测试工具进行优化,旨在使得p2p线程数量不受buff容量的限制,并且支持多种类型的buff启动p2p测试,即测试工具不受buff类型的约束而正常启动p2p测试。
46.本发明首先在第一方面提出了一种pcie p2p系统测试启动方法,参见图5的流程图,所述pcie p2p系统测试启动方法包括:
47.步骤101:确定与所述pcie p2p设备连接的cmb盘的buff类型,并记录所述buff的
bar地址。
48.在驱动软件初始化时,即在构造pcie树过程中,记录cmb盘的每个buff的bar(基址寄存器base address register)地址。bar地址表示buff在pcie地址空间中的基地址。
49.例如对于通用的cmb盘而言,可以记录sq_buff、cq_buff、read_buff、write_buff等4种buff类型的bar地址,其中read_buff、write_buff类型是默认能够执行p2p的特定类型的buff,sq_buff、cq_buff类型是需要虚拟映射后才能执行p2p的buff类型。
50.步骤102:当确定所述buff类型为非read_buff或者非write_buff时,根据所述bar地址创建虚拟buff。
51.所述非read_buff或者非write_buff的buff类型可以是sq_buff或者cq_buff类型。针对sq_buff类型或者cq_buff类型,通过软件模拟的方式得到一个用于专门p2p的buff。cmb作为目的盘,ep设备作为源盘,多个任务i/o可以发出读写请求,来请求cmb数据块的buff。具体地,可以在驱动软件向系统注册sq时,通过软件将sq buff的大小进行缩减,使host系统使用的实际sq buff大小仅占用原始大小的一部分,并将剩余部分的空间虚拟成一个独立的buff即所谓的虚拟buff,专门用于p2p测试的启动,这个虚拟buff的bar起始地址是原sq_buff的bar起始地址加上特定的偏移量。
52.举例而言,如果sq_buff的bar地址是0x10000000,大小为512kb,则驱动软件可以设置前半部分256kb由系统用于存储sq,后半部分256kb可以用作p2p的虚拟buff,这个虚拟buff的bar地址可以是偏移后的地址0x10004000。虚拟buff的bar地址表示虚拟buff在pcie地址空间中的基地址。
53.步骤103:当所述cmb盘的buff接收到来自ep设备的p2p读写请求时,将所述p2p读写请求的地址指向所述虚拟buff。
54.以sq_buff为例,当驱动软件在准备指定由某个ep设备发起对这个sq_buff的p2p读/写请求时,将p2p读/写地址替换为所述虚拟buff对应的bar地址。如上所述,作为发起者的ep设备可以是nvme盘,也可以是其他常规类型的磁盘。即驱动软件通过添加偏移量,p2p将内存读/写请求定向到新的地址,这样就可以实现对flash该地址的读/写,即“sq_buff地址 偏移量”。
55.例如,某个ep设备需要发起地址为0x10000000的内存读/写,实际上,驱动软件最终将被请求的地址重定向到0x10004000(如前所述,0x10000000 0x4000),进而p2p请求读/写的地址是虚拟buff的地址。
56.步骤104:将所述虚拟buff划分为多个子buff,并将同一个ep设备发起的多个p2p读写请求的地址指向同一个子buff中,以启动从所述ep设备到所述cmb盘的p2p测试。
57.具体地,可以将cmb盘的buff划分成m个部分即子buff,同一个ep设备最多可以发起n个线程,即n个p2p读写请求地址可以被指向到其中一个子buff。n和m是相互独立、互不影响的正整数。在非限制性的实施例中,可以将cmb盘的buff平均划分,即多个子buff的大小可以是相等的。例如将1m的buff容量平均分配给4个任务,每个任务可以使用256kb。同一个ep设备可以发起多个线程的读写请求的地址指向同一个子buff。如图6所示,从ep1发起的p2p线程1、p2p线程2、

p2p线程n可以被映射到子buff 1;从ep2发起的p2p线程n 1、p2p线程n 2、

可以被映射到子buff 2。
58.为实现单个子buff在多线程之间的共享,对同一测试任务来说,如果需要数据校
验,采用串行化的方式执行i/o线程,因为数据校验需要单个子buff执行互斥操作。即,在前一个i/o线程尚未完成之前,禁止下一个i/o线程的执行,以此在多个i/o线程之间分时复用同一个子buff。对同一任务来说,如果不需要数据校验,则可以采用并行的方式启动i/o线程,此时多个i/o线程同时复用该子buff。
59.当多个ep设备均发起p2p请求时,按照步骤103的映射机制将来自不同测试任务的p2p请求定向到相应的子buff,可以测试多对一的p2p连接,并且在不进行数据正确性校验的情况下,能够实现n个ep设备读写同一个cmb设备的同一个buff的目的。
60.多个p2p线程与buff资源的关系示意图如图7所示。sw的up端口连接主机端host,多个dp端口连接多个ep设备。由host下发指令到ep设备,指示其启动p2p线程,接收方都指定为同一个cmb盘。
61.例如,ep2发起的n个p2p线程,读/写地址都指定到cmb盘的第1个子buff,ep3发起p个p2p线程,读/写地址都指定到cmb盘的第2个子buff,依次类推。每个ep允许启动的线程数量也可以是不同的,例如n=1024,p=2048等。
62.采用本发明的方法,cmb_copy、p2pdma等测试工具在没有适合p2p读写的buff的情况下,通过软件虚拟得到一个适配的read_buff类型或者write_buff类型的虚拟buff,虚拟buff的数据由host端维护,p2p写入虚拟buff之后由host端读取数据,p2p读出虚拟buff之前由host端放置数据,同样也能够执行flash读写和数据正确性校验。
63.根据本发明的实施例,对于多个ep设备中的每个p2p发起者,无论对端cmb设备的buff是哪一种类型,都能够发起p2p的内存读/写;对于p2p接收者,无论自身提供哪种类型的buff,都可以接收对端cmb设备发出的p2p读/写请求。因为按照本发明上述实施例的方法,只要cmb盘的buff能够具备可读写的基本属性,并且具备校验数据正确性的方法,则p2p测试工具即可启动p2p测试,使得cmb_copy、p2pdma等仅支持sq_buff类型或者sq_buff类型的测试工具能够验证p2p的正确性。
64.同时,在cmb的buff容量有限的场景下,多个p2p线程可以重复利用cmb的小容量buff,启动p2p线程的数量不再受buff容量的限制。
65.可以理解,上述实施例中描述的元件拓扑结构和功能模块的数量仅为举例。本领域技术人员还可以根据使用需要,来选择cmb盘的其他的buff类型,以及发起者ep设备的类型,或者还可以将本发明的方法应用于多个cmb盘。
66.相应地,本发明在第二方面提供了一种pcie p2p系统测试启动装置,包括:
67.确定模块201,用于确定与pcie switch设备连接的cmb盘的buff类型,并记录所述buff的bar地址;
68.创建模块202,用于当确定所述buff类型为非read_buff或者非write_buff时,根据所述bar地址创建虚拟buff;
69.重定向模块203,用于当所述cmb盘的buff接收到来自ep设备的p2p读写请求时,将所述p2p读写请求的地址指向所述虚拟buff;
70.测试启动模块204,用于将所述虚拟buff划分为多个子buff,并将同一个ep设备发起的多个p2p读写请求的地址指向同一个子buff中,以启动从所述ep设备到所述cmb盘的p2p测试。
71.与现有技术相比,采用本发明的上述技术方案,在不增加成本增加cmb盘容量的基
础上,利用现有的cmb的buff大小,启动p2p线程数量不受buff容量的限制,提升了压力测试的效果,也使得仅支持sq_buff类型或者sq_buff类型的buff能够验证p2p的正确性。
72.尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献