CN105653481B - 基于PCIe总线的数据传输方法和装置 - Google Patents

基于PCIe总线的数据传输方法和装置 Download PDF

Info

Publication number
CN105653481B
CN105653481B CN201410647345.6A CN201410647345A CN105653481B CN 105653481 B CN105653481 B CN 105653481B CN 201410647345 A CN201410647345 A CN 201410647345A CN 105653481 B CN105653481 B CN 105653481B
Authority
CN
China
Prior art keywords
tlp
bus
processor
pcie
field
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
Application number
CN201410647345.6A
Other languages
English (en)
Other versions
CN105653481A (zh
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 CN201410647345.6A priority Critical patent/CN105653481B/zh
Priority to PCT/CN2015/094300 priority patent/WO2016074619A1/zh
Publication of CN105653481A publication Critical patent/CN105653481A/zh
Application granted granted Critical
Publication of CN105653481B publication Critical patent/CN105653481B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Bus Control (AREA)

Abstract

本发明公开了一种基于PCIe总线的数据传输方法和装置,属于通信技术领域。所述方法包括:NTB接收请求设备发送的请求TLP,请求TLP包括Requester ID字段、Tag字段和地址字段,Requester ID字段携带请求设备的总线号、设备号和功能号,地址字段用于指示目标设备的地址,Requester ID字段携带请求设备的总线号、设备号和功能号,请求设备和目标设备分别在通过NTB连接的第一、二PCIe总线域;采用NTB在第二PCIe总线域中的总线号、设备号和功能号替换请求TLP中的请求设备的总线号、设备号和功能号,并发送给目标设备。本发明通过将请求TLP中的请求设备的总线号、设备号和功能号分别替换为NTB在第二PCIe总线域中的总线号、设备号和功能号,当IOMMU对请求TLP进行合法性检测时,不会再引起错误。

Description

基于PCIe总线的数据传输方法和装置
技术领域
本发明涉及通信技术领域,特别涉及一种基于PCIe总线的数据传输方法和装置。
背景技术
***设备高速互连(Peripheral Component Interconnect Express,简称“PCIe”)为总线和接口标准。在处理器***中,PCIe总线属于局部总线,主要用于连接外部设备。在一个处理器***中,PCIe设备使用独立的地址空间,即PCIe总线的地址空间,也称为PCIe总线域。处理器可以通过根联合体(Root Complex,简称“RC”)访问RC所属的PCIe总线域中的PCIe设备,该RC所属的PCIe总线域中的PCIe设备也可以通过RC访问主存储器。在包括多个处理器***的计算机***中,可以采用PCIe非透明桥(Non-TransparentBridging,简称“NTB”)将不同的PCIe总线域的地址空间进行隔离,以连接不同的处理器***,此时该NTB同时作为与其连接的两个PCIe总线域的PCIe设备。一个处理器***中的处理器可以通过NTB访问另一个处理器***中的处理器或者另一个处理器***的PCIe总线域中的PCIe设备。
当一个处理器***中的处理器(简称为第一处理器)通过NTB访问另一个处理器***中的处理器(简称为第二处理器)时,例如,第一处理器想读取第二处理器管理的存储器中的数据时,NTB会对第一处理器发送的存储器读请求事务层包(Transaction LayerPacket,简称“TLP”)中的请求者身份标识Requester ID(即第一处理器的RC在第一PCIe总线域中的ID)进行转换,以满足第二PCIe总线域中的地址空间的要求。
现有技术中,提供了一种NTB对Requester ID进行转换的方法,以存储器读请求TLP为例,当NTB接收到第一处理器发送的存储器读请求TLP时,先在显示查找表(Look-UpTable,简称“LUT”)中建立索引,并将该存储器读请求TLP中的Requester ID1的中的BusNumber1和Device Number1以该索引对应的表项内容保存在LUT中,再将该存储器读请求TLP中的Bus Number1修改为NTB在第二处理器对应的PCIe总线域中的Bus Number2,将Device Number1修改为LTU的索引值,Function Number1保持不变,然后将修改后的存储器读请求TLP发送给第二处理器。
当第二处理器中的输入输出存储管理单元(input/output memory managementunit,简称“IOMMU”)开启时,会对存储器读请求TLP进行合法性检测,由于现有的NTB对存储器读请求TLP进行转换时,其Requester ID中只有Bus Number采用了NTB在第二PCIe总线域中的Bus Number,而Device Number为LUT的索引值,Function Number为NTB在第一PCIe总线域中的Function Number,在IOMMU查询的页表结构中并不存在这样的Requester ID对应的PCIe设备(说明该读请求TLP不合法),因此,会引起IOMMU错误,例如不支持的请求等,导致IOMMU无法正常工作。
发明内容
本发明实施例提供了一种基于PCIe总线的数据传输方法和装置,可以使IOMMU对请求TLP进行合法性检测时,不会再引起错误,所述技术方案如下:
第一方面,本发明实施例提供了一种基于PCIe总线的数据传输方法,所述方法包括:
非透明桥接收请求设备发送的请求事务层包TLP,所述请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,所述地址字段用于指示目标设备的地址,所述请求者身份标识Requester ID字段携带所述请求设备的总线号、设备号和功能号,所述请求设备属于第一PCIe总线域,所述目标设备属于第二PCIe总线域,所述第一PCIe总线域和所述第二PCIe总线域通过所述非透明桥连接,所述Tag字段用于标识同一时间段内同一请求设备发送的不同TLP;
分别采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述请求TLP中的所述请求设备的总线号、设备号和功能号,得到替换后的请求TLP,所述替换后的请求TLP中的Tag字段的值是由所述非透明桥分配的;
将所述替换后的请求TLP发送给所述目标设备;
所述分别采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述请求TLP中的所述请求设备的总线号、设备号和功能号,包括:
从PCIe配置空间寄存器中读取所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号;
采用读取到的所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述请求设备发送的所述请求TLP中的所述请求设备的总线号、设备号和功能号。
进一步地,当所述请求TLP为读请求TLP时,在所述分别采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述TLP中的所述请求设备的总线号、设备号和功能号之前,所述方法还包括:
保存所述读请求TLP中携带的标识Tag字段的值、所述请求设备的总线号、设备号和功能号与所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值的映射关系。
可选地,当所述TLP为读请求TLP时,所述方法还包括:
接收所述目标设备发送的读完成TLP,所述读完成TLP包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段,所述完成者身份标识Completer ID字段携带所述目标设备的总线号、设备号和功能号;
采用所述读完成TLP中的标识Tag字段的值,根据所述映射关系,得到所述请求设备的总线号、设备号和功能号以及所述读请求TLP中携带的标识Tag字段的值;
采用得到的所述请求设备的总线号、设备号和功能号,替换所述读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号;
采用得到的所述读请求TLP中携带的标识Tag字段的值,替换所述读完成TLP中的标识Tag字段的值;
采用所述非透明桥在所述第一PCIe总线域中的总线号、设备号和功能号,替换所述完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP;
将所述替换后的读完成TLP发送给所述请求设备。
进一步地,所述保存所述读请求TLP中携带的标识Tag字段的值、所述请求设备的总线号、设备号和功能号与所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值的映射关系,包括:
将所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值保存为显示查找表LUT中的索引;
将所述读请求TLP中携带的标识Tag字段的值、所述请求设备的总线号、设备号和功能号保存为所述索引对应的表项。
第二方面,本发明实施例提供了一种基于PCIe总线的数据传输装置,所述装置包括:
第一接收模块,用于非透明桥接收请求设备发送的请求事务层包TLP,所述请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,所述地址字段用于指示目标设备的地址,所述请求者身份标识Requester ID字段携带所述请求设备的总线号、设备号和功能号,所述请求设备属于第一PCIe总线域,所述目标设备属于第二PCIe总线域,所述第一PCIe总线域和所述第二PCIe总线域通过所述非透明桥连接,所述Tag字段用于标识同一时间段内同一请求设备发送的不同TLP;
第一替换模块,用于分别采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述请求TLP中的所述请求设备的总线号、设备号和功能号,得到替换后的请求TLP,所述替换后的请求TLP中的Tag字段的值是由所述非透明桥分配的;
发送模块,用于将所述替换后的请求TLP发送给所述目标设备;
所述第一替换模块,包括:
读取单元,用于从PCIe配置空间寄存器中读取所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号;
替换单元,用于采用读取到的所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述请求设备发送的所述请求TLP中的所述请求设备的总线号、设备号和功能号。
当所述请求TLP为读请求TLP时,所述装置还包括:
保存模块,用于保存所述读请求TLP中携带的标识Tag字段的值、所述请求设备的总线号、设备号和功能号与所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值的映射关系。
可选地,当所述TLP为读请求TLP时,所述接收模块还用于接收所述目标设备发送的读完成TLP,所述读完成TLP包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段,所述完成者身份标识Completer ID字段携带所述目标设备的总线号、设备号和功能号;
所述装置还包括:获取模块,用于采用所述读完成TLP中的标识Tag字段的值,根据所述映射关系,得到所述请求设备的总线号、设备号和功能号以及所述读请求TLP中携带的标识Tag字段的值;
第二替换模块,用于采用得到的所述请求设备的总线号、设备号和功能号,替换所述读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号;
所述第二替换模块还用于采用得到的所述读请求TLP中携带的标识Tag字段的值,替换所述读完成TLP中的标识Tag字段的值;
第三替换模块,用于采用所述非透明桥在所述第一PCIe总线域中的总线号、设备号和功能号,替换所述完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP;
所述发送模块还用于将所述替换后的读完成TLP发送给所述请求设备。
进一步地,所述保存模块,包括:
第一索引单元,用于将所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值保存为显示查找表LUT中的索引;
第二索引单元,用于将所述读请求TLP中携带的标识Tag字段的值、所述请求设备的总线号、设备号和功能号保存为所述索引对应的表项。
本发明实施例提供的技术方案带来的有益效果是:
通过非透明桥将请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的请求TLP中的请求者身份标识Requester ID对应的PCIe设备为PCIe总线初始化中已经存在于页表中的设备,当IOMMU开启,对请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。
图1是基于PCIe总线的数据传输架构的示意图;
图2是本发明实施例一提供的一种基于PCIe总线的数据传输方法的流程图;
图3是本发明实施例二提供的一种基于PCIe总线的数据传输方法的流程图;
图4是本发明实施例三提供的一种基于PCIe总线的数据传输方法的流程图;
图5是本发明实施例四提供的一种基于PCIe总线的数据传输装置的结构示意图;
图6是本发明实施例五提供的一种基于PCIe总线的数据传输装置的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
为了更好地理解本发明的实施例,下面结合图1,以包括两个采用NTB连接的处理器***的计算机***为例,对本发明中涉及的基于PCIe总线的数据传输架构做简要地介绍。
参见图1,该计算机***包括中央处理器1(Center Prossecing Unit,简称“CPU”)、CPU2、PCIe总线3、PCIe总线4、主存储器6、主存储器7、PCIe交换机8和PCIe交换机9,其中,CPU1中集成有RC12,CPU2中集成有RC13,RC12与主存储器6连接,PCIe总线3的两端分别与RC12和PCIe交换机8连接,RC13与主存储器7连接,PCIe总线4的两端分别与RC13和PCIe交换机9连接,PCIe交换机8上连接有PCIe设备82和PCIe设备83,PCIe交换机9上连接有PCIe设备91,且PCIe交换机8和PCIe交换机9中分别集成有NTB,PCIe交换机8和PCIe交换机9通过各自的NTB相互连接,RC12、PCIe交换机8、PCIe设备82和PCIe设备83属于PCIe总线域10,RC13、PCIe交换机9和PCIe设备91属于PCIe总线域11。
RC可以包括连接PCIe设备的接口以及IOMMU等。在本发明实施例中,PCIe设备可以为PCIe端点、PCIe桥和PCIe交换机等。
其中,IOMMU的重要组成部分为直接存储器访问(Direct Memory Access,简称“DMA”)重映射。在***初始化的过程中,RC会给每个PCIe设备分别分配总线号(BusNumber)、设备号(Device Number)和功能号(Function Number),且每个PCIe设备的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number)在该PCIe设备所在的PCIe总线域内唯一。因此,在***初始化时,RC可以将每个PCIe设备的总线号(BusNumber)、设备号(Device Number)和功能号(Function Number)作为索引,在DMA重映射的输入输出(In\Out,简称“IO”)页表中保存每个PCIe设备能够访问的主存空间的地址。
当PCIe设备访问主存储器的空间时,IOMMU会根据访问请求中的Bus Number、Device Number和Function Number查找DMA重映射的IO页表,以确定是否存在与该PCIe设备对应的IO页表的页表项,如果不存在,则上报给相应的中央处理器,由中央处理器向该PCIe设备发送IOMMU错误,如果存在时,IOMMU将查找结果转换为PCIe设备所要访问的主存储器的物理地址。
以上计算机***的结构仅为举例,在其他的实现方式中,RC也可以不集成在CPU中,而是作为一个单独的芯片或者集成在北桥芯片中。
实施例一
本发明实施例提供了一种基于PCIe总线的数据传输方法,适用于前述计算机***,该方法的执行主体为NTB。参见图2,该方法包括:
步骤201:非透明桥接收请求设备发送的请求TLP,该请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,地址字段用于指示目标设备的地址,请求者身份标识Requester ID字段携带请求设备的总线号、设备号和功能号,请求设备属于第一PCIe总线域,目标设备属于第二PCIe总线域,第一PCIe总线域和第二PCIe总线域通过所述非透明桥连接。
该请求设备可以为RC或PCIe设备,例如,请求设备可以为图1中的RC12,也可以是PCIe设备81、PCIe设备82和PCIe交换机8,第一PCIe总线域为PCIe总线域10。该目标设备可以为RC或PCIe设备。例如,目标设备可以是图1中的RC13,也可以是PCIe设备91,第二PCIe总线域为PCIe总线域11。
步骤202:分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换请求TLP中的请求设备的总线号、设备号和功能号,得到替换后的请求TLP。
步骤203:将替换后的请求TLP发送给目标设备。
其中,请求TLP可以是读请求TLP或写请求TLP。实现时,该NTB可以集成在PCIe交换机中,也可以不集成在PCIe交换机中,而是作为一个单独的芯片,或者集成在RC中。
本发明实施例通过非透明桥将请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的请求TLP中的请求者身份标识Requester ID对应的***设备为PCIe总线初始化中已经存在于页表中的设备,当IOMMU开启,对请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
实施例二
本发明实施例提供了一种基于PCIe总线的数据传输方法,适用于前述计算机***,该方法的执行主体为NTB。本实施例中,以请求TLP为读请求TLP为例,对本发明进行说明,参见图3,方法包括:
步骤301:接收请求设备发送的读请求TLP。
其中,读请求TLP可以包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,请求者身份标识Requester ID字段携带请求设备在第一PCIe总线域中的总线号(Bus Number)、设备号(Device Number)和功能号(Function Number),第一PCIe总线域为请求设备所在的PCIe总线域。地址字段用于指示目标设备的地址。
实现时,读请求TLP可以是存储器读请求TLP和输入输出I/O读请求TLP。
在PCIe总线标准中,请求者身份标识Requester ID和标识Tag字段合称为Transaction ID。同一时间段内,Transaction ID字段必须是唯一的,即该时间段内一个PCIe总线域中不存在两个或两个以上的读请求TLP中的Transaction ID字段的值完全相同。在这同一时间段内,同一个PCIe设备发送的多个TLP(例如读请求TLP),其Requester ID字段是相同的,因此,可以将Tag字段取为不同的值,以区分同一时间段内,同一个PCIe设备发送的各个TLP。也就是说,同一PCIe设备发送的请求TLP中的Tag字段的值唯一,所以可以采用NTB对接收的某个请求TLP进行转换后得到的请求TLP的标识Tag字段的值作为索引,例如图1中的PCIe交换机8中的NTB将从RC12接收的读请求TLP中的Tag字段替换为第二PCIe总线域中的Tag字段,并将替换后的读请求TLP在第二PCIe总线域中的Tag字段的值作为索引。
实现时,请求设备可以为RC或PCIe设备。例如,参见图1,请求设备为CPU1中的RC12,第一PCIe总线域为PCIe总线域10。其中,PCIe设备可以是PCIe端点(Endpoint)(例如网卡、显卡等)、PCIe交换机和PCI桥片等。PCI桥片可以将PCIe总线转换为PCI总线或者PCI-X总线之后,连接PCI设备或者PCI-X设备。
在步骤301之前,还可以包括请求设备将自己在第一PCIe总线域中的总线号、设备号和功能号写入读请求TLP的请求者身份标识Requester ID字段中。
具体地,PCIe总线规定,在一个PCIe总线域空间中,最多只能有256条PCIe总线,因此,在一个TLP中,总线号(Bus Number)字段的长度为8比特(bit),在每一条PCIe总线中最多包含32个设备,因此,一个TLP中的设备号(Device Number)字段的长度为5比特,每一个PCIe设备中最多包含8个功能,因此,一个TLP中的功能号(Function Number)字段的长度为5比特。由于PCIe总线使用“端对端”的连接方式,在每条PCIe总线上只能连接一个下游PCIe设备,当该下游PCIe设备为PCIe端点时,其设备号(Device Number)的值通常为0,当下游PCIe设备为PCIe交换机(Switch)时,可以通过PCIe交换机在一条PCIe总线上连接多个PCIe设备,则多个PCIe设备的设备号(Device Number)可以取不同的值。
在本实施例中,当***通电后,CPU可以通过枚举的方式(例如采用深度优先搜索算法)对PCIe总线域中的总线号进行初始化,并将初始化结果保存在PCIe设备的配置空间寄存器中,CPU再对各个总线号对应的PCIe设备的设备号和功能号进行初始化,然后CPU再将各组总线号、设备号和功能号作为DMA重映射的IO页表的索引进行保存。
需要说明的是,一个完整的TLP一般可以包括一个或者多个TLP Prefix(前缀)、TLP头和Data Payload(数据有效负载)等,而请求者身份标识Requester ID字段、标识Tag字段和地址字段均携带于TLP头中,此为现有技术,在此省略详细描述。
步骤302:保存读请求TLP中携带的标识Tag字段的值、请求设备的总线号、设备号和功能号与替换后的读请求TLP在第二PCIe总线域中的标识Tag字段的值的映射关系。
该读请求TLP在第二PCIe总线域中的标识Tag字段的值由NTB分配。实现时,各个读请求TLP的标识Tag字段的值可以采用顺序编号的方式依次产生。替换后的读请求TLP在第二PCIe总线域中的标识Tag字段的值与请求设备的总线号、设备号和功能号以及读请求TLP中携带的标识Tag字段的值(即读请求TLP在第一PCIe总线域中的标识Tag字段的值)的映射关系可以采用表格的形式(例如,LUT等)进行保存。
其中,保存读请求TLP中携带的Tag字段的值、请求设备的总线号、设备号和功能号与替换后的读请求TLP在第二PCIe总线域中的标识Tag字段的值的映射关系,可以包括:
将替换后的读请求TLP在第二PCIe总线域中的Tag字段的值保存为显示查找表LUT中的索引;
将读请求TLP中携带的标识Tag字段的值、请求设备的总线号、设备号和功能号保存为索引对应的表项。例如,一读请求TLP替换前后的标识Tag字段的值为分别为6和5、在第一PCIe总线域中的总线号为2、设备号为1、功能号为4,则可以建立索引为Tag值5,显示查找表LUT中的对应的表项是Tag值为6、总线号为2、设备号为1、功能号为4的记录。
其中,该显示查找表LUT可以由NTB建立和维护。容易理解地,标识Tag字段的长度决定了NTB能够暂存多少个同类型的TLP,如果标识Tag字段长度为5,NTB能够暂存32个不同类型的TLP;如果PCIe设备使能了扩展标识(Extended Tag)位,则标识Tag字段可以由8位组成,此时NTB能够暂存256个不同类型的TLP。当标识Tag字段的长度为8比特时,该显示查找表LUT可以包括256个表项。
步骤303:分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换读请求TLP中的请求设备的总线号、设备号和功能号,得到替换后的读请求TLP。
实现时,分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换读请求TLP中的请求设备的总线号、设备号和功能号,可以包括:
从PCIe配置空间寄存器中读取非透明桥在第二PCIe总线域中的总线号、设备号和功能号;其中,PCIe配置空间寄存器从数字电路来讲通常就是一组D触发器构成,能存储0 1比特,不同01比特组成的字段对应不同的总线号、设备号和功能号。PCIe配置空间寄存器的不同的地址空间分配给不同的PCIe总线域。
采用读取到的非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换读请求TLP中的请求设备的总线号、设备号和功能号。
步骤304:将替换后的读请求TLP发送给目标设备。
实现时,NTB是采用基于地址(Address)的路由的将读请求TLP发送给目标设备。该目标设备的路由信息携带于读请求TLP的TLP头的地址Address字段中。
当目标设备接收到读请求TLP时,IOMMU会根据读请求TLP中的Bus Number、DeviceNumber和Function Number(即NTB在第二PCIe总线域中的总线号、设备号和功能号)查询DMA重映射的IO页表,以检测该读请求TLP的合法性。由于NTB在第二PCIe总线域中的总线号、设备号和功能号在***初始化时,已经分配,所以IOMMU对该读请求TLP检测结果为合法。
步骤305:接收目标设备发送的读完成TLP。
其中,读完成TLP可以包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段。该完成者身份标识Completer ID字段携带目标设备在第二PCIe总线域中的总线号、设备号和功能号。读完成TLP中的Tag字段的值仍为替换后的读请求TLP在第二PCIe总线域中的Tag字段的值。
实现时,该读完成TLP还携带有读请求TLP所请求访问的数据,该数据可以承载于读请求TLP的数据有效负载(Data Payload)字段中。
需要说明的是,完成者身份标识Completer ID字段也携带于TLP头中,此为现有技术,在此省略详细描述。
步骤306:采用读完成TLP中的Tag字段的值,查找LUT,得到请求设备在第一PCIe总线域中的的总线号、设备号和功能号以及读请求TLP中携带的标识Tag字段的值。
读完成TLP中的Tag字段的值仍为替换后的读请求TLP在第二PCIe总线域中的Tag字段的值,所以可以直接用读完成TLP中的Tag字段的值查找LUT表。
步骤307:采用得到的请求设备在第一PCIe总线域中的总线号、设备号和功能号,替换读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号。
步骤308:采用得到的读请求TLP中携带的标识Tag字段的值,替换读完成TLP中的标识Tag字段的值。
需要说明的是,步骤307和308的执行没有先后顺序,也可以先执行步骤308,再执行步骤307。
步骤309:采用非透明桥在第一PCIe总线域中的总线号、设备号和功能号,替换完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP。
其中,非透明桥可以直接从PCIe配置空间寄存器中读取非透明桥在第一PCIe总线域中的总线号、设备号和功能号,并采用读取到的非透明桥在第一PCIe总线域中的总线号、设备号和功能号,替换完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP。
步骤310:将转换后的读完成TLP发送给请求设备。
在步骤305~310中,目标设备采用基于ID(即读完成TLP中的Bus Number、DeviceNumber和Function Number)的路由方式向NTB发送读完成TLP,NTB也采用基于ID的路由方式向请求设备发送读完成TLP。
本发明实施例通过非透明桥将读请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的读请求TLP中的请求者身份标识Requester ID对应的PCIe设备为PCIe总线初始化中已经存在于页表中的***设备,当IOMMU开启,对读请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
实施例三
本发明实施例提供了一种基于PCIe总线的数据传输方法,适用于前述计算机***,该方法的执行主体为NTB。本实施例中的请求TLP为写请求TLP,参见图4,该方法包括:
步骤401:非透明桥接收请求设备发送的写请求TLP,写请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,地址字段用于指示目标设备的地址,请求者身份标识Requester ID字段携带请求设备的总线号、设备号和功能号,请求设备属于第一PCIe总线域,目标设备属于第二PCIe总线域,第一PCIe总线域和第二PCIe总线域通过非透明桥连接。
其中,写请求TLP可以是存储器写请求TLP和I/O写请求TLP。
步骤402:分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换写请求TLP中的请求设备的总线号、设备号和功能号,得到替换后的写请求TLP。
步骤403:将替换后的写请求TLP发送给目标设备。
本发明实施例通过非透明桥将写请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的写请求TLP中的请求者身份标识Requester ID对应的PCIe设备为PCIe总线初始化中已经存在于页表中的***设备,当IOMMU开启,对写请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
实施例四
本发明实施例提供了一种基于PCIe总线的数据传输装置,可以用于实现实施例一提供的方法,参见图5,该装置包括:第一接收模块41、第一替换模块42和发送模块43。
其中,第一接收模块41用于非透明桥接收请求设备发送的请求事务层包TLP,请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,地址字段用于指示目标设备的地址,请求者身份标识Requester ID字段携带请求设备的总线号、设备号和功能号,请求设备属于第一PCIe总线域,目标设备属于第二PCIe总线域,第一PCIe总线域和第二PCIe总线域通过非透明桥连接。
第一替换模块42用于分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换请求TLP中的请求设备的总线号、设备号和功能号,得到替换后的请求TLP。
发送模块43用于将替换后的请求TLP发送给目标设备。
本发明实施例通过非透明桥将请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的请求TLP中的请求者身份标识Requester ID对应的PCIe设备为PCIe总线初始化中已经存在于页表中的***设备,当IOMMU开启,对请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
实施例五
本发明实施例提供了一种基于PCIe总线的数据传输装置,可以用于实现实施例二或实施例三提供的方法。参见图6,该装置包括:接收模块51、保存模块52、第一替换模块53、发送模块54、获取模块55、第二替换模块56和第三替换模块57。
其中,第一接收模块51用于非透明桥接收请求设备发送的请求事务层包TLP,请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,地址字段用于指示目标设备的地址,请求者身份标识Requester ID字段携带请求设备的总线号、设备号和功能号,请求设备属于第一PCIe总线域,目标设备属于第二PCIe总线域,第一PCIe总线域和第二PCIe总线域通过非透明桥连接。
在本实施例中,请求TLP可以是读请求TLP或写请求TLP。
当请求TLP为读请求TLP时,保存模块52用于保存读请求TLP中携带的标识Tag字段的值、请求设备的总线号、设备号和功能号与替换后的读请求TLP在第二PCIe总线域中的标识Tag字段的值的映射关系。
第一替换模块53用于分别采用非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换请求TLP中的请求设备的总线号、设备号和功能号,得到替换后的请求TLP。
发送模块54用于将替换后的请求TLP发送给目标设备。
可选地,当请求TLP为读请求TLP时,接收模块51还用于接收目标设备发送的读完成TLP,读完成TLP包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段,完成者身份标识Completer ID字段携带目标设备的总线号、设备号和功能号;
获取模块55用于采用读完成TLP中的标识Tag字段的值,根据映射关系,得到请求设备的总线号、设备号和功能号以及所述读请求TLP中携带的标识Tag字段的值;
第二替换模块56用于采用得到的请求设备的总线号、设备号和功能号,替换读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号;
第二替换模块56还用于采用得到的读请求TLP中携带的标识Tag字段的值,替换读完成TLP中的标识Tag字段的值;
第三替换模块57用于采用非透明桥在第一PCIe总线域中的总线号、设备号和功能号,替换完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP;
发送模块54还用于将替换后的读完成TLP发送给请求设备。
实现时,保存模块52可以包括:
第一索引单元521用于将替换后的读请求TLP在第二PCIe总线域中的标识Tag字段的值保存为显示查找表LUT中的索引;
第二索引单元522用于将读请求TLP中携带的标识Tag字段的值、请求设备的总线号、设备号和功能号保存为索引对应的表项。
第一替换模块53可以包括:
读取单元531用于从PCIe配置空间寄存器中读取非透明桥在第二PCIe总线域中的总线号、设备号和功能号;
替换单元532用于采用读取到的非透明桥在第二PCIe总线域中的总线号、设备号和功能号,替换请求TLP中的请求设备的总线号、设备号和功能号。
本发明实施例通过非透明桥将请求TLP中的请求者身份标识Requester ID字段的总线号、设备号和功能号分别替换为非透明桥在第二PCIe总线域中的总线号、设备号和功能号,使非透明桥发送给目标设备的请求TLP中的请求者身份标识Requester ID对应的PCIe设备为PCIe总线初始化中已经存在于页表中的***设备,当IOMMU开启,对请求TLP进行合法性检测时,不会再引起错误,IOMMU可以正常工作。
需要说明的是:上述实施例提供的基于PCIe总线的数据传输装置在进行数据传输时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将芯片的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于PCIe总线的数据传输装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (4)

1.一种基于PCIe总线的数据传输方法,其特征在于,应用于包括第一处理器***和第二处理器***的计算机***中,所述第一处理器***和所述第二处理器***采用非透明桥连接,所述第一处理器***包括第一处理器,所述第二处理器***包括第二处理器,所述方法包括:
所述非透明桥接收所述第一处理器发送的读请求事务层包TLP,所述读请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,所述地址字段用于指示所述第二处理器的地址,所述请求者身份标识Requester ID字段携带所述第一处理器的总线号、设备号和功能号,所述第一处理器属于第一PCIe总线域,所述第二处理器属于第二PCIe总线域,所述第一PCIe总线域和所述第二PCIe总线域通过所述非透明桥连接,所述Tag字段用于标识同一时间段内同一第一处理器发送的不同读请求TLP;
所述非透明桥为所述读请求TLP分配所述第二PCIe总线域中的Tag字段的值;
所述非透明桥保存所述读请求TLP中携带的所述Tag字段的值、所述第一处理器的总线号、设备号和功能号与替换后的读请求TLP在所述第二PCIe总线域中的Tag字段的值的映射关系;
所述非透明桥从PCIe配置空间寄存器中读取所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号;
所述非透明桥采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述读请求TLP中的所述第一处理器的总线号、设备号和功能号;
所述非透明桥将所述替换后的读请求TLP发送给所述第二处理器,所述替换后的读请求TLP中的Tag字段的值为所述第二PCIe总线域中的Tag字段的值;
所述非透明桥接收所述第二处理器发送的读完成TLP,所述读完成TLP包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段,所述完成者身份标识Completer ID字段携带所述第二处理器的总线号、设备号和功能号;
所述非透明桥采用所述读完成TLP中的标识Tag字段的值,根据所述映射关系,得到所述第一处理器的总线号、设备号和功能号以及所述读请求TLP中携带的标识Tag字段的值;
所述非透明桥采用得到的所述第一处理器的总线号、设备号和功能号,替换所述读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号;
所述非透明桥采用得到的所述读请求TLP中携带的标识Tag字段的值,替换所述读完成TLP中的标识Tag字段的值;
所述非透明桥采用所述非透明桥在所述第一PCIe总线域中的总线号、设备号和功能号,替换所述完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP;
所述非透明桥将所述替换后的读完成TLP发送给所述第一处理器。
2.根据权利要求1所述的方法,其特征在于,所述保存所述读请求TLP中携带的标识Tag字段的值、所述第一处理器的总线号、设备号和功能号与所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值的映射关系,包括:
将所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值保存为显示查找表LUT中的索引;
将所述读请求TLP中携带的标识Tag字段的值、所述第一处理器的总线号、设备号和功能号保存为所述索引对应的表项。
3.一种基于PCIe总线的数据传输装置,其特征在于,应用于包括第一处理器***和第二处理器***的计算机***中,所述第一处理器***和所述第二处理器***采用非透明桥连接,所述第一处理器***包括第一处理器,所述第二处理器***包括第二处理器,所述装置包括:
接收模块,用于所述非透明桥接收所述第一处理器发送的读请求事务层包TLP,所述读请求TLP包括请求者身份标识Requester ID字段、标识Tag字段和地址字段,所述地址字段用于指示所述第二处理器的地址,所述请求者身份标识Requester ID字段携带所述第一处理器的总线号、设备号和功能号,所述第一处理器属于第一PCIe总线域,所述第二处理器属于第二PCIe总线域,所述第一PCIe总线域和所述第二PCIe总线域通过所述非透明桥连接,所述Tag字段用于标识同一时间段内同一第一处理器发送的不同读请求TLP;
保存模块,用于保存所述读请求TLP中携带的标识Tag字段的值、所述第一处理器的总线号、设备号和功能号与替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值的映射关系;
第一替换模块,用于分别采用所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述读请求TLP中的所述第一处理器的总线号、设备号和功能号,得到替换后的读请求TLP,所述替换后的读请求TLP中的Tag字段的值是由所述非透明桥分配的;
发送模块,用于将所述替换后的读请求TLP发送给所述第二处理器;
所述第一替换模块,包括:
读取单元,用于从PCIe配置空间寄存器中读取所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号;
替换单元,用于采用读取到的所述非透明桥在所述第二PCIe总线域中的总线号、设备号和功能号,替换所述第一处理器发送的所述读请求TLP中的所述第一处理器的总线号、设备号和功能号;
所述接收模块还用于接收所述第二处理器发送的读完成TLP,所述读完成TLP包括请求者身份标识Requester ID字段、完成者身份标识Completer ID字段和标识Tag字段,所述完成者身份标识Completer ID字段携带所述第二处理器的总线号、设备号和功能号;
获取模块,用于采用所述读完成TLP中的标识Tag字段的值,根据所述映射关系,得到所述第一处理器的总线号、设备号和功能号以及所述读请求TLP中携带的标识Tag字段的值;
第二替换模块,用于采用得到的所述第一处理器的总线号、设备号和功能号,替换所述读完成TLP中的请求者身份标识Requester ID字段中的总线号、设备号和功能号;
所述第二替换模块还用于采用得到的所述读请求TLP中携带的标识Tag字段的值,替换所述读完成TLP中的标识Tag字段的值;
第三替换模块,用于采用所述非透明桥在所述第一PCIe总线域中的总线号、设备号和功能号,替换所述完成者身份标识Completer ID字段中的总线号、设备号和功能号,得到替换后的读完成TLP;
所述发送模块还用于将所述替换后的读完成TLP发送给所述第一处理器。
4.根据权利要求3所述的装置,其特征在于,所述保存模块,包括:
第一索引单元,用于将所述替换后的读请求TLP在所述第二PCIe总线域中的标识Tag字段的值保存为显示查找表LUT中的索引;
第二索引单元,用于将所述读请求TLP中携带的标识Tag字段的值、所述第一处理器的总线号、设备号和功能号保存为所述索引对应的表项。
CN201410647345.6A 2014-11-14 2014-11-14 基于PCIe总线的数据传输方法和装置 Active CN105653481B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201410647345.6A CN105653481B (zh) 2014-11-14 2014-11-14 基于PCIe总线的数据传输方法和装置
PCT/CN2015/094300 WO2016074619A1 (zh) 2014-11-14 2015-11-11 基于PCIe总线的数据传输方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410647345.6A CN105653481B (zh) 2014-11-14 2014-11-14 基于PCIe总线的数据传输方法和装置

Publications (2)

Publication Number Publication Date
CN105653481A CN105653481A (zh) 2016-06-08
CN105653481B true CN105653481B (zh) 2019-03-26

Family

ID=55953745

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410647345.6A Active CN105653481B (zh) 2014-11-14 2014-11-14 基于PCIe总线的数据传输方法和装置

Country Status (2)

Country Link
CN (1) CN105653481B (zh)
WO (1) WO2016074619A1 (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106445573B (zh) * 2015-08-11 2020-09-04 华为技术有限公司 固件升级方法、装置及高速***设备互联集群***
EP4084423A4 (en) * 2020-01-22 2023-01-11 Huawei Technologies Co., Ltd. METHOD AND DEVICE FOR DATA TRANSMISSION ON PCIE BASE
CN111651397B (zh) * 2020-05-09 2022-11-15 山东浪潮科学研究院有限公司 一种访问PXIe外设模块的方法和设备
CN116724308A (zh) * 2021-05-24 2023-09-08 华为技术有限公司 一种数据传输的方法及装置
CN116257479B (zh) * 2023-05-16 2023-08-15 北京象帝先计算技术有限公司 重排序缓冲器、***、装置、设备及传输方法
CN116303148B (zh) * 2023-05-17 2023-08-22 北京中科网威信息技术有限公司 多插槽设备网卡探测方法、装置、电子设备及存储介质
CN117076374B (zh) * 2023-10-17 2024-02-09 苏州元脑智能科技有限公司 一种PCIe流式总线的转换方法、装置、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101242371B (zh) * 2008-03-14 2010-11-10 杭州华三通信技术有限公司 基于PCIe交换架构路由器堆叠的方法、***和装置
CN103430161A (zh) * 2012-11-15 2013-12-04 华为技术有限公司 一种基于PCIE Switch通信的方法、装置及***
WO2014027416A1 (ja) * 2012-08-17 2014-02-20 富士通株式会社 情報処理装置、及び情報処理装置の制御方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012053031A1 (en) * 2010-10-19 2012-04-26 Hitachi, Ltd. Storage apparatus and virtual port migration method for storage apparatus
JP5903801B2 (ja) * 2011-08-23 2016-04-13 富士通株式会社 通信装置およびid設定方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101242371B (zh) * 2008-03-14 2010-11-10 杭州华三通信技术有限公司 基于PCIe交换架构路由器堆叠的方法、***和装置
WO2014027416A1 (ja) * 2012-08-17 2014-02-20 富士通株式会社 情報処理装置、及び情報処理装置の制御方法
CN103430161A (zh) * 2012-11-15 2013-12-04 华为技术有限公司 一种基于PCIE Switch通信的方法、装置及***

Also Published As

Publication number Publication date
CN105653481A (zh) 2016-06-08
WO2016074619A1 (zh) 2016-05-19

Similar Documents

Publication Publication Date Title
CN105653481B (zh) 基于PCIe总线的数据传输方法和装置
US11954058B2 (en) System and method for extended peripheral component interconnect express fabrics
ES2761927T3 (es) Método y aparato para extender el dominio PCIE
US8917734B1 (en) Method and apparatus for an aggregated non-transparent requester ID translation for a PCIe switch
US9274940B2 (en) Method and apparatus for allocating memory space with write-combine attribute
US7120711B2 (en) System and method for communicating over intra-hierarchy and inter-hierarchy links
US20140006659A1 (en) Driver-assisted base address register mapping
CN110806997B (zh) 一种片上***以及存储器
US20110252174A1 (en) Hierarchical to physical memory mapped input/output translation
US20120303848A1 (en) System and method for allocating transaction id in a system with a plurality of processing modules
US8316169B2 (en) Physical to hierarchical bus translation
US8375156B2 (en) Intelligent PCI-express transaction tagging
US6526459B1 (en) Allocation of input/output bus address space to native input/output devices
CN104750634A (zh) 读取方法及***,互联设备控制器
US11782846B2 (en) Digital signal processor, DSP system, and method for accessing external memory space
CN105389275B (zh) 基于AMBA架构的虚拟PCIe‑PCI桥接***
US20090327563A1 (en) Connecting between data-handling circuits of an integrated circuit

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