为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持的制作方法
【专利摘要】本发明的名称是“为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持”。在一个实施例中,本发明包括具有存储虚拟地址到物理地址转换的条目的存储器管理单元(MMU),其中各条目包括指明对应条目的存储单元是存在于本地存储器中还是存在于远程存储器中的存储单元指示符。这样,公共虚拟存储器空间可在可由一个或多个非相干链路分隔的两个存储器之间共享。描述了其它实施例并且要求其权益。
【专利说明】为本地与远程物理存储器之间的共享虚拟存储器提供硬件 支持
[0001] 本分案申请的母案申请日为2010年9月16日、申请号为201010293493. 4、发明名 称为"为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持"。
【技术领域】
[0002] 本申请涉及为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持。
【背景技术】
[0003] 随着基于处理器的系统发展,经由例如按照基于PCI Express?规范基本规范版本 2. 0(2007年1月17日发布)(以下称作PCIe?规范)或者另一种这样的协议的链路的外 设部件互连Express (PCIe?)互连等高速外设互连连接到系统的可编程加速器的可用性允 许系统集成人员将更大计算功率装入系统。但是,在确保应用可透明地(transparently) 利用附加计算功率而无需对应用进行显著变更以便在主处理器(例如多核中央处理单元 (CPU))与加速器之间手动划分计算以及管理数据的来回移动方面存在难题。传统上,只有 由操作系统(0S)管理的主系统存储器被分配供应用使用。对经由外设互连所耦合的任何 加速器本地的物理存储器被单独管理。具体来说,加速器上的这种本地存储器作为运行在 主处理器上的0S可识别的系统存储器的一部分不是可见的。相反,装置驱动软件负责显式 管理本地存储器与远程存储器之间的数据移动。
[0004] 由处理器存取的物理存储器由操作系统来管理,操作系统将对这个物理存储器的 存取虚拟化,以便创建连续(contiguous)大虚拟地址空间的幻象(illusion)。0S将基础 处理器支持用于虚拟存储器管理,因为处理器允许软件建立将虚拟页面映射到物理页面的 映射表。处理器通过每次需要进行存储器存取时查询映射表,来支持虚拟存储器地址转换。 频繁存取的转换可由处理器进行高速缓存,以便加速这个过程。通常称作页表的这些映射 表还包含例如控制对给定虚拟页面的存取(access)的读/写和用户/超级用户特权位等 属性位。虽然0S管理主板上可用的物理存储器(系统存储器),但是它没有管理或分配对 加速器本地并且可用的存储器。因此,当前解决方案创建编程人员看到的共享存储器模型, 并且取决于存储器保护机制来找出错误并在不同存储器之间来回移动页面。
【发明内容】
[0005] 根据第一实施例,本发明提供了一种用于支持共享虚拟存储器的处理器,包括:
[0006] 第一核心,包括取指令单元、指令解码单元、第一存储器管理单元(MMU)和至少一 个执行单元,第一 MMU包括存储虚拟地址到物理地址转换的多个条目;以及
[0007] 加速器,与第一核心耦合并包括第二MMU,第二MMU包括存储虚拟地址到物理地址 转换的多个条目,其中,第一 MMU的各条目包括存储指明对应条目的存储单元是存在于与 所述处理器耦合的第一存储器中还是存在于与所述加速器耦合的第二存储器中的第一指 示符的存储单元字段,其中,所述处理器执行处理程序以将对于第二存储器中的存储单元 的存储器请求转换成直接存储器存取(DMA)事务来与第二存储器通信。
[0008] 根据第二实施例,本发明提供了一种用于支持共享虚拟存储器的方法,包括:
[0009] 接收包含虚拟地址的存储器存取请求;
[0010] 分析处理器的转换后备缓冲器(TLB)中存储的与虚拟地址对应的条目,以便根据 指示与虚拟地址对应的物理地址(PA)是存在于第一存储器还是存在于第二存储器中的 TLB条目的位置属性,确定所述PA是存在于关联所述处理器的第一存储器还是存在于关联 与所述处理器耦合的加速器的第二存储器中,第一存储器和第二存储器共同形成共享虚拟 存储器空间;以及
[0011] 如果所述PA存在于第二存储器中,则经由非相干互连向第二存储器发送反向代 理执行请求,以便执行所述存储器存取请求。
[0012] 根据第三实施例,本发明提供了一种用于支持共享虚拟存储器的系统,包括:
[0013] 具有包括第一存储器管理单元(MMU)的第一核心的处理器,第一 MMU包括各用来 存储虚拟地址到物理地址转换的多个条目,其中各条目包括存储所述处理器对与耦合到所 述处理器的第二处理器相关联的第二存储器的存储单元的存取次数的计数的计数器,其 中,当条目的计数器达到阈值时,所述处理器将与所述条目相关联的存储单元中存储的数 据从第二存储器的所述存储单元移动到与所述处理器耦合的系统存储器的存储单元;
[0014] 经由链路与所述处理器耦合的第二处理器,第二处理器包括第二MMU ;以及
[0015] 与所述处理耦合的系统存储器。
【专利附图】
【附图说明】
[0016] 图1是根据本发明的一个实施例的系统的框图。
[0017] 图2是根据本发明的一个实施例、用于反向代理执行(reverse proxy execution) 的方法的流程图。
[0018] 图3是示出根据本发明的一个实施例的反向代理执行操作的框图。
[0019] 图4是根据本发明的一个实施例、用于代理执行的方法的流程图。
[0020] 图5是示出根据本发明的一个实施例的代理执行操作的框图。
[0021] 图6是根据本发明的一个实施例的页表的示例条目。
[0022] 图7是根据本发明的一个实施例的处理器的框图。
[0023] 图8是根据本发明的一个实施例、包括片上加速器的系统的框图。
【具体实施方式】
[0024] 实施例使处理器(例如插槽(socket)上的中央处理单元(CPU))能够通过使用特 殊加载/存储事务存取存在于加速器上的存储器并且对存储器寻址,来创建和管理与通过 例如外设部件互连Express (PCIe?)接口等接口与系统互连的加速器的全共享虚拟地址空 间。直接对远程存储器寻址的能力允许应用软件所看到的有效计算容量增加,并且允许应 用无缝(seamlessly)共享数据而无需显式涉及编程人员来回移动数据。这样,可对存储器 寻址,而无需借助于存储器保护以及找出虚拟地址存取的错误,以便从错误处理程序重定 向待完成的存储器存取。因此,现有共享存储器多核处理可扩展到包括不在插槽上、而是经 由外设非相干链路连接的加速器。
[0025] 相比之下,例如基于群集的系统等典型系统创建编程人员看到的部分共享存储器 模型,并且取决于存储器保护机制来找出错误并在CPU与外围设备之间来回移动页面。另 夕卜,在基于群集的系统中,各节点运行在其上运行应用的操作系统(0S)栈的单独副本,并 且系统的这个方面是编程人员接触到的,因为只有地址空间的一部分是共享的,并且编程 人员从共享区域分配或者显式指定将数据的哪一部分放入共享地址空间。执行环境与类似 单共享存储器多核系统的全共享存储器执行环境不同。
[0026] 相反,在各个实施例中,插槽上的处理器可对加速器本地的远程存储器寻址,这允 许处理器透明地使用远程存储器地址来存取共享数据。要实现这个方面,可提供架构扩展, 以便允许虚拟存储器管理系统得到增强,使得可发出(issue)特殊加载/存储事务,以便对 远程共享数据寻址,并且进一步使系统能够将存储器页面移动到更靠近它们被更频繁存取 的存储单元,而无需显式编程人员干涉来进行此操作。另外,存储器管理扩展允许编程人员 直接运行应用代码,而无需显式指明地址空间的哪些部分必须共享或者使编程人员管理公 共共享数据区域。
[0027] 因此,可创建和管理高速缓存相干CPU插槽上的核心与经由外设互连与系统互连 的加速器(包括多核CPU)之间的共享虚拟地址空间。因此,互连两侧的CPU/加速器可通 过互连来存取共享虚拟页面,共享虚拟页面可在物理上位于系统存储器中或者位于对加速 器本地的存储器上,互连可以是高速缓存相干的或可以不是高速缓存相干的。
[0028] 相应地,加速器本地的物理存储器可对CPU并且又对0S和应用表现为附加系统 存储器,即使加速器的本地存储器是通过互连而不是由CPU通过相干结构(例如前端总线 (FSB)或快速路径互连(QPI))直接可访问的。
[0029] 实施例可在许多不同的系统类型中实现。现在参照图1,示出的是根据本发明的 一个实施例的系统的框图。如图1所示,系统1〇〇可以是示范计算机系统,其中具有经由 可以是例如PCIe?链路的非相干互连140耦合到加速器卡150的主个人计算机(PC)平台 110。大家看到,主平台110可包括CPU120以及在一些实施例中可以是动态随机存取存储 器(DRAM)的系统存储器130。虽然图1中为了便于说明而仅以这些最低限度的组件示出, 但是大家理解,给定平台可包括许多其它典型组件,包括输入/输出集线器、芯片组组件、 外围设备、大容量存储装置、输入/输出装置等等。
[0030] 在图1中看到,CPU120可包括存储器管理单元(MMU)125。MMU125可实现虚拟地 址到物理地址的映射,并且在一些实现中可包括一个或多个转换后备缓冲器(TLB)。正如下 面将进一步论述,根据本发明的一个实施例对MMU的各种架构扩展可实现与平台110和加 速器卡150关联的存储器之间的共享虚拟存储器的创建和使用。
[0031] 仍然参照图1,加速器卡150可包括知识产权(IP)块160,它可以是任何类型的 加速器,例如图形处理单元、CPU或者任何其它这种装置。大家看到,这个IP块本身可包括 MMU165。要实现与平台110的通信,桥接器155可存在,以便将按照互连140的协议发生 的通信变换成符合片上系统(SoC)结构170上所使用的协议,其中SoC结构170又将IP块 160耦合到在一些实施例中同样可以是DRAM的本地存储器180。虽然在图1的实施例中以 这种具体实现示出,但是本发明的范围并不局限于这个方面。
[0032] 实施例可实现反向代理执行(RPE),它增强CPU识别板载(例如主板)系统存储 器外部的物理存储器存取的能力。然后,可将对这类存储单元的存取转换成通过外围结构 隧道传输(tunnel)到加速器的一类存取。加速器又服务于来自其本地物理存储器的存取。 结合使用RPE和代理执行(其中CPU可在加速器的请求下帮助完成存储器存取),具有经由 (相干或非相干)结构耦合到多插槽CPU的单独MMU的任何加速器可构建包括系统存储器 和加速器本地存储器的物理存储器的共享虚拟地址空间。使用RPE和代理执行,一个实施 例可允许为传统对称多处理(SMP)所构建的同一个基于多线程共享虚拟存储器的程序将 线程分布在CPU上,CPU遍布于(across)多个CPU插槽或遍布于外围I/O结构上的多个止 动机构上。
[0033] 连同架构机制一起,实施例还可包括固件和系统软件扩展,它们允许插槽上的核 心与加速器(或CPU)之间通过外围互连的控制和数据传输,以便在范围从完全0S未知到 0S感知的不同抽象级(各具有用于优化的不同选项)透明地工作。
[0034] 可根据从CPU侧以及加速器侧对共享数据的存取模式按照需求来共享数据。可采 用虚拟地址进行工作并且支持地址转换的加速器可透明地运行相同代码而对数据和代码 的参考保持不变(intact),因为在加速器执行应用程序的一部分、引用代码或数据时可使 用相同的虚拟地址。包含代码或数据的物理页面可位于加速器本地或者可从系统存储器取 出。虚拟页面可根据存取频率从远程存储单元移动到本地存储单元,而无需显式涉及应用 软件栈来进行这种操作,因为应用无需管理数据移动以建立加速器上的计算。
[0035] 往往向驱动软件分配使用主系统存储器与加速器本地的远程存储器之间的直接 存储器存取(DMA)传输来显式移动大批数据的任务。在传统驱动模型中,运行在CPU上的 应用程序和管理加速器的驱动程序通常驻留在两个截然不同的虚拟地址空间中。必然地, 对于应用与驱动器之间的数据通信以及系统存储器与加速器本地存储器之间的数据传输 通常引起极大开销。此外,这种数据传输通常通过由编程人员编写的应用代码来实现。例 如,可能要求编程人员使用供应商特定的一组应用编程接口(API)手动将数据从系统存储 器移动到加速器存储器。相反,根据本发明的一个实施例在CPU与加速器核心之间创建共 享虚拟地址空间而无需显式管理DMA操作极大地简化了数据共享,因为整个应用代码和数 据可放入公共共享虚拟地址空间,而无需通过例如采用编程人员对DMA操作的显示编排而 改变应用程序来显式移动数据。因此,虽然数据传输仍然可通过DMA进行,但是它们不是编 程人员控制的。换言之,处理器可在执行用户级应用期间直接存取远程存储器中存在的数 据,而无需由编程人员显式编程以配置和管理基础结构来实现数据存取。
[0036] 为了构造 CPU与加速器之间的共享地址空间,存储器管理单元可根据用于转换虚 拟-物理地址的页表的内容来允许对共享虚拟地址空间的加载/存储存取被发送给远程存 储器。
[0037] 系统软件支持可允许运行时系统透明且动态地迁移虚拟页面的存储单元,使得 CPU与加速器之间的公共共享虚拟地址空间可被创建,并且程序的运行时工作集本地性行 为(run-time working-set locality behavior)用于在存取不频繁时远程定位(locate) 虚拟页面或者对于频繁存取页面对它们进行本地定位。
[0038] 在各个实施例中,可提供扩展虚拟存储器支持的不同机制。一种实现没有包括对 现有传统分页系统设计的任何0S变化,而其它实现可向页表条目添加更多信息。这些机制 涉及支持反向代理执行的类似架构机制,即,CPU识别和服务于不是映射在系统存储器上、 而是通过外围结构映射到对加速器本地的远程物理存储器的那些虚拟地址存取的能力。
[0039] 要支持RPE,CPU可识别给定虚拟地址是映射到系统存储器还是通过外围结构映 射到远程存储器。如果物理地址映射到系统存储器,则存取可采用标准存储器存取来进行 本地处理,否则可指明RPE以处理存取。在一个实施例中,RPE可使用专用微码流来实现。 RPE可开始于用将由微码处理程序来处理的特殊错误条件来标记(tag)存取(例如加载/ 存储(LD/ST))。处理程序可通过外围结构将存取转换成READ/WRITE/DMA事务,但若干变化 也是可能的。为了描述简单起见,假定外围结构是PCIe?互连,并且对远程物理存储器的每 个单独存取被转换成不可高速缓存存取,并且又转换成PCIe?数据事务,以便通过PCIe?结 构隧道传输请求/数据。事务可封装(encapsulate)原始虚拟地址或者物理地址。在一些 实施例中,执行存取的CPU线程可停止待处理完成(pending completion)的远程存取(并 且可切换到另一个线程)。当加速器从CPU接收到通知关于存取请求的PCIe?事务时,力口 速器中的定序器将请求作为特殊中断事件来处理。定序器从请求中提取存取地址和存取类 型。如果存取地址是虚拟地址,则定序器可经由本地MMU而在本地执行转换,以便得到物理 地址。使用该物理地址,加速器定序器提交(commit)存储(如果是写事务)或者得到加载 的数据(如果是读事务)。定序器将把应答(例如在加载的情况下)封装到PCIe?事务中, 并且回送给主根(host root)(即CPU)。CPU核心接收已完成存取的状态和PCIe?事务,并 且恢复连续操作,根据远程存取的存取状态,这可引起存取错误。
[0040] 现在参照图2,所示的是根据本发明的一个实施例的反向代理执行的流程图。如 图2所示,方法200可用于存取加速器的本地存储器(即相对于CPU的远程存储器)上存 在的数据。在图2中看到,方法200可通过接收存储器存取请求来开始(框210)。这个请 求可在主CPU中接收,主CPU又可将请求转发给MMU、如TLB,以便确定条目是否用于TLB中 存在的虚拟地址(菱形框220)。如果不是,则可执行页面丢失处理程序,以便得到该条目并 且将其存储到TLB中(框225)。
[0041] 当条目存在于TLB时,可对它进行分析,以便确定对应物理地址的存储单元(框 230)。例如,正如下面进一步论述,各TLB条目可包括指明对应页面是存在于本地(即系统 存储器)还是远程存储器的信息。如果物理地址存在于系统存储器(菱形框240),则控制 转到框245,其中可执行对系统存储器的存储器存取请求,并且相应地可提供所请求数据作 为对请求方的响应(框250)。
[0042] 如果在菱形框240而是确定物理地址不在系统存储器中,则控制转到框260。在框 260,可准备反向代理执行请求,以便将存储器存取请求发送给包括数据的远程存储器(例 如加速器的本地存储器)。在各种实现中,这个请求可通过非相干互连、例如作为专用加载 /存储请求来隧道传输。在加速器上处理这个反向代理执行请求之后,控制转到框270,其 中接收反向代理执行请求的结果,即,接收所请求数据,并且可将响应提供给请求方,如以 上针对框250所述。虽然在图2的实施例中以这种具体实现示出,但是本发明的范围并不 局限于这个方面。
[0043] 现在参照图3,所示的是示出根据本发明的一个实施例的反向代理执行的操作的 框图。如图3所示,当从CPU120到MMU125的存取(1)虚拟地址(V.A)X的请求失败(例如, 查找指明页面存在于加速器卡的本地存储器中)时,反向代理执行请求被准备并且发送 (2)给加速器卡150。加速器160又处理请求,以便将存储器存取请求(3)发送给MMU165, MMU165又存取(4)本地存储器180中的所请求页面,使得所请求数据可回送给CPU120(5)。 注意,完全在主CPU的控制下,在其有利的(glorified)LD/ST实现内(all under the host inside its glorified LD/ST implementation)(例如在微码流中),来自加速器的数据可 经由DMA或者轮询来发送给主CPU。换言之,一旦CPU发出对远程存储单元的存取,则CPU将 存取转向微码例程,以便执行有利的LD/ST,这将等待DMA中断或者执行活动轮询(active polling)而从加速器得到"返回"数据。对(V.A)X的存储器存取的完成以对存取标识在虚 拟地址X处的存储单元的应用程序透明的方式来执行。
[0044] 总体上,RPE操作的作用就像通过不均匀存储器架构(NUMA)系统的长等待时间存 储器存取操作。基础隧道传输机制可根据结构的性质而改变。在PCIe?结构的情况下,由 于根(系统)与子(加速器)联合体之间的不对称,其中即使CPU通常无法存取加速器的 本地存储器的任一个,加速器也可存取一系列系统存储器,RPE性能机制的各种优化可通过 将系统存储器的部分或者加速器的本地存储器用作专有存储器(private memory)来实现。 在一个实施例中,系统存储器的部分可保留作为远程加速器本地存储器的高速缓存。或者, 可分配专有存储器区域以充当缓冲器,以便保存远程存取的虚拟页面。例如对映射到远程 页面的虚拟地址X的存取可引起整个页面临时读入本地缓冲器,其中它将可用于将来的存 取,以便减少远程存储器存取。
[0045] 在一个实施例中,代理执行机制可用于处理在加速器定序器上发生(incur)的页 面错误(page fault)情况,表示可将错误发送给CPU供处理。这意味着,加速器定序器上 的MMU与CPU的MMU是相干的(coherent),并且全部指向0S的同一个页表。无论是由CPU 还是加速器上的操作所引起的虚拟页面的页面错误使CPU使用传统页面处理机制来使页 面进入存储器。如果错误来源于加速器定序器上的存取,则CPU可在远程加速器本地物理 存储器中安装新的页面。否则,可将该页面放入系统存储器。CPU上对映射到远程加速器本 地存储器的虚拟地址的非错误存取将保证映射到加速器上的物理页面,由此确保完成代理 执行。
[0046] 现在参照图4,所示的是根据本发明的一个实施例的代理执行的方法的流程图。在 图4中看到,方法300可用于在加速器所预期的数据没有存在于其本地存储器时执行代理 执行。
[0047] 在图4中看到,方法300可通过接收来自加速器的存储器存取请求来开始(框 310)。然后,可确定请求的虚拟地址的条目是否存在于加速器的TLB中(菱形框350)。如 果是的话,则加速器的本地存储器可使用这个虚拟地址来存取(框370),并且将响应提供 给请求方(框380)。
[0048] 否则,如果条目没有存在于TLB,则控制转到框330,其中可将代理执行请求发送 给CPU (框330)。假定所请求的转换没有存在于CPU的MMU中,则可运行页面丢失处理程 序,以便得到该条目(框335)。此外,与这个虚拟地址对应的页面可从系统存储器移动到加 速器本地存储器(框340)。然后,恢复消息可从CPU发送给加速器(框350)。相应地,力口 速器可对其TLB重试存储器请求(框360)。由于条目这时存在于MMU中,所以可对本地存 储器执行存储器存取请求,以便得到所请求的数据(框370)。相应地,可将包含所请求数据 的响应提供给请求方(框380)。
[0049] 现在参照图5,所示的是示出根据本发明的一个实施例的代理执行操作的框图。 在图5中看到,代理执行可在加速器请求存取(1)没有存在于本地MMU165的虚拟地址 (V.A)X时发生。相应地,将对这个页面错误的代理执行请求(2)发送给CPU120。图5示 出其中MMU165直接向CPU120发送代理执行请求的实现。但是,当代理通过页面漫步代码 (page-walking code)(微码、固件或软件,取决于如何管理MMU)来实现时,这个代码则可 发送代理请求。CPU120将请求(3)发送给本地MMU125,MMU125又存取系统存储器130中的 页面以便获得所请求的虚拟地址(4)。大家看到,当请求用于读取数据时,整个页面可从系 统存储器130发送(5)到本地存储器180。在一个实施例中,数据的传输可经由CPU120进 行,CPU120对DMA编程,以便将数据从系统存储器130中的区域复制到本地存储器180中 的区域。备选地,CPU120可通过运行例如使用上述微码所实现的单独的"有利"加载/存储 指令序列来执行复制。此后,CPU120可将恢复消息(6)发送给加速器160,加速器160又重 试对MMU165的存取(7),MMU165这时发现转换存在,并且发送请求(8)以便从本地存储器 180得到对应数据。注意,为了实现对本地存储器180中的数据的存取,使MMU165是可寻址 的。CPU120可直接执行单独的"有利" LD/ST,以便把来自系统存储器130上的页表的转换 条目更新到MMU165中。备选地,CPU120可经由到本地存储器180的数据传输来将包含转 换的页表或者页表的子集复制到加速器侧,并且然后恢复加速器160,其页面漫步器(page walker)将漫步(walk)这时本地驻留的页表。
[0050] 区分CPU上的虚拟地址存取是本地(在系统存储器中)还是远程(在加速器的存 储器中)的信息可来自0S,它从基本输入/输出系统(BIOS)知道这种信息,BIOS完全知道 系统存储器配置。要支持RPE,BIOS可列举(enumerate)加速器上的公告存储器大小。这 个操作与由BIOS在引导时所执行的只读存储器(ROM)/随机存取存储器(RAM)芯片选择相 似。然后,BIOS可报告系统存储器和加速器本地存储器的总和,并且通知0S关于存储器的 哪一个范围是本地系统存储器以及哪一个是远程的。
[0051] 在各个实施例中,BIOS的系统级状态、即称作存储器分区描述符的一组描述符架 构状态可记录这种范围信息,例如最小程度地记录系统存储器的范围信息,因而这个范围 之外的任何物理地址将识别为远程。在一个实施例中,这种信息可存储在BIOS内建数据结 构中。存储器描述符也可作为专有状态(private state)存储在软件和微码均可存取的机 器特定寄存器中。注意,这种范围信息首先由BIOS在0S启动之前建立,因此这些状态的使 用与0S没有相关性。换言之,RPE机制可与甚至不知道远程与本地存储器之间的区别的传 统0S配合工作。
[0052] 对于由CPU所处理的任何给定LD/ST,使各TLB转换还将物理地址与存储器分区描 述符进行比较以判定它是本地系统存储器还是远程存取可能是麻烦的。相反,这种检查可 在MMU的关键路径外执行,并且可仅在填充新TLB条目时才通过页面漫步发生。在一些实 施例中,各TLB条目可包括属性位,以便指明对应条目是在远程还是在本地系统存储器中。 当安装新的TLB条目时,页面漫步器可执行页表条目中的物理地址范围相对存储器分区描 述符的范围检查。注意,这种机制即使在0S不在本地或者远程映射的页面之间进行区分时 也进行工作。
[0053] 在一些实施例中,0S可通过将加速器本地存储器仅用于保存加速器频繁存取的 应用的代码和数据的那个子集,来处理使用加速器本地存储器背后的策略(policy behind usage of accelerator local memory)。如果0S不知道,则例如运行时层或其它实体的本 地性原则将帮助把工作集移动到系统存储器或加速器本地存储器中接近存取更频繁发生 的存储单元。
[0054] 另外,如上所述,0S页表格式可包括属性位,以便指明对应页面是存储在本地还是 远程存储器中。当0S建立虚拟地址到物理地址映射时,可标记这个位,并且对于各物理页 面,0S可检查存储器分区描述符,以便将该页面标记为本地或远程。这样,无需对任何已安 装TLB条目执行范围检查。为了允许应用存取加速器上的存储器,CPU可分析属性位,使得 它可将对给定虚拟地址的加载/存储路由到远程物理存储单元。另外,属性位还可跟踪远 程执行的存取次数,从而使0S软件能够实现基于远程存取次数的策略,使得在远程存取次 数超过特定阈值时,可将页面迁移到另一个存储单元。
[0055] 虽然有可能通过增强虚拟页面的保护、例如将页面标记为不可存取或者不存在, 并且处理所得错误,来实现远程存储器存取,但是存取等待时间增加,因为页面错误处理程 序需要在每次存储器存取发生时运行。相反,使用本发明的一个实施例,(PU可将远程存储 单元地址提供给总线控制器,总线控制器将存取导向加速器的存储单元。例如,CPU可通过 存取总线控制器中定义的寄存器的标准集来直接重定向加载/存储,以便对远程存储单元 进行存取,而无需来自软件的任何帮助以完成加载/存储。这种数据传输可通过DMA (成批 传输)或者以高速缓存行粒度的标量传输来进行。透明地将虚拟页面从远程存储单元移动 到本地存储单元(反过来也是一样)的能力允许软件(例如应用)与加速器共享数据,而 无需显式管理数据的移动。在没有连接到系统或者进入无响应状态的加速器的情况下,地 址转换单元产生指明加载/存储失败的原因的页面错误。
[0056] 现在参照图6,所示的是根据本发明的一个实施例的页表中的示例条目400。大家 看到,各条目可包含页面基址(PBA)字段410,它存储指向存储器中存储的页面的第一地址 的PBA。另外,各条目可包括:加速器字段420,它存储表示(referto)包括该页面的系统中 存在的加速器的η位加速器标识符(ID);本地/远程字段430,存储关于对应虚拟页面是存 储在本地存储器还是可能多个远程存储器之一中的例如η位指示符;计数器字段440,存储 对远程存储器进行的存取的次数进行计数的m位计数器(使得计数器仅在页面处于远程存 储器时才是活动的);以及属性字段450,存储指明页面的不同属性的各个位。
[0057] 在一个实施例中,当存取计数器的值达到零时,发生例外情况。这种例外情况允许 0S软件、例如负责页面迁移的虚拟存储器管理核心根据对给定虚拟页面的存取次数来管理 迁移策略。也就是说,软件可管理虚拟地址空间,其中应用进行工作,使得虚拟地址空间可 映射位于更接近CPU或者更接近加速器的物理存储器页面。对于耦合到PCIe?总线的加速 器,由于总线是非相干的,所以基础运行时软件可实现基于软件的相干机制。对于对任何共 享数据结构的争用存取,可使用同步控制、如信标(semaphore),使得生产者线程没有释放 信标,直到它准备将数据移交给消费者(consumer)。在生产者(producer)释放信标之前, 需要将与共享数据有关的所有脏高速缓存行刷(flush)到存储器中。这保证在加速器上的 消费者线程开始对来自存储器的共享数据进行存取时,数据是相干的,即使主CPU与加速 器之间的结构不支持高速缓存相干性。相反,当加速器完成处理共享数据时,类似的同步和 刷新机制可用于确保基于存储器的数据相干。如果CPU与加速器之间的结构是高速缓存相 干的(例如未来一代的PCIe),则在生产者释放信标之前,在移交时,不需要将脏行刷到存 储器中。
[0058] 在具有0S支持的实施例中,加速器上的存储器的分配和管理可与分配和管理给 予应用的系统存储器页面并且管理由CPU用于将虚拟地址转换到物理地址的页表的OS的 存储器管理器配合来执行。存储器管理器还处理因存取远程存储器的重定向而发生的例外 情况,并且管理CPU与加速器之间的物理页面的迁移背后的策略。页面迁移策略可根据工 作负荷的行为而改变,并且可潜在地(potentially)改变成减少远程存取次数(在对应页 面移动到系统存储器之前)或者实现第一接触策略,以便将页面移动到存在最大存取次数 的存储单元。代码和只读数据页面可在多个存储器中复制,以便防止不必要地来回移动物 理页面。只有包含在执行程序期间处理的数据的数据页面才根据对数据页面的存取的本地 性来回迁移。
[0059] 现在参照图7,示出的是根据本发明的一个实施例的处理器的框图。如图7所示, 处理器500可以是多级流水线无序处理器。处理器500以图7中相对简化的视图示出,以 便说明与根据本发明的一个实施例的代理执行和反向代理执行结合使用的各种特征。
[0060] 如图7所示,处理器500包括前端单元510,前端单元510可用于取将要执行的宏 指令,并且将它们准备稍后供处理器中使用。例如,前端单元510可包括取指令单元504、 指令高速缓存506和指令解码器508。在一些实现中,前端单元510还可包括追踪高速缓 存(trace cache)连同微码存储装置以及微操作存储装置。取指令单元504可以例如从 存储器或者指令高速缓存506取宏指令,并且将它们馈送给指令解码器508,以便将它们解 码为原语、即微操作,以供处理器执行。前端单元510还包括根据本发明的一个实施例的 MMU509,以便存储包含增加状态信息的条目,以处理本文所述的代理执行和反向代理执行。 根据这种信息,可有效地执行包括系统存储器和一个或多个加速器的本地存储器的共享虚 拟存储器空间中的操作,而无需用于移动数据的编程人员支持。
[0061] 耦合在前端单元510与执行单元520之间的是无序(000)引擎515,它可用于接 收微指令,并且将它们准备用于执行。更具体来说,〇〇〇引擎515可包括各种缓冲器,以便 对微指令流重排序,并且分配执行所需的各种资源,以及提供逻辑寄存器到各种寄存器文 件(如寄存器文件530和扩展寄存器文件535)内的存储装置存储单元的重命名。寄存器 文件530可包括用于整数和浮点运算的独立寄存器文件。扩展寄存器文件535可为向量大 小单元(vector-sized unit)提供存储,如每个寄存器256或512位。
[0062] 各种资源可存在于执行单元520中,包括例如各种整数、浮点和单指令多数据 (SMD)逻辑单元以及其它专用硬件。可将结果提供给引退逻辑(retirement logic),即重 排序缓冲器(ROB) 540。更具体来说,R0B540可包括各种阵列和逻辑,以便接收与被执行的 指令关联的信息。然后,这个信息由R0B540检查,以便确定指令是否可有效地引退以及结 果数据被提交给处理器的架构状态,或者是否发生阻止指令的正确引退的一个或多个例外 情况(exc印tion)。当然,R0B540可处理与引退关联的其它操作。
[0063] 如图7所示,R0B540耦合到高速缓存550,高速缓存550在一个实施例中可以是低 级高速缓存(例如L1高速缓存),但是本发明的范围并不局限于这个方面。执行单元520 也可直接耦合到高速缓存550。从高速缓存550,可与更高级高速缓存、系统存储器等进行 数据通信。虽然在图7的实施例中以这种高级示出,但是大家理解,本发明的范围并不局限 于这个方面。
[0064] 例如,在一些实现中,加速器可与处理器片上集成。例如,在一种架构中,多核处理 器可包括多个单独处理器核心以及加速器可以是例如图形处理器或者其它专用处理单元 的异构核心。一般来说,代理执行和反向代理执行的操作可通过与以上对于可通过包括相 干或非相干链路的任何类型的互连耦合到核心的片上加速器所述的相同方式发生。
[0065] 现在参照图8,所示的是根据本发明的另一个实施例的系统的框图。在图8中看 至IJ,系统600包括多核处理器610,多核处理器610可在单个半导体芯片上形成并且包括各 种组件。具体来说,在图8的实现中,处理器610可包括多个核心620a-620n,其中的每个可 包括TLB625 a-625n,它们可包括具有如上所述转换和附加字段的条目。核心又可耦合到共享 高速缓存640,共享高速缓存640可以是共享最后级高速缓存,因为单独核心的每个可包括 它自己的高速缓冲存储器。还看到,处理器610还可包括加速器。在所示实施例中,示出两 个这类加速器,但是本发明的范围并不局限于这个方面。加速器与核心的连接可以通过例 如相干或非相干链路等任何类型的互连,例如PCIe?链路、共享总线互连等等。加速器630 a 和630b示为各包括具有上述条目的TLB635。另外,处理器610可包括存储控制器650。 [0066] 在一种实现中,处理器610可耦合到存储器660,存储器660可以是可划分为多个 分区的系统存储器,例如包括可与处理器核心关联的第一分区665a以及可与加速器关联的 第二分区665b。当然,与核心和加速器关联的存储器可例如经由不同端口以及作为不同存 储器模块等等以不同方式来配置。处理器610还可耦合到芯片组670,芯片组607又可耦合 到各种外围设备,例如输入/输出装置、存储装置、其它加速器等等。
[0067] 相应地,实施例可提供在可包括集成加速器或者经由可以是相干或非相干的链路 耦合的加速器的不同系统中的代理执行和反向代理执行的处理。
[0068] 实施例可通过代码来实现,并且可存储在其上已存有指令的存储介质上,该指令 可用于对系统编程,以便执行指令。存储介质可包括但不限于:任何类型的磁盘,包括软 盘、光盘、固态驱动(SSD)、光盘只读存储器(⑶-ROM)、可重写光盘(⑶-RW)和磁光盘;半 导体器件,例如只读存储器(ROM)、例如动态随机存取存储器(DRAM)和静态随机存取存储 器(SRAM)等随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦 可编程只读存储器(EEPR0M)、磁卡或光卡;或者适合于存储电子指令的任何其它类型的介 质。
[0069] 虽然针对有限数量的实施例描述了本发明,但是本领域的技术人员将会从其中知 道大量修改和变更。所附权利要求书意在涵盖落入本发明的真实精神和范围之内的所有这 类修改和变更。
【权利要求】
1. 一种用于支持共享虚拟存储器的处理器,包括: 第一核心,包括取指令单元、指令解码单元、第一存储器管理单元(MMU)和至少一个执 行单元,第一 MMU包括存储虚拟地址到物理地址转换的多个条目;以及 加速器,与第一核心耦合并包括第二MMU,第二MMU包括存储虚拟地址到物理地址转换 的多个条目,其中,第一 MMU的各条目包括存储指明对应条目的存储单元是存在于与所述 处理器耦合的第一存储器中还是存在于与所述加速器耦合的第二存储器中的第一指示符 的存储单元字段,其中,所述处理器执行处理程序以将对于第二存储器中的存储单元的存 储器请求转换成直接存储器存取(DMA)事务来与第二存储器通信。
2. 如权利要求1所述的处理器,其中,第一MMU的各条目还包括存储所述加速器的标识 符的标识符字段和存储所述处理器对第二存储器的所述存储单元的存取次数的计数的计 数器。
3. 如权利要求1所述的处理器,其中,第一存储器是系统存储器。
4. 如权利要求3所述的处理器,其中,所述系统存储器和第二存储器包括单个虚拟地 址空间。
5. 如权利要求1所述的处理器,其中,当第一MMU的条目指明所述存储单元存在于第二 存储器中时,所述处理器经由与第一核心和所述加速器耦合的非相干互连的协议将存储器 请求隧道传输到所述加速器。
6. 如权利要求1所述的处理器,其中,响应第二MMU上的页面错误,所述加速器请求所 述处理器解析所述页面错误。
7. 如权利要求6所述的处理器,其中,所述处理器使第一存储器将关联所述页面错误 的地址的存储器页面传输给第二存储器,并且使所述存储器页面的转换发送给所述加速器 供存储在第二MMU中。
8. 如权利要求1所述的处理器,其中,所述处理器使用第一MMU的条目中的信息直接对 存在于第二存储器中的存储单元寻址。
9. 如权利要求1所述的处理器,其中,所述处理器向所述加速器发出反向代理执行请 求,以便使用第一 MMU的条目中的信息来存取第二存储器中存储的数据,并且无需使用运 行在所述处理器上的用户级应用。
10. -种用于支持共享虚拟存储器的方法,包括: 接收包含虚拟地址的存储器存取请求; 分析处理器的转换后备缓冲器(TLB)中存储的与虚拟地址对应的条目,以便根据指示 与虚拟地址对应的物理地址(PA)是存在于第一存储器还是存在于第二存储器中的TLB条 目的位置属性,确定所述PA是存在于关联所述处理器的第一存储器还是存在于关联与所 述处理器耦合的加速器的第二存储器中,第一存储器和第二存储器共同形成共享虚拟存储 器空间;以及 如果所述PA存在于第二存储器中,则经由非相干互连向第二存储器发送反向代理执 行请求,以便执行所述存储器存取请求。
11. 如权利要求10所述的方法,还包括:使用指明与第二存储器关联的加速器的所述 TLB条目的标识符字段来确定所述PA位于各与加速器关联的多个第二存储器的哪一个中。
12. 如权利要求11所述的方法,还包括:分析指示所述处理器对第二存储器的所述PA 的存取次数的所述TLB条目的计数器。
13. 如权利要求10所述的方法,还包括:当指示所述处理器对第二存储器的所述PA的 存取次数的所述TLB条目的计数器达到阈值时,将信息从第二存储器的PA移动到第一存储 器,而无需涉及运行在所述处理器上的应用。
14. 如权利要求10所述的方法,还包括:将包括第一存储器和第二存储器的系统的存 储器配置设置成指示与第一存储器关联的第一物理地址范围以及与第二存储器关联的第 二物理地址范围。
15. 如权利要求14所述的方法,还包括:通过页面漫步来对存储器配置进行存取以得 到存储器存取请求的转换,以及将包含所述转换和存储单元指示符的条目存储在TLB中, 其中所述存储单元指示符具有当所述PA处于所述第一物理地址范围之内时指明所述PA处 于第一存储器中的第一值。
16. -种用于支持共享虚拟存储器的系统,包括: 具有包括第一存储器管理单元(MMU)的第一核心的处理器,第一 MMU包括各用来存储 虚拟地址到物理地址转换的多个条目,其中各条目包括存储所述处理器对与耦合到所述处 理器的第二处理器相关联的第二存储器的存储单元的存取次数的计数的计数器,其中,当 条目的计数器达到阈值时,所述处理器将与所述条目相关联的存储单元中存储的数据从第 二存储器的所述存储单元移动到与所述处理器耦合的系统存储器的存储单元; 经由链路与所述处理器耦合的第二处理器,第二处理器包括第二MMU ;以及 与所述处理耦合的系统存储器。
17. 如权利要求16所述的系统,其中,第一MMU的各条目还包括存储指示所述对应条目 的存储单元是存在于所述系统存储器中还是存在于第二存储器中的指示符的第一字段。
18. 如权利要求17所述的系统,其中,所述处理器使用第一MMU的条目中的信息直接对 存在于第二存储器中的存储单元寻址。
19. 如权利要求16所述的系统,其中,所述处理器响应于当所述计数器达到阈值时发 生中断,将所述数据从第二存储器的存储单元移动到所述系统存储器的存储单元,而无需 涉及运行在所述处理器上的应用。
【文档编号】G06F12/10GK104123242SQ201410350006
【公开日】2014年10月29日 申请日期:2010年9月16日 优先权日:2009年9月18日
【发明者】G.N.钦亚, H.王, D.A.马泰库蒂, J.D.科林斯, E.舒赫曼, J.P.赫尔德, A.V.巴特, P.塞蒂, S.F.瓦利 申请人:英特尔公司