一种用于多根共享系统的i/o重映射方法和装置的制作方法

文档序号:6370487阅读:180来源:国知局
专利名称:一种用于多根共享系统的i/o重映射方法和装置的制作方法
技术领域
本发明涉及I/O虚拟化技术,特别是涉及多根I/O虚拟化共享系统的I/O重映射方法和装置。
背景技术
PCIe (Peripheral Component Interface Express)设备功能在系统中的标识通常都用ー个由总线号(BUS)/设备号(Device)/功能号(Function)組成的ID号(B/D/F)来指示。系统上电后,系统初始化软件首先根据ID路由对系统中所有的I/O设备进行枚举发现和初始化配置,同时也为设备功能分配了其在PCIe域中的ID号和其所映射的地址窗ロ等。设备初始化完成后,系统软件和驱动程序等上层软件可以通过ID或者地址路由定向到设备。在多根I/O虚拟化共享系统中,为了避免系统竞争和冲突,I/O设备能被多个根节 点使用,但是只能由ー个根节点控制。系统上电吋,I/O设备功能首先被主控制根节点初始化配置其在主控制根节点PCIe域中的ID号和地址窗ロ。当设备功能被分配给从属根节点使用时,使用一个虚拟的设备功能作为从属根节点PCIe域的设备占位符,并接受从属根节点分配的本地PCIe域中的ID号和地址窗ロ。因此,对于从属根节点使用本地PCIe域的ID号和地址对设备功能进行的访问,需要进行重映射,才能实现从属根节点直接访问I/O设备。

发明内容
为解决上述问题,本发明提供了一种用于多根I/O虚拟化共享系统的直接I/O重映射方法,包括步骤1,I/O设备功能基地址定义提取,并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号之间的映射关系;步骤2,主控制根节点PCIe域中的功能基地址写存储,建立功能基地址序号到其在主控制根节点PCIe域的基地址的映射;步骤3,设备功能ID映射关系写存储,建立设备功能在主控制根节点PCIe域和从属根节点PCIe域中的ID号之间的映射;步骤4,从属根节点PCIe域中的功能基地址写存储,建立从属根节点PCIe域的基地址到其对应的功能基地址序号的映射;步骤5,直接I/O重映射,对从属根节点和I/O设备间的事务包进行重映射操作。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤I还包括所述基地址定义提取是在主控制根节点系统发现阶段,获取I/O设备功能配置空间中通过各基地址寄存器(Base Address Register, BAR)定义的地址窗ロ类型,并提取各地址窗ロ对应的基地址掩码;所述基地址掩码,用于指定系统配置的地址窗口中地址的哪些位是固定位,通过所述基地址掩码可以提取访存地址对应的基地址;
所述基地址序号,用于表示设备的功能向系统申请的地址窗口数按照BAR寄存器号顺序排列的序列号,一个I/O设备中同类型的各功能向系统申请的地址窗口类型和数目相同。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述步骤2还包括所述主控制根节点PCIe域中的功能基地址写存储是在主控制根节点系统初始化配置阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。所述功能基地址序号,由基地址序号k和主控制根节点PCIe域中的设备功能号p组合而成,功能基地址序号(k,p)指示的基地址是系统为设备中功能号为p分配的第n个 基地址。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤3还包括所述设备功能ID映射关系写存储是在主控制根节点进行设备I/O资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号作为地址索引,写存储由所述功能所属的根节点标识ID以及所述功能在所属根节点PCIe域中的功能号组成的数据项,建立设备功能在主控制根节点PCIe域中的ID号和其在从属根节点PCIe域中的ID号之间的映射。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述步骤4还包括所述从属根节点PCIe域中的功能基地址写存储是在从属根节点系统PCIe重扫描阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤5还包括所述直接I/O重映射是在从属根节点与I/O设备进行通信的过程中,对从属根节点发起的基于ID路由的下行事务包进行下行ID重映射,对从属根节点发起的基于地址路由的下行事务包进行地址重映射,对设备功能发起的事务包进行上行ID重映射。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤I还包括步骤71,系统上电,初始化BAR寄存器偏移指针的起始地址,初始化基地址序号,初始化64位地址申请标识符,转向步骤72 ;步骤72,接收从主控制根节点发来的事务包;如果接收到主控制根节点发来的事务包,转向步骤73 ;步骤73,事务包判定;解析接收到的事务包,如果该事务包是向BAR寄存器偏移指针指定的寄存器写全I的配置写请求包,转向步骤74 ;否则转步骤72 ;步骤74,接收I/O设备发来的带数据的完成包;如果接收到从I/O设备发来的带数据的完成包,转向步骤75 ;步骤75,地址申请类型判断;解析完成包的数据段,对该BAR定义的地址申请类型进行判断;如果该BAR未用于地址申请,则转向步骤78 ;如果该BAR定义的是64位地址,则转向步骤76 ;否则,转向步骤77 ;步骤76,将数据段内容记录到基地址序号对应的基地址掩码的低L位,使能64位地址申请标识符,并记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗ロ位宽类型与基地址序号的映射关系,转向步骤78 ;步骤77,记录数据段,更新基地址序号及64位地址申请标识符;如果当前的64位申请标识符未使能,指示数据段内容为32位基地址的掩码,则将数据段内容的高L位记录到基地址序号对应的基地址掩码的低L位;否则,数据段内容为基地址序号对应的64位基地址的掩码的高32位,则将数据段记录到基地址序号对应的基地址掩码的高32位;记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗ロ位宽类型与基地址序号的映射关系,然后更新基地址序号加1,并复位64位地址申请标识符,转向步骤78 ;步骤78,更新BAR寄存器偏移指针指向下ー个BAR寄存器,转向步骤79 ;步骤79,BAR寄存器偏移指针有效性判定;判定当前BAR寄存器偏移指针指向的寄存器是否依然为配置空间中的BAR,如果是,则转向步骤72 ;否则转向步骤710 ;

步骤710,结束,标识已经完成基地址定义提取过程。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤2还包括步骤81,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为主控制根节点,转向步骤82 ;步骤82,下行事务包判定;解析接收到的由主控制根节点发来的事务包,如果该事务包是配置事务包,转向步骤83 ;步骤83,获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容所述数据段内容为系统配置的基地址,转向步骤84;步骤84,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗ロ位宽类型,转向步骤85 ;步骤85,地址窗ロ位宽类型判定;判定步骤84获取的地址窗ロ位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤81 ;如果指示的是32为地址或者64位地址的高32位,则转向步骤86 ;步骤86,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤105寄存的基地址和步骤83提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤81。所述用于多根I/O虚拟化共享系统的直接I/O重映射方法,步骤4还包括步骤91,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤92 ;步骤92,下行事务包判定;解析接收到的由从属根节点发来的事务包,如果该事务包是基于ID事务包,转向步骤93 ;步骤93,下行ID重映射;将基于ID路由的事务包中的ID号转换为其对应在主控制根节点PCIe域中的ID号,转向步骤94 ;步骤94,获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容指示的基地址,转向步骤95 ;步骤95,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗口位宽类型,转向步骤96 ;步骤96,地址窗口位宽类型判定;判定步骤95获取的地址窗口位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤91 ;如果指示的是32为地址或者64位地址的高32位,则转向步骤97 ;步骤97,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤96寄存的基地址和步骤94提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤91。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述步骤5包括所述下行ID重映射,指I/O设备功能在从属根节点PCIe域的ID号到其在主控制根节点PCIe域的ID号的匹配转换;所述地址重映射,指从属根节点发出的目标访问地址到其对应在主控制根节点PCIe域中的地址的匹配转换;所述上行ID重映射,指I/O设备功能在主控制根节点PCIe域的ID号到其在从属根节点PCIe域的ID号的匹配转换。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述下行ID重映射包括步骤111,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤112 ;步骤112,事务包类型判定,如果是基于ID路由的事务包,转向步骤113 ;步骤113,提取事务包中指示的发起根节点ID以及要访问的设备功能号,并将其组合作为要比较的数据内容,精确匹配查找,获取该设备功能在主控制根节点PCIe域中功能号,如果存在匹配项,转向步骤114 ;否则转步骤115 ;步骤114,改写事务包中设备功能ID号,使用CAM匹配输出的地址,即指示的主控制根节点PCIe中的功能号,改写事务包中设备功能ID号,操作完后转向步骤111 ;步骤115,向事务包指示的根节点返回不支持的事务包,操作完后转步骤111。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述地址重映射包括步骤121,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤122 ;步骤122,下行事务包判定;解析接收到的由从属根节点发来的事务包,如果该事务包是基于地址事务包,转向步骤123 ;步骤123,解析接收到的基于地址路由的事务包,提取事务包中指示的目标访问地址,转向步骤124 ;步骤124,获取基地址;将目标访问地址与基地址定义提取过程中记录的所有K个基地址掩码进行与操作,获取K个基地址,转向步骤125 ;步骤125,功能基地址序号匹配查找;将步骤124获取的K个BAR基地址作为比较数据,进行并行的精确匹配查找,获取目标访问地址匹配的功能基地址序号;如果存在匹配项,转向步骤126,否则转向步骤,129 ;步骤126,基地址及基地址掩码匹配查找;使用匹配输出的功能基地址序号,获取、所述功能基地址序号对应在主控制根节点PCIe域中的匹配基地址以及基地址序号匹配的基地址掩码,转向步骤127 ;步骤127,匹配的目标访问地址输出译码;根据获取的匹配基地址、匹配基地址掩码,连同步骤123提取的目标访问地址,获取从属根节点PCIe域中的目标访问地址映射到主控制根节点PCIe域中的匹配目标访问地址;操作完后转向步骤128 ;步骤129,使用步骤127获的的匹配目标访问地址,改写事务包中目标访问地址;操作完后转向步骤121 ;步骤129,向事务包指示的根节点返回ー个不支持的事务包,操作完成后转向步骤121。所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,所述上行ID重映射包括
步骤131,接收从I/O设备功能发事务包,如接收到事务包,转向步骤132 ;步骤132,提取事务包指示的I/O设备功能ID号;如果事务包为请求包,提取请求事务包中指示的请求设者ID号;如果是如果事务包是完成包,提取完成事务包中指示的完成者ID号,转向步骤133 ;步骤133,使用提取的I/O设备功能ID号中的功能号作为地址索引,获取对应的根节点标识ID及功能号;如果获得的根节点标识ID非主控制根节点ID,转向步骤134 ;否贝1J,说明事务包所属的根节点为主控制根节点,不需要进行ID转换,转向步骤135 ;步骤134,使用获得的根节点标识ID记录到事务包中;如果事务包为请求包,则使用获得的功能号修改事务包中请求者ID号;如果事务包为完成包,则使用使用获得的功能号修改事务包中完成者ID号,操作完后转向步骤131 ;步骤135,使用主控制根节点标识ID改写事务包;将主控制根节点的标识ID记录到事务包中,操作完后转向步骤131。本发明公开ー种用于多根I/O虚拟化共享系统的直接I/O重映射装置,包括ID重映射模块,所述ID重映射模块包含内容寻址存储CAM和简单双端ロ RAM,通过CAM的精确匹配查找实现I/O设备功能在从属根节点PCIe域中的ID号到其在主控制根节点PCIe域中的ID号的映射,通过写读RAM存储元件实现I/O设备功能在主控制根节点PCIe域中的ID号到其在从属根节点PCIe域中的ID号的映射;地址重映射模块,所述地址重映射模块用于实现I/O设备功能在从属根节点PCIe域的I/o映射地址窗ロ到其主控制根节点PCIe域I/O映射地址窗ロ转换;其中,ID号包括总线号、设备号、功能号。所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述ID重映射模块中的CAM和RAM包括以I/O设备功能的功能号作为地址索引,存储单元存储的数据项包括两部分一部分是该设备功能所属的根节点标识ID,一部分是该设备功能在其所属的根节点PCIe域的功能号。所述用于多根I/O虚拟化共享系统的I/O重映射装置,地址重映射模块包括基地址定义提取模块,所述基地址掩码通过解析配置设备功能的基地址寄存器(Base Address Register, BAR)的事务包,获取I/O设备功能通过各BAR定义的地址窗ロ类型,提取各地址窗口对应的基地址掩码,并记录各基地址寄存器序号与其定义的地址窗口对应的基地址序号之间的映射关系;功能基地址序号匹配模块,所述功能基地址序号匹配模块包含N个深度为P的CAM组成的CAM存储阵列和匹配输出选择模块,每个CAM存储同一 I/O设备中所有功能中相同基地址序列号对应的基地址BAR,实现从属根节点PCIe域中的基地址与其所对应的功能基地址序号的映射;基地址查找模块,所述基地址查找模 块包含深度为Q的简单双端口 RAM,通过写读RAM存储元件,实现功能基地址序号到其在主控制根节点PCIe域中的基地址的映射;输出译码模块,所述输出译码模块根据匹配查找出的主控制根节点PCIe域中基地址及其对应的基地址掩码,将从属根节点PCIe域中的目标访问地址翻译成主控制根节点PCIe域中的目标访问地址;其中,N (N〈=6)表示设备功能申请的地址窗口数目,P表示设备中功能的数目,Q表示系统分配给设备中所有功能的地址窗口的基地址的数目。所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述功能基地址序号匹配模块包括所述CAM存储阵列,是以功能基地址序号为地址索引,存储的数据项包括两部分一部分是I/O设备功能所属的从属根节点ID,一部分是从属根节点分配的基地址,其中,功能基地址序号中的基地址序号选择要存储的CAM,功能基地址序号中的功能号选择要存储的CAM存储单元,所述CAM存储阵列有N个比较数据输入端口,每一个CAM对应一个,所述CAM阵列在数据匹配阶段,输入由从属根节点的目标访问地址通过N个不同的基地址掩码提取获得的N个不同的比较数据项,并行地进行匹配查找,输出N个对应的匹配结果;所述匹配输出选择模块,如果CAM存储阵列输出的N个匹配结果存在(仅存在一个)匹配项,则选择输出由存在匹配项的CAM的输出匹配地址(即功能号p以及其对应的基地址序号n组成的功能基地址序号,同时将匹配标识置I ;否则,将匹配标识置O。所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述基地址查找模块中的RAM包括以功能基地址序号为地址索引,存储的数据项是主控制根节点分配的基地址。本发明的有益效果为,一种用于多根I/O虚拟化共享系统的直接I/O重映射方法和装置。这种直接I/o重映射方法和装置,通过硬件重映射的方式,实现了设备功能在从属根节点PCIe域中ID号和地址窗口到其在主控制根节点PCIe域中对应的ID号和地址窗口的映射,进而实现了根节点对其分配到的设备功能资源进行直接访问和操作,同时为各根节点在访问操作共享的物理I/O设备时提供了隔离和保护,根节点不能访问操作所分配到的I/O资源之外的其他I/O资源。


图I是多根I/O虚拟化共享系统的结构示意图;图2是根节点和I/O设备通信的示意图;图3是ID重映射模块的结构示意图;图4是下行ID重映射过程流程图5是上行ID重映射过程流程图;图6是地址重映射模块的结构示意图;图7是基地址定义提取过程的流程图;图8是主控制根节点PCIe域的功能基地址的写存储过程的流程图;图9是从属根节点PCIe域的功能基地址的写存储过程的流程图;图10是地址重映射过程的流程图;图11是针对SR-IOV设备的地址重映射模块的结构示意
图12是直接I/O重映射方法的流程图。
具体实施例方式下面给出本发明的具体实施方式
,结合附图对本发明做出了详细描述。为了实现多根I/O虚拟化共享系统中各从属根节点对其分配到的I/O设备功能进行直接访问和操作,以获取接近本机的I/o性能,本发明提出了ー种直接I/O重映射方法和装置。所述直接I/o重映射方法和装置,通过硬件重映射的方式,实现了设备功能在从属根节点与主控制根节点PCIe域中对应的ID号和映射I/O的地址窗ロ的映射。所述直接I/O重映射方法,如图12所示,包括以下步骤a)I/0设备功能的基地址定义提取,指在主控制根节点系统发现阶段,获取I/O设备功能通过各基地址寄存器(Base Address Register, BAR)定义的地址窗ロ类型,提取各地址窗ロ对应的基地址掩码,并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号之间的映射关系;其中,所述基地址掩码用于指示系统配置的地址窗口中地址的哪些位是固定位,根节点和I/O设备功能通信使用的地址是由基地址BAR加上偏移构成的具体访问地址,通过记录的基地址掩码可以提取访问地址对应的基地址BAR,所述基地址序号用于表示设备功能向系统申请的地址窗口数按照BAR寄存器号顺序排列的序列号,ー个I/O设备中同类型的各功能向系统申请的地址窗ロ类型和数目相同;b)主控制根节点PCIe域中的功能基地址写存储,所述主控制根节点PCIe域中的功能基地址存储指在主控制根节点系统初始化配置阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址,其中,所述功能基地址序号,由基地址序号k和主控制根节点PCIe域中的设备功能号P组合而成,功能基地址序号(k,p)指示的基地址是系统为设备中功能号为P分配的第η个基地址。;c)设备功能ID映射关系写存储,所述设备功能ID映射关系写存储指在主控制根节点进行设备I/o资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号作为地址索引,写存储所述功能所属的根节点标识ID以及所述功能在所属根节点PCIe域中的功能号,建立设备功能在主控制根节点PCIe域中的ID号和其在从属根节点PCIe域中的ID号之间的映射;d)从属根节点PCIe域中的功能基地址写存储,所述从属根节点PCIe域中的功能基地址写存储指在从属根节点系统PCIe重扫描阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址;e)直接I/O重映射,所述直接I/O重映射指当从属根节点对I/O设备进行发现和使用过程中,对从属根节点发起的基于ID路由的下行事务包进行下行ID重映射,对从属根节点发起的基于地址路由的下行事务包进行地址重映射,对设备功能发起的事务包进行上行ID重映射。图I描绘了多根I/o虚拟化共享系统的结构示意图。多根I/O虚拟化共享系统主要包括三个部分根节点子系统、I/o设备子系统和多根I/O虚拟化共享控制器。多根I/O虚拟化共享控制器通过PCIe接口协议将根节点子系统和I/O设备子系统耦合在一起,实现I/O设备资源被多个根节点直接共享。多根I/O虚拟化共享系统中的根节点子系统包含多个根节点,每个根节点每个根节点是一个单根PCIe环境,它由根联合体(Root Complex, RC)及其连接的CPU组(CPU set)和内存(Mem)组成。其中,运行有PCIe管理相关软件的根节点称之为主控制根节点(MasterRoot Node, mRN),主控制根节点只有一个(下文使用mRNO标识),管理和分配系统中的所有I/O设备资源;其他根节点称为从属根节点(Slave Root Node,sRN),从属根节点可以有多个(下文使用sRNl,sRN2,…,sRNn标识),并根据主控制根节点的分配,拥有一定I/O资源 的独立使用权。根节点上可以运行多个同构或者异构虚拟机(Virtual Machine, VM),虚拟机管理程序(Virtual Machine Manager, VMM)负责调度所分配得到的I/O资源为各VM所用。多根I/O虚拟化共享系统中的I/O设备子系统包含多个I/O设备,各I/O设备具备同时为多个虚拟机提供服务的能力,可以是包含一个物理功能(Physical Function, PF)及其对应的多个虚拟功能(Virtual Function, VF)的SR-IOV设备或者包含多个PF及其对应的多个VF的SR-IOV设备,也可以是多功能1/0设备等。1/0设备子系统是属于主控制根节点这一单根PCIe环境。多根1/0虚拟化共享系统中的多根1/0虚拟化共享控制器由若干个PCIe上游端口 (PCIe Upstream Port)、PCIe 多根交换机和若干个 PCIe 下游端口 (PCIe DownstreamPort)三个部分组成。其中,多根1/0虚拟化共享控制器通过PCIe上游端口连接了多个根节点,它处在一个多根PCIe环境中;PCIe多根交换机,实质是由多个PCI桥建立的N+M个端口的交换机,通过为每个根节点建立一个1+M端口的虚拟PCIe交换机,实现各根节点与M个1/0设备的逻辑连接;PCIe下游端口,包含符合PCI-Express基本规范中的PCIe端口类型定义的PCIe控制器和直接1/0虚拟化接口设备两个功能部分,负责与1/0设备子系统的互连,实现各根节点直接访问物理1/0设备功能。图2描述了根节点和1/0设备通信的示意图,根节点和1/0设备通信不外乎三种方式1/0寄存器读写,DMA (Direct Memory Access)数据搬移,中断事件通知。所述I/0寄存器主要分为两类,一类是仅限系统初始化软件和错误处理软件用来进行设备配置、初始化和故障性错误处理的配置空间寄存器,一类是其他操作软件如驱动程序用来开启操作设备的设备控制状态寄存器。根节点对于1/0设备的配置空间寄存器的读写访问往往通过1/0设备在PCIe树拓扑中的位置来定向,如通过由总线号、设备号和功能号组成的ID来访问。根节点对于1/0设备的控制状态寄存器的访问可以通过丽10(Memory Mapped 1/0,内存映射1/0)的方式。在系统初始化时,系统根据1/0设备功能的配置空间头中BAR寄存器(BAR,Base AddressRegister)定义的需求分配内存地址窗口,并将该内存地址窗口的基地址(以下简称内存基地址)写回到BAR寄存器。根节点通过该基地址加上要访问的寄存器偏移即可定向到该设备功能相应的控制状态寄存器。所述DMA数 据搬移分为两种情况一种是根节点将数据写到内存中,然后通知I/O设备到指定的内存地址取数据;ー种是I/O设备将数据存到根节点指定内存中,完成之后设备发起ー个中断事件通知根节点有数据到达,根节点收到中断通知后再做相应处理。DMA数据搬移实质是内存读写操作,而中断事件实质也是ー个内存写操作,而所操作的内存地址是由根节点通过寄存器读写方式写到了 I/O设备相应的控制状态寄存器中。在多根I/O虚拟化共享系统中,系统上电时,所有根节点都试图枚举发现I/o设备中所有功能并初始化配置其在各自PCIe域中的ID号以及其申请映射地址窗ロ的基址寄存器BAR。这将引起系统竞争,导致I/O设备不能够正常工作,更无法实现I/O设备在多个根节点之间的共享。为解决该问题,提出了使用ー种直接I/O虚拟化接ロ设备来辅助实现I/O设备多根共享的方法。其中,物理I/O设备由主控制根节点初始化配置及分配管理;当I/O设备功能分配各从属根节点时,使用对应的直接I/O虚拟化接ロ设备中逻辑虚拟功能镜像LVF作为从属根节点的设备占位符,接收和存储从属根节点的初始化配置。关于该方法的说明在与本发明相关的另ー篇发明申请(多根I/O虚拟化共享系统和方法)中有详细描述。然而,在从属根节点访问设备时使用的是本地PCIe域中的ID号和地址,直接I/O虚拟化接ロ设备需要进行I/O设备功能在从属根节点PCIe域和主控制根节点PCIe域之间的ID号和映射地址的转换,才能将从属根节点的访问传送至对应的物理I/O设备功能,实现从属根节点直接访问I/O设备的目的。所述ID和地址转换包括三种情况下行事务中从属根节点PCIe域的ID号到主控制根节点PCIe域的ID号转换,称之为下行ID重映射;上行事务中主控制根节点PCIe域的ID号到从属根节点PCIe域的ID号转换;称之为上行ID重映射;下行事务中从属根节点PCIe域的I/O映射地址窗ロ到主控制根节点PCIe域的I/O映射地址窗ロ转换,称之为地址重映射。而对于上行使用地址路由的事务,如DMA和中断事件通知,由于他们操作的地址是其从属根节点分配的,本来就是从属根节点可以识别的本地的内存地址,因此不需要做地址翻译。图3描述了 ID重映射模块的结构示意图。ID重映射模块包括内容寻址存储阵列(Content Addressable Memory, CAM)和简单双端ロ RAM。其中,ID重映射模块通过CAM的精确匹配查找实现I/O设备功能在从属根节点PCIe域中的ID号到其在主控制根节点PCIe域中的ID号的映射,通过写读RAM存储元件实现I/O设备功能在主控制根节点PCIe域中的ID号到其在从属根节点PCIe域中的ID号的映射。ID重映射模块中的CAM,利用I/O设备功能的功能号(FunNojii)在主控制节点PCIe域的连续性,将其作为写存储地址索引(CAM_WrAddr),存储由该功能所属的从属根节点ID (RNID_s)以及其在从属根节点PCIe域中的功能号(FunNo_s)组成的数据项(CAM_Din),进而实现(RNID_s, FunNo_s)到FunNo_m的映射。在主控制根节点进行设备I/O资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号(FunNo_m)作为地址索引(CAM_WrAddr),写存储所述功能所属的根节点标识ID(RNID_s)以及所述功能在所属根节点PCIe域中的功能号(FunNo_s),建立设备功能在主控制根节点PCIe域中的ID号到其在从属根节点PCIe域中的ID号的映射;当接收到从属根节点发来的使用ID路由的下行事务包时,通过对其进行事务包解析,提取事务包中指示的发起事务的从属根节点ID(RNID_s)以及要访问的目标设备功能的功能号(FunNo_s)作为要比较数据项输入(CMP_Din),对CAM的存储内容进行精确的查找匹配。如果存在匹配项,CAM输出匹配标识符(Match_flag)以及该匹配项存储的地址(CAM_Dout),即目标设备功能在主控制根节点PCIe域的功能号(FunNo_m),进而实现下行ID重映射。上行ID重映射表RAM,利用设备功能的功能号(FunNojii)在主控制节点PCIe域的连续性,将其作为RAM的写地址(RAM_WrAddr),存储由该功能号所属的从属根节点ID(RNID_s)以及其在从属根节点PCIe域中的功能号(FunNo_s)组成的数据项(RAM_Din),进而实现FunNoji^Ij (RNID_s, FunNo_s)的映射。在主控制根节点进行设备I/O资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号(FunNojn)作为地址索引(RAM_WrAddr),写存储所述功能所属的根节点标识ID(RNID_s)以及所述功能在所属根节点PCIe域中的功能号(FunNo_S),建立设备功能在从属根节点PCIe域中的ID号到其在主控制根节点PCIe域中的ID号的映射;当接收到从I/O设备发 来的上行事务包时,通过对其进行事务包解析,提取其中指示发起事务的设备功能的功能号(FunNojn),并以此为RAM的读地址(RAM_RdAddr)读取RAM存储表,根据RAM输出(RAM_Dout),即设备功能所属的从属根节点ID(RNID_s)及其在从属根节点PCIe域中的功能号(FunNo_s),进而实现上行ID重映射。图4描述了下行ID重映射过程,具体步骤如下a)接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤b);b)事务包类型判定,如果是基于ID路由的事务包,转向步骤c);c)查询下行ID重映射表CAM,提取事务包中指示的发起根节点ID以及其要访问的设备功能号,并将其组合作为要比较的数据内容,输入下行ID重映射表CAM进行精确匹配查找,如果存在匹配项,转向步骤d);否则转向步骤e);d)改写事务包中设备功能ID号,使用CAM匹配输出的地址,即指示的主控制根节点PCIe中的功能号,改写事务包中设备功能ID号,操作完后转向步骤a);e)向事务包指示的根节点返回一个不支持的事务包,操作完成后转向步骤a)。图6描述了上行ID重映射过程,具体步骤如下a)接收从I/O设备功能发来的事务包,如果接收到事务包,转向步骤b);b)提取事务包指示的I/O设备功能ID号。如果事务包为请求包,提取请求事务包中指示的请求设者ID号;如果是如果事务包是完成包,提取完成事务包中指示的完成者ID号,转向步骤c);c)查询上行ID重映射表RAM,使用提取的I/O设备功能ID号中的功能号为读地址索引,读取RAM输出根节点标识ID及功能号组合而成的数据项。如果RAM输出的根节点标识ID非主控制根节点ID,转向步骤d);否则,说明事务包所属的根节点为主控制根节点,不需要进行ID转换,转向步骤e);d)使用RAM输出的内容改写事务包。将RAM输出的根节点标识ID记录到事务包中;如果事务包为请求包,则使用RAM输出的功能号,修改事务包中请求者ID号;如果事务包为完成包,则使用RAM输出的功能号,修改事务包中完成者ID号,操作完后转向步骤a);e)使用主控制根节点标识ID改写事务包。将主控制根节点的标识ID记录到事务包中,操作完后转向步骤a)。如上文所述,设备功能配置空间中的BAR寄存器定义并记录申请的内存地址窗ロ的基地址,根节点通过分配给设备功能的内存地址访问设备功能的控制状态寄存器,进而实现与设备功能的通信。每个设备功能的配置空间包含6个32位的BAR寄存器,可申请获得最多6个32的地址空间或者3个64位的地址空间,或者少于6个的32位BAR地址和64位地址空间的组合。对于同一个I/O设备中的所有功能,其BAR需求配置是相同的,即需要申请的地址窗口数目,各地址窗ロ的大小是ー样的;只是在同一 PCIe域中,设备功能中各BAR地址记录的所分配到的地址窗ロ的基地址不一祥。如使用FunNo来表示一个设备的功能数,每个功能需要申请的地址窗口数目使用BAR_id来指示,那么整个设备将被主控制根节点配置获得BAR_id*FuncN0个不同的BAR地址。同理,当设备中的功能配置给从属根节点吋,从属根节点分配BAR_id个BAR地址,且不同的从属根节点给同一个设备功能中的不同的功能分配的BAR地址有可能是ー样的。为了实现从属根节点能够通过地址直接访问设备功能,需要进行地址重映射,即设备中各功能在从属根节点PCIe域的地址窗ロ到其在主控制根节点PCIe域的地址窗ロ的转换。 图8描述了利用CAM和RAM实现地址重映射模块的结构示意图。所述地址重映射结构主要包括四个部分ー是基地址定义提取模块,通过解析配置设备功能的基地址寄存器(Base Address Register, BAR)的事务包,获取I/O设备功能通过各BAR定义的地址窗ロ类型,提取各地址窗ロ对应的基地址掩码(BAR_mask),并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号(BARjd)之间的映射关系;ニ是功能基地址序号匹配模块,包含BAR_id个深度为FuncNo_m的CAM的CAM存储阵列和匹配输出选择子模块,每个CAM存储同一 I/O设备中所有功能FuncNo_m相同基地址序列号BAR_id对应的基地址BAR,实现从属根节点PCIe域中的基地址(BAR_s)与其所属功能基地址序号(BAR_id,FuncNo_m)的映射;三是基地址查找模块,包含深度为BAR_id*FuncNo_m的RAM存储单元,通过写读RAM存储元件,实现功能号为FuncNo_m,基地址序号为BAR_id在主控制根节点PCIe域中的基地址(BAR_m)的查找;四是输出译码模块,根据匹配查找出的基地址BAR_m及其对应匹配基地址掩码Match_BAR_mask,将从属根节点PCIe域中的目标访问地址(DstAddr_s)翻译成主控制根节点PCIe域中的目标访问地址(DstAddrjn)。通过该四个模块的接力合作,完成了从属根节点PCIe域中目标访问地址到其映射在主控制根节点PCIe域的转换,最终实现从属根节点通过地址路由对设备功能的直接访问。基地址定义提取模块,在主控制根节点系统初始化配置阶段,通过解析配置事务包,检查各BAR是否定义了地址窗ロ,如果定义了地址窗ロ,解析其所定义的地址窗ロ的位宽、大小等类型,提取所有BAR定义的地址窗口数目(BARjd)以及各地址窗ロ的基地址掩码(BARO_mask,…,BARn_mask),并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号(BAR_id)之间的映射关系。由于一个64位宽的地址窗ロ是由两个BAR定义并记录系统分配的基地址,通过基地址寄存器号及其定义的地址窗ロ位宽类型与基地址序号(BARjd)的对应关系,可以按基地址序号记录相应地址窗ロ的完整基地址。图9描述了基地址定义提取过程,包括以下步骤a)系统上电,初始化BAR寄存器偏移指针的起始地址,初始化基地址序号,初始化64位地址申请标识符,转向步骤b)。
b)接收从主控制根节点发来的事务包。如果接收到主控制根节点发来的事务包,转向步骤c )。c)事务包判定。解析接收到的事务包,如果该事务包是向BAR寄存器偏移指针指定的寄存器写全I的配置写请求包,转向步骤d);否则转向步骤b)。d)接收I/O设备发来的带数据的完成包。如果接收到从I/O设备发来的带数据的完成包,转向步骤e)。e)地址申请类型判断。解析完成包的数据段,对该BAR定义的地址申请类型进行判断。如果该BAR未用于地址申请,则转向步骤h);如果该BAR定义的是64位地址,则转向步骤f);否则,转向步骤g)。f)将数据段内容记录到基地址序号对应的基地址掩码的低L位,使能64位地址申请标识符,并记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗口位宽类型与基地址序号的映射关系。转向步骤h)。g)记录数据段,更新基地址申请序号及64位地址申请标识。如果当前的64位申请标识符未使能,指示数据段内容为32位基地址的掩码,则将数据段内容的高L位记录到基地址序号对应的基地址掩码的低L位;否则,数据段内容为基地址序号对应的64位基地址的编码的高32位,则将数据段记录到基地址序号对应的基地址掩码的高32位。记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗口位宽类型与基地址序号的映射关系,然后更新基地址序号加1,并复位64位地址申请标识符,转向步骤h)。h)更新BAR寄存器偏移指针指向下一个BAR寄存器,转向步骤i);i)BAR寄存器偏移指针有效性判定。判定当前BAR寄存器偏移指针指向的寄存器是否依然为配置空间中的BAR,如果是,则转向b);否则转向j)。j)结束。标识已经完成基地址定义提取过程。图8所示的功能基地址序号匹配模块中的CAM阵列,以功能基地址序号(BAR_id, FunNojn)为地址索引(CAM_WrAddr),存储的数据项(CAM_Din)包括两部分一部分是I/0设备功能所属的从属根节点ID(RNID_s),一部分是从属根节点分配的基地址(BAR_s)。其中,功能基地址序号中的基地址序号(BAR_id)选择要存储的CAM,功能基地址序号中的功能号(FunNojn)选择要存储的CAM存储单元。所述CAM存储阵列有N个比较数据输入端口(CMP_DinO, CMP_Dinl,…,CMP_Dinn),每一个CAM对应一个。当接收到从属根节点发来的基于地址路由的事务包时,通过对其进行数据包解析,提取事务包要访问的目标访问地址。然后将其通过基地址定义提取模块获得BAR_id个BAR基地址(BAR0_s,BARl_s,…,BARn_s),并将其作为比较的数据输入(CMP_Din)分别输入CAM中进行精确的匹配查找,获得N个匹配输出结果,包括匹配标识(Match_flagO,…,Match_flagn)和匹配地址(Match_AddrO,…,Match_Addrn)。如果CAM存储阵列的N个匹配输出结果存在(仅存在一个)匹配项,则由功能基地址序号匹配模块中匹配输出选择子模块选择该CAM的输出地址作为匹配输出(即所述目标访问地址的基地址对应的由功能号MatchedFunNo_m以及其对应的基地址序号MatchedBAR_id组成的功能基地址序号,同时将匹配标识Match_flag置I ;否则,将匹配标识Match_flag置O。图10描述了功能基地址序号匹配模块写存储主控制根节点PCIe域中的功能基地址的过程,包括如下步骤、
a接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤b);b下行事务包判定。解析接收到的由从属根节点发来的事务包,如果该事务包是基于ID事务包,转向步骤c);c下行ID重映射。将基于ID路由的事务包中的ID号转换为其对应在主控制根节点PCIe域中的ID号,转向步骤d)。d获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容(即系统配置的基地址),转向步骤e);
e根据基地址定义提取模块,获取BAR寄存器偏移对应的基地址序号和地址窗ロ位宽类型,转向步骤f);f地址窗ロ位宽类型判定。判定步骤e)获取的地址窗ロ位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤a);如果指示的是32为地址或者64位地址的高32位,则转向步骤g);g写存储基地址。如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的CAM単元中;如果是64位地址,则将步骤f)寄存的基地址和步骤d)提取的数据段高低位组合,存储到由功能号和基地址序号指定的CAM単元中;转向步骤a)。图8所示的基地址查找模块中的RAM,以功能基地址序号(BAR_id,FunNo_m)为地址索引(RAM_WrAddr),存储的数据项(RAM_Din)是主控制根节点分配的基地址(BAR_m)。当目标访问地址的基地址通过基地址序号匹配模块获得匹配的功能基地址序号(BAR_id,FuncNo_m),输入RAM的读地址(RAM_RdAddr),对应获得RAM输出(RAM_Dout)即是目标访问地址的基地址对应在主控制根节点PCIe域的基地址(BAR_m)。图11描述了基地址查找模块写存储从属根节点PCIe域中的功能基地址的过程,包括如下步骤a接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为主控制根节点,转向步骤b);b下行事务包判定。解析接收到的由主控制根节点发来的事务包,如果该事务包是配置事务包,转向步骤c); c获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容(即系统配置的基地址),转向步骤d);d根据基地址定义提取模块,获取BAR寄存器偏移对应的基地址序号和地址窗ロ位宽类型,转向步骤e);e地址窗ロ位宽类型判定。判定步骤d)获取的地址窗ロ位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤81 ;如果指示的是32为地址或者64位地址的高32位,则转向步骤86 ;f写存储基地址。如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的RAM単元中;如果是64位地址,则将步骤85寄存的基地址和步骤83提取的数据段高低位组合,存储到由功能号和基地址序号指定的RAM単元中;转向步骤a)。
图12描述了从属根节点PCIe域中的目标访问地址到主控制根节点PCIe域的地址重映射过程,包括以下步骤a接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤b);b下行事务包判定。解析接收到的由从属根节点发来的事务包,如果该事务包是基于地址事务包,转向步骤c );c解析接收到的基于地址路由的事务包,提取事务包中指示的目标访问地址,转向步骤d);
d获取基地址。将目标访问地址与基地址定义提取模块中记录的所有N个基地址掩码进行与操作,获取N个基地址,转向步骤e );e功能基地址序号匹配查找。将步骤d)获取的N个BAR基地址作为比较数据,输A CAM阵列中的各CAM进行并行的精确匹配查找,获取匹配的功能基地址序号。如果存在匹配项,转向步骤f),否则转向步骤i);f基地址及基地址掩码匹配查找。使用匹配输出的功能基地址序号,读取RAM,获取所述功能基地址序号对应在主控制根节点PCIe域中的匹配基地址;同时根据基地址定义提取模块记录的信息,获取所述基地址序号匹配的基地址掩码,转向步骤g);g匹配的目标访问地址输出译码。将获取的匹配基地址、匹配基地址掩码,连同步骤c)提取的目标访问地址,通过输出译码,即可获得从属根节点PCIe域中的目标访问地址映射到主控制根节点PCIe域中的匹配目标访问地址。操作完后转向步骤h);h使用步骤g)获的的匹配目标访问地址,改写事务包中目标访问地址。操作完后转向步骤a);i向事务包指示的根节点返回一个不支持的事务包,操作完成后转向步骤a)。特别地,对于SR-IOV设备,图8描述的地址重映射模块结构可以相应的简化。SR-IOV设备的VF本身不具备申请内存地址的能力,VF配置空间头中的6个BAR没有作用,而它所需要的地址由其对应的PF配置空间中SR-IOV扩展功能定义并申请。与普通设备类似,SR-IOV扩展功能寄存器中也有6个定义并记录系统分配的地址窗口基地址的32位BAR寄存器VF BARb(b=0,I…,5)。与普通设备不同的是,针对VF BARb定义的地址窗口的大小,系统将分配一大块连续的内存地址供所有的VF使用,并将其基地址写到SR-IOV扩展功能寄存器中的VF BARb中。换句话说,对于有VFunNo个虚功能,每个VF需要的地址窗口数为VFBAR_id的SR-I0V,系统只分配VFBAR_id个基地址写入到配置空间中SR-IOV扩展功能寄存器的VF_BARb寄存器中,而不是分配BAR_id*VFunNo个基地址分别写到每个VF配置空间头对应的BAR寄存器中。VF BARb记录的是VFO的第b个BAR地址的基地址,而其他 VFv (v=l, 2,...,VFunNo-I)的起始地址 BARb 通过公式 VF BARb+(v_l) * (VF BARb 范围大小)计算获得。图9描述了利用CAM和RAM实现SR-IOV设备功能地址重映射的结构示意图,这里只考虑SR-IOV设备只有一个PF和多个VF。该地址重映射结构主要包括四个部分一是基地址定义提取模块,通过解析配置设备功能的基地址寄存器(Base Address Register,BAR)的事务包,获取设备中VF通过各BAR定义的地址窗口类型,提取各地址窗口对应的基地址掩码(VFBARjnask),并记录各基地址寄存器序号与其定义的地址窗口对应的基地址-I(VFBARjd)之间的映射关系;ニ是功能基地址序号匹配模块,包含BAR_id个深度为FunNojii的CAM的CAM存储阵列和匹配输出选择子模块,每个CAM存储同一 I/O设备中所有功能FuncNo_m相同基地址序列号BAR_id对应的基地址BAR,实现从属根节点PCIe域中的基地址(BAR_s)与其所属功能基地址序号(BAR_id,FuncNo_m)的映射;三是基地址查找模块,包含深度为VFBARjd的RAM存储单元,通过写读RAM存储元件,实现基地址序号为VFBARjd在主控制根节点PCIe域中的基地址(BAR_m)的查找;四是输出译码模块,根据匹配查找出的功能号(MatchedFunNo_m)、基地址BAR_m及其对应掩码MatchedVFBAR_mask,将从属根节点PCIe域中的目标访问地址(DstAddr_s)翻译成主控制根节点PCIe域中的目标访问地址(DstAddr_m)。本发明公开ー种用于多根I/O虚拟化共享系统的直接I/O重映射装置,包括ID重映射模块,所述ID重映射模块包含内容寻址存储CAM和简单双端ロ RAM,通过CAM的精确匹配查找实现I/O设备功能在从属根节点PCIe域中的ID号到其在主控制根 节点PCIe域中的ID号的映射,通过写读RAM存储元件实现I/O设备功能在主控制根节点PCIe域中的ID号到其在从属根节点PCIe域中的ID号的映射;地址重映射模块,所述地址重映射模块用于实现I/O设备功能在从属根节点PCIe域的I/o映射地址窗ロ到其在主控制根节点PCIe域的I/O映射地址窗ロ的转换;其中,ID号包括总线号、设备号、功能号。所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述ID重映射模块中的CAM和RAM包括以I/O设备功能的功能号作为地址索引,存储单元存储的数据项包括两部分一部分是该设备功能所属的根节点标识ID,一部分是该设备功能在其所属的根节点PCIe域的功能号。所述的用于多根I/O虚拟化共享系统的I/O重映射装置,所述地址重映射模块包括基地址定义提取模块,所述基地址掩码通过解析配置设备功能的基地址寄存器(Base Address Register, BAR)的事务包,获取I/O设备功能通过各BAR定义的地址窗ロ类型,提取各地址窗ロ对应的基地址掩码,并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号之间的映射关系;功能基地址序号匹配模块,所述功能基地址序号匹配模块包含N个深度为P的CAM组成的CAM存储阵列和匹配输出选择模块,每个CAM存储同一 I/O设备中所有功能中相同基地址序列号对应的基地址BAR,实现从属根节点PCIe域中的基地址与其所对应的功能基地址序号的映射;基地址查找模块,所述基地址查找模块包含深度为Q的简单双端ロ RAM,通过写读RAM存储元件,实现功能基地址序号到其在主控制根节点PCIe域中的基地址的映射;输出译码模块,所述输出译码模块根据匹配查找出的主控制根节点PCIe域中基地址及其对应的基地址掩码,将从属根节点PCIe域中的目标访问地址翻译成主控制根节点PCIe域中的目标访问地址;其中,N (N〈=6)表示设备功能申请的地址窗口数目,P表示设备中功能的数目,Q表示系统分配给设备中所有功能的地址窗ロ的基地址的数目。
所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述功能基地址序号匹配模块包括所述CAM存储阵列,是以功能基地址序号为地址索引,存储的数据项包括两部分一部分是I/O设备功能所属的从属根节点ID,一部分是从属根节点分配的基地址,其中,功能基地址序号中的基地址序号选择要存储的CAM,功能基地址序号中的功能号选择要存储的CAM存储单元,所述CAM存储阵列有N个比较数据输入端口,每一个CAM对应一个,所述CAM阵列在数据匹配阶段,输入由从属根节点的目标访问地址通过N个不同的基地址掩码提取获得的N个不同的比较数据项,并行地进行匹配查找,输出N个对应的匹配结果;所述匹配输出选择模块,如果CAM存储阵列输出的N个匹配结果存在(仅存在一个)匹配项,则选择输出由存在匹配项的CAM的输出匹配地址(即功能号p以及其对应的基地址序号n组成的功能基地址序号,同时将匹配标识置I ;否则,将匹配标识置O。所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,所述基地址查找模 块中的RAM包括以功能基地址序号为地址索引,存储的数据项是主控制根节点分配的基地址。本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
权利要求
1.一种用于多根I/o虚拟化共享系统的直接I/O重映射方法,其特征在于,包括 步骤1,I/o设备功能基地址定义提取,并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号之间的映射关系; 步骤2,主控制根节点PCIe域中的功能基地址写存储,建立功能基地址序号到其在主控制根节点PCIe域的基地址的映射; 步骤3,设备功能ID映射关系写存储,建立设备功能在主控制根节点PCIe域和从属根节点PCIe域中的ID号之间的映射; 步骤4,从属根节点PCIe域中的功能基地址写存储,建立从属根节点PCIe域的基地址到其对应的功能基地址序号的映射; 步骤5,直接I/O重映射,对从属根节点和I/O设备间的事务包进行重映射操作。
2.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤I还包括 所述基地址定义提取是在主控制根节点系统发现阶段,获取I/O设备功能配置空间中通过各基地址寄存器(Base Address Register, BAR)定义的地址窗ロ类型,并提取各地址窗ロ对应的基地址掩码; 所述基地址掩码,用于指定系统配置的地址窗口中地址的哪些位是固定位,通过所述基地址掩码可以提取访存地址对应的基地址; 所述基地址序号,用于表示设备的功能向系统申请的地址窗口数按照BAR寄存器号顺序排列的序列号,ー个I/O设备中同类型的各功能向系统申请的地址窗ロ类型和数目相同。
3.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤2还包括 所述主控制根节点PCIe域中的功能基地址写存储是在主控制根节点系统初始化配置阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。
所述功能基地址序号,由基地址序号k和主控制根节点PCIe域中的设备功能号P组合而成,功能基地址序号(k,p)指示的基地址是系统为设备中功能号为P分配的第η个基地址。
4.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤3还包括 所述设备功能ID映射关系写存储是在主控制根节点进行设备I/O资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号作为地址索引,写存储由所述功能所属的根节点标识ID以及所述功能在所属根节点PCIe域中的功能号组成的数据项,建立设备功能在主控制根节点PCIe域中的ID号和其在从属根节点PCIe域中的ID号之间的映射。
5.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤4还包括 所述从属根节点PCIe域中的功能基地址写存储是在从属根节点系统PCIe重扫描阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。
6.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤5还包括 所述直接I/O重映射是在从属根节点与I/O设备进行通信的过程中,对从属根节点发起的基于ID路由的下行事务包进行下行ID重映射,对从属根节点发起的基于地址路由的下行事务包进行地址重映射,对设备功能发起的事务包进行上行ID重映射。
7.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤I还包括 步骤71,系统上电,初始化BAR寄存器偏移指针的起始地址,初始化基地址序号,初始化64位地址申请标识符,转向步骤72 ; 步骤72,接收从主控制根节点发来的事务包;如果接收到主控制根节点发来的事务包,转向步骤73 ; 步骤73,事务包判定;解析接收到的事务包,如果该事务包是向BAR寄存器偏移指针指定的寄存器写全I的配置写请求包,转向步骤74 ;否则转向步骤72 ; 步骤74,接收I/O设备发来的带数据的完成包;如果接收到从I/O设备发来的带数据的完成包,转向步骤75 ; 步骤75,地址申请类型判断;解析完成包的数据段,对该BAR定义的地址申请类型进行判断;如果该BAR未用于地址申请,则转向步骤78 ;如果该BAR定义的是64位地址,则转向步骤76 ;否则,转向步骤77 ; 步骤76,将数据段内容记录到基地址序号对应的基地址掩码的低L位,使能64位地址申请标识符,并记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗口位宽类型与基地址序号的映射关系,转向步骤78 ; 步骤77,记录数据段,更新基地址序号及64位地址申请标识符;如果当前的64位申请标识符未使能,指示数据段内容为32位基地址的掩码,则将数据段内容的高L位记录到基地址序号对应的基地址掩码的低L位;否则,数据段内容为基地址序号对应的64位基地址的掩码的高32位,则将数据段记录到基地址序号对应的基地址掩码的高32位;记录当前BAR寄存器偏移指针及其指示的BAR定义的地址窗口位宽类型与基地址序号的映射关系,然后更新基地址序号加1,并复位64位地址申请标识符,转向步骤78 ; 步骤78,更新BAR寄存器偏移指针指向下一个BAR寄存器,转向步骤79 ; 步骤79,BAR寄存器偏移指针有效性判定;判定当前BAR寄存器偏移指针指向的寄存器是否依然为配置空间中的BAR,如果是,则转向步骤72 ;否则转向步骤710 ; 步骤710,结束,标识已经完成基地址定义提取过程。
8.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤2还包括 步骤81,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为主控制根节点,转向步骤82 ; 步骤82,下行事务包判定;解析接收到的由主控制根节点发来的事务包,如果该事务包是配置事务包,转向步骤83 ; 步骤83,获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容所述数据段内容为系统配置的基地址,转向步骤84 ; 步骤84,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗ロ位宽类型,转向步骤85 ; 步骤85,地址窗ロ位宽类型判定;判定步骤84获取的地址窗ロ位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤81 ;如果指示的是32为地址或者64位地址的高32位,则转向步骤86 ; 步骤86,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤85寄存的基地址和步骤83提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤81。
9.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤4还包括 步骤91,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤92 ; 步骤92,下行事务包判定;解析接收到的由从属根节点发来的事务包,如果该事务包是基于ID事务包,转向步骤93 ; 步骤93,下行ID重映射;将基于ID路由的事务包中的ID号转换为其对应在主控制根节点PCIe域中的ID号,转向步骤94; 步骤94,获取并解析配置事务包中向BAR寄存器写非全I的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容指示的基地址,转向步骤95 ;步骤95,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗ロ位宽类型,转向步骤96 ; 步骤96,地址窗ロ位宽类型判定;判定步骤95获取的地址窗ロ位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤91 ;如果指示的是32为地址或者64位地址的高32位,则转向步骤97 ; 步骤97,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤96寄存的基地址和步骤94提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤91。
10.如权利要求I所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤5包括 所述下行ID重映射,指I/O设备功能在从属根节点PCIe域的ID号到其在主控制根节点PCIe域的ID号的匹配转换; 所述地址重映射,指从属根节点发出的目标访问地址到其对应在主控制根节点PCIe域中的地址的匹配转换; 所述上行ID重映射,指I/O设备功能在主控制根节点PCIe域的ID号到其在从属根节点PCIe域的ID号的匹配转换。
11.如权利要求10所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述下行ID重映射包括 步骤111,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤112 ; 步骤112,事务包类型判定,如果是基于ID路由的事务包,转向步骤113 ; 步骤113,提取事务包中指示的发起根节点ID以及其要访问的设备功能号,并将其组合作为要比较的数据内容,精确匹配查找,获取该设备功能在主控制根节点PCIe域中的功能号,如果存在匹配项,转向步骤114 ;否则转向步骤115 ; 步骤114,改写事务包中设备功能ID号,使用CAM匹配输出的地址,即指示的主控制根节点PCIe中的功能号,改写事务包中设备功能ID号,操作完后转向步骤111 ; 步骤115,向事务包指示的根节点返回一个不支持的事务包,操作完成后转向步骤.111。
12.如权利要求10所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述地址重映射包括 步骤121,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤122 ; 步骤122,下行事务包判定;解析接收到的由从属根节点发来的事务包,如果该事务包是基于地址事务包,转向步骤123 ; 步骤123,解析接收到的基于地址路由的事务包,提取事务包中指示的目标访问地址,转向步骤124 ; 步骤124,获取基地址;将目标访问地址与基地址定义提取过程中记录的所有K个基地址掩码进行与操作,获取K个基地址,转向步骤125 ; 步骤125,功能基地址序号匹配查找;将步骤124获取的K个BAR基地址作为比较数据,进行并行的精确匹配查找,获取目标访问地址匹配的功能基地址序号;如果存在匹配项,转向步骤126,否则转向步骤,129 ; 步骤126,基地址及基地址掩码匹配查找;使用匹配输出的功能基地址序号,获取所述功能基地址序号对应在主控制根节点PCIe域中的匹配基地址以及基地址序号匹配的基地址掩码,转向步骤127 ; 步骤127,匹配的目标访问地址输出译码;根据获取的匹配基地址、匹配基地址掩码,连同步骤123提取的目标访问地址,获取从属根节点PCIe域中的目标访问地址映射到主控制根节点PCIe域中的匹配目标访问地址;操作完后转向步骤128 ; 步骤129,使用步骤127获的的匹配目标访问地址,改写事务包中目标访问地址;操作完后转向步骤121 ; 步骤129,向事务包指示的根节点返回一个不支持的事务包,操作完成后转向步骤.121。
13.如权利要求10所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述上行ID重映射包括 步骤131,接收从I/O设备功能发来的事务包,如果接收到事务包,转向步骤132 ; 步骤132,提取事务包指示的I/O设备功能ID号;如果事务包为请求包,提取请求事务包中指示的请求设者ID号;如果是如果事务包是完成包,提取完成事务包中指示的完成者ID号,转向步骤133 ; 步骤133,使用提取的I/O设备功能ID号中的功能号作为地址索引,获取对应的根节点标识ID及功能号;如果获得的根节点标识ID非主控制根节点ID,转向步骤134 ;否则,说明事务包所属的根节点为主控制根节点,不需要进行ID转换,转向步骤135 ; 步骤134,使用获得的根节点标识ID记录到事务包中;如果事务包为请求包,则使用获得的功能号修改事务包中请求者ID号;如果事务包为完成包,则使用使用获得的功能号修改事务包中完成者ID号,操作完后转向步骤131 ; 步骤135,使用主控制根节点标识ID改写事务包;将主控制根节点的标识ID记录到事务包中,操作完后转向步骤131。
14.一种用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,包括 ID重映射模块,所述ID重映射模块包含内容寻址存储CAM和简单双端ロ RAM,通过CAM的精确匹配查找实现I/o设备功能在从属根节点PCIe域中的ID号到其在主控制根节点PCIe域中的ID号的映射,通过写读RAM存储元件实现I/O设备功能在主控制根节点PCIe域中的ID号到其在从属根节点PCIe域中的ID号的映射; 地址重映射模块,所述地址重映射模块用于实现I/O设备功能在从属根节点PCIe域的I/O映射地址窗ロ到其在主控制根节点PCIe域的I/O映射地址窗ロ的转换; 其中,ID号包括总线号、设备号、功能号。
15.如权利要求14所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,所述ID重映射模块中的CAM和RAM包括 以I/O设备功能的功能号作为地址索引,存储单元存储的数据项包括两部分一部分是该设备功能所属的根节点标识ID,一部分是该设备功能在其所属的根节点PCIe域的功能号。
16.如权利要求14所述的用于多根I/O虚拟化共享系统的I/O重映射装置,其特征在于,所述地址重映射模块包括 基地址定义提取模块,所述基地址掩码通过解析配置设备功能的基地址寄存器(BaseAddress Register, BAR)的事务包,获取I/O设备功能通过各BAR定义的地址窗ロ类型,提取各地址窗ロ对应的基地址掩码,并记录各基地址寄存器序号与其定义的地址窗ロ对应的基地址序号之间的映射关系; 功能基地址序号匹配模块,所述功能基地址序号匹配模块包含N个深度为P的CAM组成的CAM存储阵列和匹配输出选择模块,每个CAM存储同一 I/O设备中所有功能中相同基地址序列号对应的基地址BAR,实现从属根节点PCIe域中的基地址与其所对应的功能基地址序号的映射; 基地址查找模块,所述基地址查找模块包含深度为Q的简单双端ロ RAM,通过写读RAM存储元件,实现功能基地址序号到其在主控制根节点PCIe域中的基地址的映射; 输出译码模块,所述输出译码模块根据匹配查找出的主控制根节点PCIe域中基地址及其对应的基地址掩码,将从属根节点PCIe域中的目标访问地址翻译成主控制根节点PCIe域中的目标访问地址; 其中,N (N<=6)表示设备功能申请的地址窗口数目,P表示设备中功能的数目,Q表示系统分配给设备中所有功能的地址窗ロ的基地址的数目。
17.如权利要求16所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,所述功能基地址序号匹配模块包括所述CAM存储阵列,是以功能基地址序号为地址索引,存储的数据项包括两部分一部分是I/O设备功能所属的从属根节点ID,一部分是从属根节点分配的基地址,其中,功能基地址序号中的基地址序号选择要存储的CAM,功能基地址序号中的功能号选择要存储的CAM存储单元,所述CAM存储阵列有N个比较数据输入端口,每一个CAM对应一个,所述CAM阵列在数据匹配阶段,输入由从属根节点的目标访问地址通过N个不同的基地址掩码提取获得的N个不同的比较数据项,并行地进行匹配查找,输出N个对应的匹配结果; 所述匹配输出选择模块,如果CAM存储阵列输出的N个匹配结果存在(仅存在一个)匹配项,则选择输出由存在匹配项的CAM的输出匹配地址(即功能号p以及其对应的基地址序号n组成的功能基地址序号,同时将匹配标识置I ;否则,将匹配标识置O。
18.如权利要求16所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,所述基地址查找模块中的RAM包括 以功能基地址序号为地址索引,存储的数据项是主控制根节点分配的基地址。
全文摘要
本发明公开一种用于多根I/O虚拟化共享系统的直接I/O重映射方法,该方法包括步骤1,I/O设备功能基地址定义提取,记录基地址寄存器序号与其定义的地址窗口对应的基地址序号之间的映射关系;步骤2,主控制根节点PCIe域中功能基地址写存储,建立功能基地址序号到主控制根节点PCIe域的基地址的映射;步骤3,设备功能ID映射关系写存储,建立设备功能在主控制根节点PCIe域和从属根节点PCIe域中的ID号之间的映射;步骤4,从属根节点PCIe域中的功能基地址写存储,建立从属根节点PCIe域的基地址到其对应的功能基地址序号的映射;步骤5,直接I/O重映射,对从属根节点和I/O设备间事务包进行重映射操作。
文档编号G06F13/20GK102722458SQ20121017284
公开日2012年10月10日 申请日期2012年5月29日 优先权日2012年5月29日
发明者刘小丽, 刘飞龙, 孙凝晖, 安学军, 张佩珩, 曹政, 王展, 苏勇 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1