一种用于多根共享系统的I/O重映射方法和装置制造方法及图纸

技术编号:7837764 阅读:236 留言:0更新日期:2012-10-12 02:35
本发明专利技术公开一种用于多根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/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获本文档来自技高网...

【技术保护点】

【技术特征摘要】
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寄存的基地址和步骤...

【专利技术属性】
技术研发人员:刘小丽曹政张佩珩安学军孙凝晖王展苏勇刘飞龙
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1