CN105893289A - 内存映射输入输出地址分配方法、装置及计算机系统 - Google Patents
内存映射输入输出地址分配方法、装置及计算机系统 Download PDFInfo
- Publication number
- CN105893289A CN105893289A CN201610187579.6A CN201610187579A CN105893289A CN 105893289 A CN105893289 A CN 105893289A CN 201610187579 A CN201610187579 A CN 201610187579A CN 105893289 A CN105893289 A CN 105893289A
- Authority
- CN
- China
- Prior art keywords
- pcie
- address
- mmio address
- switch
- mmio
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/28—Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0024—Peripheral component interconnect [PCI]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Systems (AREA)
Abstract
本申请实提供了MMIO地址分配方法,装置及计算机系统。所述方法包括:处理器进行PCIe总线扫描;当扫描到PCIe Switch时,所述处理器确定所述PCIe Switch的MMIO地址分配目标;当所述MMIO地址分配目标不为所述PCIe Switch的基地址寄存器BAR时,所述处理器为所述MMIO地址分配目标分配MMIO地址;当所述MMIO地址分配目标为所述PCIe Switch的BAR时,所述处理器不为所述MMIO地址分配目标分配MMIO地址。采用本申请所提供的方法、装置及计算机系统,可以以减少因虚拟机侧内存地址则与主机侧MMIO地址指间的地址冲突所导致的PCIe终端访问错误。
Description
技术领域
本申请涉及计算机体系结构领域,尤其涉及内存映射输入输出地址分配方法、装置及计算机系统。
背景技术
外围组件快速互连(peripheral component interconnect express,简称PCIe)是一种基于点对点串行连接的总线和接口标准。由于在现有的计算机系统架构下,主机中用于PCIe终端(endpoint)的接入的PCIe插槽(slot)数量有限。为使主机能够挂载更多的PCIe终端,现有技术通常会外围组件快速互连交换机(PCIe Switch)对主机的PCIe插槽进行扩展,从而可以使更多的PCIe终端通过所述PCIe Switch所述主机。
当采用PCIe Switch对主机的PCIe插槽进行扩展时,主机中的基本输入输出系统(basic input output system,简称:BIOS)会在主机启动后会进行PCIe设备扫描,从而确定PCIe总线的级数及PCIe总线上所接入的PCIe Switch及PCIe终端等PCIe设备;并根据各个PCIe设备的地址空间需求分别为各个PCIe终端的BAR分配内存映射输入输出(memory mapping input/output,简称:MMIO)地址,从而使主机中的中央处理器(central processing unit,简称CPU)可以直接通过MMIO地址访问PCIe Switch上所挂载的每一个PCIe设备。
为提高主机整体系能,使主机各个设备的性能能够被最大化的利用,越来越多的主机开始使用虚拟化技术d(virtualization technology d,简称VT-d)在主机中虚拟出一个或多个虚拟机。为进一步降低主机的资源消耗,提升主机的性能,能够使虚拟机能够直接访问PCIe终端直通(passthrough)技术应用也越来越广泛。在采用直通技术的场景下,如果主机中存在虚拟机,除主机会为PCIe终端分配MMIO地址之外,虚拟机也会为PCIe终端分配MMIO地址,从而使同一个PCIe设备既存在主机侧MMIO地址,又存在虚拟机侧MMIO地址,同样的,对于同一片内存区域,也会既存在主机侧内存地址又存在虚拟机侧内存地址,而CPU中则存在一个VT-d模块来实现同一个PCIe终端或同一片内存区域虚拟机侧MMIO地址与主机侧内存地址之间的转换。
但是由于PCIe Switch也是一个PCIe设备,其自身的BAR也有主机侧MMIO地址,当PCIe Switch的下行端口接收到PCIe终端发起的直接内存存取(directional memoryaccess,简称DMA)访问请求时,由于该DMA访问请求所请求的访问的虚拟机侧内存地址可能与PCIe Switch BAR的主机侧MMIO地址相同;在此情况下PCIe Switch会因为地址冲突,而将原本应该传输给CPU进行地址翻译的虚拟机侧DMA访问,误认成对PCIeSwitch BAR的访问,从而造成PCIe终端访问错误。
发明内容
本申请实施例提供了内存映射输入输出地址分配方法、装置及计算机系统,以减少因虚拟机侧内存地址则与主机侧MMIO地址指间的地址冲突所导致的PCIe终端访问错误。
第一方面,本申请实施例提供了一种MMIO地址分配方法,该方法包括:处理器进行外围组件快速互连PCIe总线扫描;当扫描到外围组件快速互连交换机PCIe Switch时,所述处理器确定所述PCIe Switch的MMIO地址分配目标;当所述MMIO地址分配目标不为所述PCIe Switch的基地址寄存器BAR时,所述处理器为所述MMIO地址分配目标分配MMIO地址;当所述MMIO地址分配目标为所述PCIe Switch的BAR时,所述处理器不为所述MMIO地址分配目标分配MMIO地址。
采用本方面提供的实现方式,在MMIO地址分配的过程中,处理器不再为PCIe Switch的BAR分配MMIO地址,因此可以避免出现DMA访问请求所请求的访问的虚拟机侧内存地址可能与PCIe Switch BAR的主机侧MMIO地址相同的情况,从而可以减少因虚拟机侧内存地址则与主机侧MMIO地址指间的地址冲突所导致的PCIe终端访问错误。
结合第一方面,在第一方面第一种可能的实现方式中,当PCIe设备为PCIe Switch时,所述MMIO地址分配目标可以包括所述PCIe Switch的上行端口、下行端口或BAR。当所述PCIe设备为PCIe终端时,所述MMIO地址分配目标包括可以包括所述PCIe终端的BAR及实现PCIe终端各种功能的寄存器。
结合第一方面及第一方面第一种可能的实现方式,在第一方面第二种可能的实现方式中,所述处理器为所述MMIO地址分配目标分配MMIO地址包括:当PCIe Switch的下行端口接入有PCIe设备时,所述处理器为所述PCIe Switch的下行端口及上行端口分配MMIO地址。当PCIe Switch的下行端口没有接入PCIe设备时,则可以不为所述PCIeSwitch的下行端口及上行端口分配MMIO地址。
采用本实现方式,可以在PCIe Switch的下行端口接入有PCIe设备时,为所述PCIeSwitch的下行端口及上行端口分配MMIO地址。从而可以在计算机系统中存在多个PCIeSwitch时,能够加快MMIO地址的分配速度。
结合第一方面第二种可能的实现方式,在第一方面第三种可能的实现方式中,所述处理器为所述PCIe Switch的下行端口及上行端口分配MMIO地址包括:所述处理器为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;所述处理器为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
采用本实现方式,可以在需要MMIO地址对齐的情况下,使各个下行端口的MMIO地址之间连续,从而避免上行端口的地址范围中存在不与任何下行端口相对应的空闲区间的出现,减少PCIe终端访问错误。
结合第一方面第三种可能的实现方式,在第一方面第四种可能的实现方式中,为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址之前还包括:所述处理器扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;所述处理器确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
采用本实现方式,不但可以避免上行端口的地址范围中存在不与任何下行端口相对应的空闲区间的出现,减少PCIe终端访问错误,而且还可以根据实际需要确定所述指定长度,从而避免MMIO地址空间的浪费。
结合第一方面或第一方面第一至四种可能的实现方式其中任意一种,在第一方面第五种可能的实现方式中,所述方法还包括:处理器采用PEIe配置访问方式所述PCIeSwitch的接入访问控制功能。处理器可以首先确定用于配置所述PCIe Switch功能的BAR的IO地址,然后将所述IO地址所对应的寄存器中指定寄存器的值设置为预定值,其中,所述指定寄存器为所述BAR中用于控制PCIe Switch ACS功能的开启或关闭的寄存器。
采用本实现方式,处理器可以在不为PCIe Switch的BAR分配MMIO地址的情况下,开启所述PCIe Switch的接入访问控制功能。从而避免PEIe终端之间的直接相互访问,减少PCIe终端访问错误。
第二方面,本申请还提供了MMIO地址分配装置。所述装置包括:扫描单元,用于进行外围组件快速互连PCIe总线扫描;检测单元,用于当扫描到外围组件快速互连交换机PCIe Switch时,确定所述PCIe Switch的MMIO地址分配目标;分配单元,用于当所述MMIO地址分配目标不为所述PCIe Switch的BAR时,为所述MMIO地址分配目标分配MMIO地址;并且,当所述MMIO地址分配目标为所述PCIe Switch的BAR时,所述分配单元不为所述MMIO地址分配目标分配MMIO地址。
结合第二方面,在第二方面第一种可能的实现方式中,所述MMIO地址分配目标包括所述PCIe Switch的上行端口、下行端口或BAR。
结合第二方面或第二方面第一种可能的实现方式,在第二方面第二种可能的实现方式中,所述分配单元,用于当PCIe Switch的下行端口接入有PCIe设备时,为所述PCIeSwitch的下行端口及上行端口分配MMIO地址。
结合第二方面第二种可能的实现方式,在第二方面第三种可能的实现方式中,所述分配单元,包括:下行分配子单元,用于为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;上行分配子单元,用于为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
结合第二方面第三种可能的实现方式,在第二方面第四种可能的实现方式中,所述分配单元,还包括:扫描子单元,用于扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;确定子单元,用于确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
结合第二方面或第二方面第一至四种可能的是实现方式其中任意一种,在第二方面第五种可能的实现方式中,所述装置还包括:开启单元,用于采用PEIe配置访问方式开启所述PCIe Switch的接入访问控制功能。
第三方面,本申请还提供了一种计算机系统,所述系统包括:处理器、PCIe Switch及至少一个接入所述PCIe Switch的PCIe终端;所述处理器,用于行外围组件快速互连PCIe总线扫描;当扫描到外围组件快速互连交换机PCIe Switch时,确定所述PCIe Switch的MMIO地址分配目标;当所述MMIO地址分配目标不为所述PCIe Switch的基地址寄存器BAR时,为所述MMIO地址分配目标分配MMIO地址;并且,当所述MMIO地址分配目标为所述PCIe Switch的BAR时,不为所述MMIO地址分配目标分配MMIO地址。
结合第三方面,在第三方面第一种可能的实现方式中,所述处理器,还用于当PCIeSwitch的下行端口接入有PCIe设备时,为所述PCIe Switch的下行端口及上行端口分配MMIO地址。
结合第三方面第一种可能的实现方式,在第三方面第二种可能的实现方式中,所述处理器,还用于为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;及为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
结合第三方面第二种可能的实现方式,在第三方面第三种可能的实现方式中,所述处理器,还用于扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
采用本申请所提供的方法、装置及计算机系统,可以减少因虚拟机侧内存地址则与主机侧MMIO地址指间的地址冲突所导致的PCIe终端访问错误。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请计算机系统的结构示意图。
图2为本申请MMIO地址分配方法一个实施例的流程示意图;
图3为本申请MMIO地址分配效果的一个示意图;
图4为本申请MMIO地址分配效果的另一个示意图;
图5为本申请MMIO地址分配装置一个实施例的结构示意图;
图6为本申请MMIO地址分配装置一个实施例的结构示意图;
图7为本申请MMIO地址分配装置另一个实施例的结构示意图。
具体实施方式
参见图1为本申请计算机系统的结构示意图。
本申请实施例中的计算机系统可以包括处理器101、存储器102以及通过PCIe总线接入到所述计算机系统的PCIe终端及PCIe Switch等PCIe设备。
所述处理器101为所述计算机系统的控制中心,利用各种接口和线路连接整个计算机系统的各个部分,通过运行或执行存储在存储器内的软件程序和/或模块,以及调用存储在存储器内的数据,以执行计算机系统的各种功能和/或处理数据。所述处理器可以由集成电路(Integrated Circuit,简称IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。在本发明实施方式中,所述处理器可以为至少一个中央处理器(Central Processing Unit,简称CPU),所述CPU可以是单运算核心,也可以是多运算核心,可以是实体机的处理器,也可以是虚拟机的处理器。
所述处理器101中可以包含有VT-d模块。所述VT-d模块可以完成虚拟机侧MMIO地址与主机侧内存地址之间的转换,虚拟机在需要访问PCIe终端时,可以直接对PCIe终端的虚拟机侧MMIO地址发起访问请求;CPU中的VT-d模块在检测到该访问请求后,将PCIe终端的虚拟机侧MMIO地址翻译为PCIe终端的主机侧MMIO地址,然后将该访问请求发送至该PCIe终端的主机侧MMIO地址所对应的PCIe Switch的上行端口;PCIeSwitch在接收到该访问请求后,将该访问请求路由至PCIe终端的虚拟机侧MMIO地址所对应的下行端口,从而使PCIe终端可以接收到该访问请求。
PCIe终端在接收到该访问请求后,按照该从该访问请求中解析出的虚拟机侧内存地址发起虚拟机侧直接内存存取(directional memory access,简称DMA)访问请求,并将该虚拟机侧DMA访问请求发送至PCIe Switch的下行端口;PCIe Switch在接收到该DMA访问请求后,该虚拟机侧DMA访问请求发送到主机的CPU,由VT-D模块再将虚拟机侧DMA访问请求所请求访问的虚拟机侧内存地址翻译为主机侧内存地址,从而使PCIe终端完成对主机内存或其他设备的DMA访问。
存储器102可用于存储软件程序以及模块,处理器101通过运行存储在存储器102的软件程序以及模块,从而执行所述计算机系统的各种功能应用以及数据处理。存储器102可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图象播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、图像数据等)等。此外,存储器102可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
其中,所述PCIe总线可以仅包括一级PCIe总线也可以包括多级PCIe总线。如图1所示,第一PCIe总线1031为可以为处理器101内部的PCIe总线,第二PCIe总线1032及第三PCIe总线1033为通过PCIe Switch进行扩展时的PCIe总线。其中,所述第二PCIe总线1032由第一PCIe Switch 1041扩展形成,所述第三PCIe总线1033由第二PCIeSwitch 1042扩展形成。
当有两个或两个以上的PCIe终端接入同一个PCIe Switch时,所述PCIe终端可以分别接入所述PCIe Switch不同下行端口。并且,所述PCIe终端可以为不同类型的多功能设备。
如图1所示,所述第一PCIe终端1051、第二PCIe终端1052及第三PCIe终端1053均为类型不同的多功能设备,并分别通过不同的下行端口接入所述第一PCIe Switch1041。所述第一PCIe终端1051可以为显示接口卡、第二PCIe终端1052可以为音频卡、第三PCIe终端1053可以为网络接口卡。由于各个PCIe终端所要实现的功能不同,因此实现各自所需要的MMIO地址也各不相同。
除所述PCIe总线之外,所述计算机系统还可以包括其他类型的总线,已经通过其他类型总线接入所述计算机系统的设备。例如,所述计算机系统还可以包括存储器102及通过通用串行总线(universal serial bus,简称USB)接入所述计算机系统的USB设备等。在此需要说明的是,仅以两级PCIe总线作为示例,在实际使用中所述计算机系统也可以包括更多或更少的PCIe Switch、PCIe总线或PCIe终端。
参见图2为本申请地址空间分配方法一个实施例的流程示意图。
计算机系统的启动过程包括入输出系统(basic input output system,简称BIOS)启动过程及操作系统启动过程两个阶段。而在BIOS启动过程中及操作系统启动过程中,处理器都可能需要为PCIe设备分配MMIO地址。因此,在所述计算机系统的启动过程中,所述处理器都可以采用图2所示的方式为PCIe设备分配MMIO地址。
如图2所示,所述方法可以包含如下步骤:
步骤201,处理器进行外围组件快速互连PCIe总线扫描。
在BIOS或操作系统启动的过程中,处理器按照PCIe规范的规定进行PCIe总线扫描,以确定PCIe总线的级数级各级PCIe总线中所接入的PCIe设备。
当扫描到PCIe设备时,处理器根据PCIe设备的功能需求为PCIe设备分配MMIO地址,从而可以是处理器或其计算机系统中的其他设备通过MMIO地址访问该PCIe设备。
其中,PCIe设备需要被分配MMIO地址的存储器或功能可以被称为MMIO地址分配目标,在同一个PCIe设备中,可能有多个相同或不同类型的MMIO地址分配目标。当所述PCIe设备为PCIe Switch时,可分配MMIO地址的MMIO地址分配目标可以包括PCIeSwitch的BAR、PCIe Switch的下行端口及PCIe Switch的上行端口等。当所述PCIe设备为PCIe终端时,所述MMIO地址分配目标可以包括所述PCIe设备的BAR等。
步骤202,当扫描到PCIe Switch时,所述处理器确定所述PCIe Switch的MMIO地址分配目标。
其中,MMIO地址分配目标可以是指需要分配MMIO地址的寄存器、设备功能或端口等。例如,所述MMIO地址分配可以目标包括所述PCIe Switch的上行端口、下行端口或BAR。
当处理器通过PCIe总线扫描扫描到PCIe终端时,可以按照PCIe规范的要求为PCIe终端的BAR等寄存器等分配MMIO地址。
步骤203,当所述MMIO地址分配目标不为所述PCIe Switch的BAR时,所述处理器为所述MMIO地址分配目标分配MMIO地址。
为避免地址冲突,处理器在为PCIe Switch各个MMIO地址分配目标分配MMIO地址时,仅对除PCIe Switch的BAR之外的其他MMIO地址分配目标分配MMIO地址。
具体来说,当所述MMIO地址分配目标为PCIe Switch的BAR时,则忽略该MMIO地址分配目标,不为该MMIO地址分配目标分配地址;当所述MMIO地址分配目标不为所述PCIe Switch的BAR时,例如当所述MMIO地址分配目标为所述PCIe Switch的上行端口或下行端口时,处理器才为所述MMIO地址分配目标分配MMIO地址。
由于在MMIO地址分配的过程中,处理器并不为PCIe Switch的BAR的分配MMIO地址,因此PCIe Switch BAR不存在处理器侧MMIO地址,从而也就避免了后虚拟机侧内存地址与PCIe Switch BAR的处理器侧MMIO地址之间的地址冲突,从而可以减少因地址冲突所导致的PCIe终端访问错误。
在实际使用中,除所述PCIe Switch BAR的处理器侧MMIO地址与虚拟机侧内存地址可能会出现冲突之外,PCIe终端的处理器侧MMIO地址也可能会与虚拟机侧内存地址出现冲突。
例如,当虚拟机侧DMA访问请求所访问的虚拟机侧内存地址可能与另一个PCIe终端的处理器侧MMIO地址相同时,PCIe Switch会将原本应该传输给CPU进行地址翻译的虚拟机侧DMA访问请求,误认成对另一个PCIe终端的访问请求,从而导致PCIe Switch将该虚拟机侧DMA访问请求传输给另一个PCIe终端,而不是将该虚拟机侧DMA访问请求传输给CPU,最终造成虚拟机对PCIe终端的访问出现错误。
为避免此类情况的发生,处理器可以开启PCIe Switch的接入访问控制(accesscontrol services,简称ACS)功能,禁止PCIe终端之间的直接相互访问。当PCIe终端之间的直接相互访问被禁止之后,PCIe Switch就不会将原本应该传输给CPU进行地址翻译的虚拟机侧DMA访问请求,误认成对另一个PCIe终端的访问请求,从而进一步减少因地址冲突所导致的PCIe终端访问错误。
由于处理器在扫描到PCIe Switch时,并没有为PCIe Switch的BAR分配MMIO地址,因此会导致处理器无法采用MMIO访问方式对该PCIe Switch进行配置来开启PCIeSwitch的ACS功能。在此情况下,处理器可以采用PEIe配置访问方式访问所述PCIeSwitch,从而开启所述PCIe Switch的接入访问控制功能。具体来说,由于接入计算机系统中的PCIe设备无论是否被分配MMIO地址,在计算机系统的启动过程中,都会被处理器分配一个输入输出(input/output,简称IO)地址;因此在PCIe Switch的BAR未被分配MMIO地址的情况下,处理器可以首先确定PCIe Switch的IO地址,然后通过PCIeSwitch的IO地址访问该PCIe Switch,并通过修改所述PCIe Switch配置信息来开启所述PCIe Switch的接入访问控制功能。
处理器可以首先确定所述PCIe Switch的BAR中用于配置所述PCIe Switch功能的BAR,然后获取该BAR的IO地址。由于该IO地址为地址范围,因此会对应多个寄存器,所述寄存器中包含一个指定寄存器,所述指定寄存器为所述BAR中用于控制PCIe SwitchACS功能的开启或关闭。处理器可以将所述指定寄存器的值设置为预定值,从而开启PCIeSwitch的ACS功能。
例如,在PCIe Switch多个的BAR中,会有一个BAR用于配置PCIe Switch的功能,在该BAR中会有一个比特位用于控制PCIe Switch ACS功能的开启或关闭。如果需要开启ACS功能,那么处理器可以将该BAR中的该比特位的值设置为1。当该BAR中该比特位的值被设置为1时,PCIe Switch会将来自PCIe终端的所有访问请求(包括DMA访问请求)发送至CPU,而不将访问请求发送值其他PCIe终端。
在PCIe Switch的ACS功能开启之后,可以避免PCIe终端之间的直接相互访问,从而避免将虚拟机侧DMA访问请求误认为是一个PCIe终端对另一个PCIe终端的访问请求,进一步减少因虚拟机侧内存地址则与处理器侧MMIO地址指间的地址冲突所导致的PCIe终端访问错误。
在实际使用中,为便于地址管理,处理器在为MMIO地址分配目标分配MMIO地址时,需要使各个地址分配目标的MMIO地址对齐,其中,MMIO地址对齐是指各个地址分配目标MMIO地址的起始地址之间的距离为固定值的正整数倍。
以第一PCIe终端需要5MB地址空间、第二PCIe终端需要6MB地址空间、第三PCIe终端需要13MB地址空间为例,在地址对齐的固定值为8M时。处理器在为PCIe Switch的下行端口分配地址时,会以0偏移量为起始地址分配5MB地址空间给下行端口1,以8M偏移量为起始地址分配6MB地址空间给下行端口2,并以8M偏移量为起始地址分配12MB地址空间给下行端口3。由于上行端口的MMIO地址与下行端口的MMIO地址之间也需要对齐,因此会以32MB的偏移量为起始地址,分配32MB地址空间给上行端口。MMIO地址分配的效果可以如图3所示。
由于下行端口与上行端口之间MMIO地址对齐时,上行端口的地址范围内会包含一些不与任何下行端口相对应的空闲区间。当处理器发起对PCIe上行端口中的MMIO访问请求时,处理器所访问的MMIO地址可能不与任何下行端口的MMIO地址相对应,在此情况下PCIe Switch无法确定需要将访问请求转发至哪个下行端口所对应的PCIe设备,从而导致PCIe终端访问错误。
如图3所述,在上行端口的MMIO地址中,区间1、区间2及区间3不与任何下行端口的MMIO地址相对应,当处理器的MMIO访问请求所访问的地址落在区间1、区间2及区间3中时,会导致PCIe Switch无法确定需要将访问请求转发至哪个下行端口所对应的PCIe设备,从而导致处理器访问PCIe终端失败。
为避免出现上行端口的MMIO地址中有部分区间不与任何下行端口的MMIO地址相对应,处理器在为所述PCIe Switch的下行端口及上行端口分配MMIO地址时,可以首先为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;在各个下行端口的MMIO地址分配完成后,再为上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。采用此地址分配方式,可以使各个下行端口的MMIO地址长度相等且连续,从而避免上行端口的MMIO地址中有存在与任何下行端口都对应的区间。
其中,所述指定长度的确定方式有多种。根据实际需求不同,可以采用不同的方式确定所述指定长度。
可选的,如果预先已经确定了地址长度需求最多的PCIe终端所需求的地址空间长度后,那么可以将所有可能接入所述PCIe Switch下行端口的PCIe终端中,地址长度需求最多的PCIe终端所需求的地址空间长度,确定所述指定长度。采用此分配方式,可以加快PCIe Switch下行端口的MMIO地址分配速度。
仍以第一PCIe终端需要5MB地址空间、第二PCIe终端需要6MB地址空间、第三PCIe终端需要13MB地址空间为例。如果预先已经预先确定了现有各类PCIe终端中,MMIO地中地址长度需求最长的PCIe终端所需求的MMIO地址空间长度为256MB,那么可以以256MB作为所述指定长度,为PCIe Switch的下行端口1、下行端口2及下行端口3各分配长度为256MB的地址空间。并为PCIe Switch的上行端口分配768MB的地址空间。MMIO的地址分配效果如图4所示。
处理器也可以扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;然后再确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。采用此分配现方式,避免MMIO地址空间资源的浪费。
仍以第一PCIe终端需要5MB的MMIO地址空间、第二PCIe终端需要6MB地址空间、第三PCIe终端需要13MB地址空间为例。处理器在进行PCIe设备扫描发现第一PCIe终端需要5MB的MMIO地址空间后,并不立即为PCIe Switch的下行端口1分配MMIO地址,而是记录下行端口1所需要的MMIO地址空间长度为5MB;处理器在进行PCIe设备扫描发现第二PCIe终端后,记录下行端口2所需要的MMIO地址空间长为6MB;同样的,处理器在进行PCIe设备扫描发现第三PCIe终端后,处理器记录下行端口3所需要的MMIO地址空间长度13MB。在各个下行端口所需要的MMIO地址空间长度都确定后,处理器可以确定所述指定长度为13MB,进而为下行端口1、下行端口2及下行端口3都分配长度为13MB的MMIO地址空间,并为PCIe Switch的上行端口分配39MB的地址空间。进一步,如果地址对齐的固定值为8MB,那么所述指定长度可以为16MB,在此情况下处理器可以为每个下行端口分配16MB的MMIO地址空间,并且为上行端口分配48MB的地址空间。采用此分配方式,可以在为PCIe Switch分配MMIO地址时,自动实现地址对齐,并且可以避免上行端口的MMIO地址中有部分区间不与任何下行端口的MMIO地址相对应情况的出现。
参见图5,为本申请MMIO地址分配装置一个实施例的结构示意图。所述MMIO地址分配装置可以为所述处理器本身,也可以设置所述处理器中。
如图5所述,所述装置可以包括扫描单元501,检测单元502及分配单元503。
其中,扫描单元501,用于进行外围组件快速互连PCIe总线扫描;检测单元502,用于当扫描到外围组件快速互连交换机PCIe Switch时,所述确定所述PCIe Switch的MMIO地址分配目标;分配单元503,用于当所述MMIO地址分配目标不为所述PCIe Switch的BAR时,为所述MMIO地址分配目标分配MMIO地址。
可选的,所述分配单元503,用于当PCIe Switch的下行端口接入有PCIe设备时,为所述PCIe Switch的下行端口及上行端口分配MMIO地址。
可选的,如图6所示,所述分配单元503,包括:下行分配子单元5031及上行分配子单元5032。其中,所述下行分配子单元5031,用于为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度。所述上行分配子单元5032,用于为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
可选的,如图7所示,所述分配单元503,还可以包括:扫描子单元5033及确定子单元5034。其中,所述扫描子单元5033,用于扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求。所述确定子单元5034,用于确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
可选的,所述装置还包括:开启单元,用于采用PEIe配置访问方式开启所述PCIeSwitch的接入访问控制功能。
本领域的技术人员可以清楚地了解到本申请实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述的本申请实施方式,并不构成对本申请保护范围的限定。
Claims (17)
1.一种内存映射输入输出MMIO地址分配方法,其特征在于,包括:
处理器进行外围组件快速互连PCIe总线扫描;
当扫描到外围组件快速互连交换机PCIe Switch时,所述处理器确定所述PCIeSwitch的MMIO地址分配目标;
当所述MMIO地址分配目标不为所述PCIe Switch的基地址寄存器BAR时,所述处理器为所述MMIO地址分配目标分配MMIO地址;
当所述MMIO地址分配目标为所述PCIe Switch的BAR时,所述处理器不为所述MMIO地址分配目标分配MMIO地址。
2.如权利要求1所述的方法,其特征在于,所述MMIO地址分配目标包括所述PCIeSwitch的上行端口、下行端口或BAR。
3.如权利要求1或2所述的方法,其特征在于,所述处理器为所述MMIO地址分配目标分配MMIO地址包括:
当PCIe Switch的下行端口接入有PCIe设备时,所述处理器为所述PCIe Switch的下行端口及上行端口分配MMIO地址。
4.如权利要求3所述的方法,其特征在于,所述处理器为所述PCIe Switch的下行端口及上行端口分配MMIO地址包括:
所述处理器为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;
所述处理器为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
5.如权利要求4所述的方法,其特征在于,为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址之前还包括:
所述处理器扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;
所述处理器确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
6.如权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:
处理器采用PEIe配置访问方式开启所述PCIe Switch的接入访问控制功能。
7.一种内存映射输入输出MMIO地址分配装置,其特征在于,包括:
扫描单元,用于进行外围组件快速互连PCIe总线扫描;
检测单元,用于当扫描到外围组件快速互连交换机PCIe Switch时,确定所述PCIeSwitch的MMIO地址分配目标;
分配单元,用于当所述MMIO地址分配目标不为所述PCIe Switch的BAR时,为所述MMIO地址分配目标分配MMIO地址;
并且,当所述MMIO地址分配目标为所述PCIe Switch的BAR时,所述分配单元不为所述MMIO地址分配目标分配MMIO地址。
8.如权利要求7所述的装置,其特征在于,所述MMIO地址分配目标包括所述PCIeSwitch的上行端口、下行端口或BAR。
9.如权利要求7或8所述的装置,其特征在于,
所述分配单元,用于当PCIe Switch的下行端口接入有PCIe设备时,为所述PCIeSwitch的下行端口及上行端口分配MMIO地址。
10.如权利要求9所述的装置,其特征在于,所述分配单元,包括:
下行分配子单元,用于为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;
上行分配子单元,用于为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
11.如权利要求10所述的装置,其特征在于,所述分配单元,还包括:
扫描子单元,用于扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;
确定子单元,用于确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
12.如权利要求7至11任一项所述的装置,其特征在于,还包括:
开启单元,用于采用PEIe配置访问方式开启所述PCIe Switch的接入访问控制功能。
13.一种计算机系统,其特征在于,包括处理器、PCIe Switch及至少一个接入所述PCIe Switch的PCIe终端;
所述处理器,用于行外围组件快速互连PCIe总线扫描;当扫描到外围组件快速互连交换机PCIe Switch时,确定所述PCIe Switch的MMIO地址分配目标;当所述MMIO地址分配目标不为所述PCIe Switch的基地址寄存器BAR时,为所述MMIO地址分配目标分配MMIO地址;并且,当所述MMIO地址分配目标为所述PCIe Switch的BAR时,不为所述MMIO地址分配目标分配MMIO地址。
14.如权利要求13所述的计算机系统,其特征在于,
所述处理器,还用于当PCIe Switch的下行端口接入有PCIe设备时,为所述PCIeSwitch的下行端口及上行端口分配MMIO地址。
15.如权利要求14所述的计算机系统,其特征在于,
所述处理器,还用于为所述PCIe Switch接入有PCIe设备的各个下行端口分配MMIO地址,其中,每一个所述下行端口的MMIO地址长度均为指定长度,且所述指定长度不小于任一所述PCIe设备所需求的MMIO地址长度;为所述PCIe Switch的上行端口分配MMIO地址,其中,所述上行端口的地址空间不小于PCIe Switch各个下行端口的地址空间长度之和。
16.如权利要求15所述的计算机系统,其特征在于,
所述处理器,还用于扫描所述PCIe Switch各个下行端口接入的PCIe终端,从而确定各个所述下行端口所接入的PCIe终端的MMIO地址长度需求;确定所述指定长度,其中,所述指定长度不小于各个所述下行端口所接入的PCIe终端中,MMIO地址长度需求最大的PCIe终端所需求的MMIO地址长度。
17.如权利要求13至16任一项所述的计算机系统,其特征在于,
所述处理器,还用于采用PEIe配置访问方式开启所述PCIe Switch的接入访问控制功能。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610187579.6A CN105893289B (zh) | 2016-03-30 | 2016-03-30 | 内存映射输入输出地址分配方法、装置及计算机系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610187579.6A CN105893289B (zh) | 2016-03-30 | 2016-03-30 | 内存映射输入输出地址分配方法、装置及计算机系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105893289A true CN105893289A (zh) | 2016-08-24 |
CN105893289B CN105893289B (zh) | 2019-02-12 |
Family
ID=57013925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610187579.6A Active CN105893289B (zh) | 2016-03-30 | 2016-03-30 | 内存映射输入输出地址分配方法、装置及计算机系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105893289B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649133A (zh) * | 2016-12-29 | 2017-05-10 | 杭州迪普科技股份有限公司 | Pci内存空间的优化方法和设备 |
CN111709042A (zh) * | 2020-06-17 | 2020-09-25 | 深圳市同泰怡信息技术有限公司 | 一种acs功能的控制方法、装置、存储介质和计算机设备 |
CN113194161A (zh) * | 2021-04-26 | 2021-07-30 | 山东英信计算机技术有限公司 | 一种服务器系统mmioh基地址的设置方法、装置 |
CN113296876A (zh) * | 2020-06-30 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 虚拟机的设备直通方法、设备及存储介质 |
CN113791905A (zh) * | 2021-09-14 | 2021-12-14 | 联想(北京)有限公司 | 计算资源分配方法、装置及电子设备和存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101876954A (zh) * | 2009-12-23 | 2010-11-03 | 中国科学院计算技术研究所 | 一种虚拟机控制系统及其工作方法 |
CN103078747A (zh) * | 2012-12-28 | 2013-05-01 | 华为技术有限公司 | PCIe交换机及其工作方法 |
US8495252B2 (en) * | 2011-01-17 | 2013-07-23 | International Business Machines Corporation | Implementing PCI-express memory domains for single root virtualized devices |
CN103946828A (zh) * | 2013-10-29 | 2014-07-23 | 华为技术有限公司 | 数据处理系统和数据处理的方法 |
CN104572508A (zh) * | 2015-01-22 | 2015-04-29 | 山东超越数控电子有限公司 | 一种基于PCIE非透明桥的cache镜像方法 |
-
2016
- 2016-03-30 CN CN201610187579.6A patent/CN105893289B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101876954A (zh) * | 2009-12-23 | 2010-11-03 | 中国科学院计算技术研究所 | 一种虚拟机控制系统及其工作方法 |
US8495252B2 (en) * | 2011-01-17 | 2013-07-23 | International Business Machines Corporation | Implementing PCI-express memory domains for single root virtualized devices |
CN103078747A (zh) * | 2012-12-28 | 2013-05-01 | 华为技术有限公司 | PCIe交换机及其工作方法 |
CN103946828A (zh) * | 2013-10-29 | 2014-07-23 | 华为技术有限公司 | 数据处理系统和数据处理的方法 |
CN104572508A (zh) * | 2015-01-22 | 2015-04-29 | 山东超越数控电子有限公司 | 一种基于PCIE非透明桥的cache镜像方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106649133A (zh) * | 2016-12-29 | 2017-05-10 | 杭州迪普科技股份有限公司 | Pci内存空间的优化方法和设备 |
CN106649133B (zh) * | 2016-12-29 | 2019-12-06 | 杭州迪普科技股份有限公司 | Pci内存空间的优化方法和设备 |
CN111709042A (zh) * | 2020-06-17 | 2020-09-25 | 深圳市同泰怡信息技术有限公司 | 一种acs功能的控制方法、装置、存储介质和计算机设备 |
CN111709042B (zh) * | 2020-06-17 | 2024-02-09 | 深圳市同泰怡信息技术有限公司 | 一种acs功能的控制方法、装置、存储介质和计算机设备 |
CN113296876A (zh) * | 2020-06-30 | 2021-08-24 | 阿里巴巴集团控股有限公司 | 虚拟机的设备直通方法、设备及存储介质 |
CN113296876B (zh) * | 2020-06-30 | 2022-05-06 | 阿里巴巴集团控股有限公司 | 虚拟机的设备直通方法、设备及存储介质 |
CN113194161A (zh) * | 2021-04-26 | 2021-07-30 | 山东英信计算机技术有限公司 | 一种服务器系统mmioh基地址的设置方法、装置 |
CN113194161B (zh) * | 2021-04-26 | 2022-07-08 | 山东英信计算机技术有限公司 | 一种服务器系统mmioh基地址的设置方法、装置 |
WO2022228315A1 (zh) * | 2021-04-26 | 2022-11-03 | 山东英信计算机技术有限公司 | 一种服务器系统mmioh基地址的设置方法、装置 |
US11847086B2 (en) | 2021-04-26 | 2023-12-19 | Shandong Yingxin Computer Technologies Co., Ltd. | Method and apparatus for configuring MMIOH base address of server system |
CN113791905A (zh) * | 2021-09-14 | 2021-12-14 | 联想(北京)有限公司 | 计算资源分配方法、装置及电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105893289B (zh) | 2019-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105893289A (zh) | 内存映射输入输出地址分配方法、装置及计算机系统 | |
ES2830355T3 (es) | Procedimiento, dispositivo y sistema para implementar el procesamiento de aceleración de hardware | |
US9274940B2 (en) | Method and apparatus for allocating memory space with write-combine attribute | |
CN102707991B (zh) | 多根i/o虚拟化共享方法和系统 | |
US9734096B2 (en) | Method and system for single root input/output virtualization virtual functions sharing on multi-hosts | |
EP1399826B1 (en) | Virtual pci device apparatus and method | |
CN102819447B (zh) | 一种用于多根共享系统的直接i/o虚拟化方法和装置 | |
EP3264280A1 (en) | Method and apparatus for extending pcie domain | |
CN111404753B (zh) | 一种扁平网络配置方法、计算机设备及存储介质 | |
US11568092B2 (en) | Method of dynamically configuring FPGA and network security device | |
CN102722458A (zh) | 一种用于多根共享系统的i/o重映射方法和装置 | |
CN211127902U (zh) | 电子设备和蜂窝电话 | |
EP3716084A1 (en) | Apparatus and method for sharing a flash device among multiple masters of a computing platform | |
CN211557320U (zh) | 电子设备和蜂窝电话 | |
CN110806997B (zh) | 一种片上系统以及存储器 | |
CN106936739A (zh) | 一种报文转发方法及装置 | |
US20190155753A1 (en) | System, Apparatus And Method For Replay Protection For A Platform Component | |
US11457346B2 (en) | Electronic device and method for managing an IC card with multiple SIM profiles | |
KR20210005653A (ko) | 단말 애플리케이션 활성화 방법, 장치 및 시스템 | |
EP3076306B1 (en) | Method and apparatus for achieving device sharing | |
CN107391431B (zh) | 一种多个处理器共享访问存储器的方法、装置及系统 | |
TW200528995A (en) | Peripheral controller with shared EEPROM | |
CN110515869B (zh) | 多Host CPU级联方法及系统 | |
US9619245B1 (en) | Method and apparatus for configuring and booting with more than one protocol using single option ROMBIOS code on multi function converged network adapter | |
CN117271105A (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 |