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.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤1还包括:所述基地址定义提取是在主控制根节点系统发现阶段,获取I/O设备功能配置空间中通过各基地址寄存器(Base Address Register,BAR)定义的地址窗口类型,并提取各地址窗口对应的基地址掩码;所述基地址掩码,用于指定系统配置的地址窗口中地址的哪些位是固定位,通过所述基地址掩码可以提取访存地址对应的基地址;所述基地址序号,用于表示设备的功能向系统申请的地址窗口数按照BAR寄存器号顺序排列的序列号,一个I/O设备中同类型的各功能向系统申请的地址窗口类型和数目相同。
3.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤2还包括:所述主控制根节点PCIe域中的功能基地址写存储是在主控制根节点系统初始化配置阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。所述功能基地址序号,由基地址序号k和主控制根节点PCIe域中的设备功能号p组合而成,功能基地址序号(k,p)指示的基地址是系统为设备中功能号为p分配的第n个基地址。
4.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤3还包括:所述设备功能ID映射关系写存储是在主控制根节点进行设备I/O资源分配阶段,通过解析设备分配事务包,提取事务包中指示的设备功能在主控制根节点PCIe域的功能号作为地址索引,写存储由所述功能所属的根节点标识ID以及所述功能在所属根节点PCIe域中的功能号组成的数据项,建立设备功能在主控制根节点PCIe域中的ID号和其在从属根节点PCIe域中的ID号之间的映射。
5.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤4还包括:所述从属根节点PCIe域中的功能基地址写存储是在从属根节点系统PCIe重扫描阶段,通过解析配置事务包,提取事务包中指示的功能基地址序号作为地址索引,写存储所述功能基地址序号对应的基地址。
6.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤5还包括:所述直接I/O重映射是在从属根节点与I/O设备进行通信的过程中,对从属根节点发起的基于ID路由的下行事务包进行下行ID重映射,对从属根节点发起的基于地址路由的下行事务包进行地址重映射,对设备功能发起的事务包进行上行ID重映射。
7.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤1还包括:步骤71,系统上电,初始化BAR寄存器偏移指针的起始地址,初始化基地址序号,初始化64位地址申请标识符,转向步骤72;步骤72,接收从主控制根节点发来的事务包;如果接收到主控制根节点发来的事务包,转向步骤73;步骤73,事务包判定;解析接收到的事务包,如果该事务包是向BAR寄存器偏移指针指定的寄存器写全1的配置写请求包,转向步骤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.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤2还包括:步骤81,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为主控制根节点,转向步骤82;步骤82,下行事务包判定;解析接收到的由主控制根节点发来的事务包,如果该事务包是配置事务包,转向步骤83;步骤83,获取并解析配置事务包中向BAR寄存器写非全1的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容所述数据段内容为系统配置的基地址,转向步骤84;步骤84,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗口位宽类型,转向步骤85;步骤85,地址窗口位宽类型判定;判定步骤84获取的地址窗口位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤81;如果指示的是32为地址或者64位地址的高32位,则转向步骤86;步骤86,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤85寄存的基地址和步骤83提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤81。
9.如权利要求1所述的用于多根I/O虚拟化共享系统的直接I/O重映射方法,其特征在于,所述步骤4还包括:步骤91,接收从根节点发来的事务包,对发起事务包的根节点ID进行解析判定,如果事务包指示的发起根节点为从属根节点,转向步骤92;步骤92,下行事务包判定;解析接收到的由从属根节点发来的事务包,如果该事务包是基于ID事务包,转向步骤93;步骤93,下行ID重映射;将基于ID路由的事务包中的ID号转换为其对应在主控制根节点PCIe域中的ID号,转向步骤94;步骤94,获取并解析配置事务包中向BAR寄存器写非全1的配置写包,提取事务包中的目标设备功能号、要配置的BAR寄存器偏移以及数据段内容指示的基地址,转向步骤95;步骤95,根据基地址定义提取过程获得的映射关系,获取BAR寄存器偏移对应的基地址序号和地址窗口位宽类型,转向步骤96;步骤96,地址窗口位宽类型判定;判定步骤95获取的地址窗口位宽类型,如果指示该BAR定义的为64位地址的低32位,则寄存提取的基地址,然后转向步骤91;如果指示的是32为地址或者64位地址的高32位,则转向步骤97;步骤97,写存储基地址;如果是32位地址,则将提取的数据段存储到由功能号和基地址序号指定的存储单元中;如果是64位地址,则将步骤96寄存的基地址和步骤94提取的数据段高低位组合,存储到由功能号和基地址序号指定的存储单元中;转向步骤91。
10.如权利要求1所述的用于多根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重映射装置,其特征在于,所述地址重映射模块包括:基地址定义提取模块,所述基地址掩码通过解析配置设备功能的基地址寄存器(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表示系统分配给设备中所有功能的地址窗口的基地址的数目。
17.如权利要求16所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,所述功能基地址序号匹配模块包括:所述CAM存储阵列,是以功能基地址序号为地址索引,存储的数据项包括两部分:一部分是I/O设备功能所属的从属根节点ID,一部分是从属根节点分配的基地址,其中,功能基地址序号中的基地址序号选择要存储的CAM,功能基地址序号中的功能号选择要存储的CAM存储单元,所述CAM存储阵列有N个比较数据输入端口,每一个CAM对应一个,所述CAM阵列在数据匹配阶段,输入由从属根节点的目标访问地址通过N个不同的基地址掩码提取获得的N个不同的比较数据项,并行地进行匹配查找,输出N个对应的匹配结果;所述匹配输出选择模块,如果CAM存储阵列输出的N个匹配结果存在(仅存在一个)匹配项,则选择输出由存在匹配项的CAM的输出匹配地址(即功能号p以及其对应的基地址序号n组成的功能基地址序号,同时将匹配标识置1;否则,将匹配标识置0。
18.如权利要求16所述的用于多根I/O虚拟化共享系统的直接I/O重映射装置,其特征在于,所述基地址查找模块中的RAM包括:以功能基地址序号为地址索引,存储的数据项是主控制根节点分配的基地址。
展开