CN104049904B - 用于管理统一虚拟存储器的页面状态目录的系统和方法 - Google Patents
用于管理统一虚拟存储器的页面状态目录的系统和方法 Download PDFInfo
- Publication number
- CN104049904B CN104049904B CN201310752168.3A CN201310752168A CN104049904B CN 104049904 B CN104049904 B CN 104049904B CN 201310752168 A CN201310752168 A CN 201310752168A CN 104049904 B CN104049904 B CN 104049904B
- Authority
- CN
- China
- Prior art keywords
- page
- memory
- entry
- ppu
- address
- 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.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 450
- 238000000034 method Methods 0.000 title claims description 53
- 238000013507 mapping Methods 0.000 claims abstract description 73
- 238000012545 processing Methods 0.000 claims abstract description 50
- 230000008569 process Effects 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 18
- 230000007704 transition Effects 0.000 claims description 5
- 230000005012 migration Effects 0.000 description 23
- 238000013508 migration Methods 0.000 description 23
- 230000008859 change Effects 0.000 description 18
- 238000007726 management method Methods 0.000 description 15
- 238000013519 translation Methods 0.000 description 13
- 230000009466 transformation Effects 0.000 description 12
- 230000004048 modification Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 239000011800 void material Substances 0.000 description 4
- 230000004888 barrier function Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 3
- 238000000151 deposition Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000000844 transformation Methods 0.000 description 3
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000000149 penetrating effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 238000013024 troubleshooting Methods 0.000 description 2
- 241001269238 Data Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 208000011580 syndromic disease Diseases 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
用于管理虚拟存储器的系统。系统包括配置为执行引用第一虚拟存储器地址的第一操作的第一处理单元。系统还包括第一存储器管理单元(MMU),其与第一处理单元相关联并且配置为一经确定存储在与第一处理单元相关联的第一存储器单元中的第一页面表不包括与第一虚拟存储器地址相对应的映射,就生成第一页面故障。系统进一步包括与第一处理单元相关联的第一拷贝引擎。第一拷贝引擎配置为读取第一命令队列以确定与第一虚拟存储器地址相对应并且包括在第一页面状态目录中的第一映射。第一拷贝引擎还配置为更新第一页面表以包括第一映射。
Description
相关申请的交叉引用
本申请要求享有于2013年3月14日提交的、序列号为61/782,349的美国临时专利申请的优先权。本申请还要求享有于2013年3月15日提交的、题目为“CPU-To-GPU and GPU-To-GPU Atomics”的、序列号为61/800,004的美国临时专利申请的优先权。这些相关申请的主题在此通过援引并入本文。
技术领域
本发明的实施例总地涉及虚拟存储器,并且更具体地,涉及用于管理虚拟存储器的页面状态目录(page state directory)。
背景技术
许多现代的计算机系统典型地实现某种类型的虚拟存储器架构。在其他方面,虚拟存储器架构使能指令以使用虚拟存储器地址而非物理存储器地址访问存储器。通过提供物理存储器和应用软件之间的该虚拟存储器层,用户级软件被屏蔽以免获得物理存储器管理的细节,其被留给专用存储器管理系统。
实现虚拟存储器架构的典型的计算机系统包括中央处理单元(CPU)和一个或多个并行处理单元(GPU)。在操作中,在CPU或GPU上执行的软件过程可以经由虚拟存储器地址请求数据。在许多传统架构中,用于CPU和GPU的、处置经由虚拟存储器地址对于数据的请求的虚拟存储器系统是独立的。更具体地,分开的CPU存储器管理系统和分开的GPU存储器管理系统分别处置来自CPU和GPU的对于数据的请求。
存在与这类独立的存储器管理系统相关联的数个缺陷。例如,每个独立的存储器管理系统不一定具备与其他存储器管理系统相关联的存储器单元的内容的知识。因此,存储器管理系统不一定能协作以提供一定的效率,诸如确定数据应该被存储在何处用于改进的访问时延。此外,因为存储器管理系统是独立的,所以用于一个这类系统的指针不一定与其他系统兼容。因此,应用程序员必须保持对两个不同类型的指针的追踪。
如前述示出,本领域所需要的是管理具有诸如CPU和GPU的异构处理器的系统中的虚拟存储器的更高效的方法。
发明内容
本发明的一个实施例阐述用于经由页面状态目录管理虚拟存储器到物理存储器映射的系统。系统包括配置为执行引用第一虚拟存储器地址的第一操作的第一处理单元。系统还包括第一存储器管理单元(MMU),其与第一处理单元相关联并且配置为一经确定存储在与第一处理单元相关联的第一存储器单元中的第一页面表不包括与第一虚拟存储器地址相对应的映射,就生成第一页面故障(fault)。系统进一步包括与第一处理单元相关联的第一拷贝引擎。第一拷贝引擎配置为读取第一命令队列以确定与第一虚拟存储器地址相对应并且包括在第一页面状态目录中的第一映射。第一拷贝引擎还配置为更新第一页面表以包括第一映射。
所公开的方法的一个优势是用户级应用不需要取决于特定数据片段存储在何处保持对多个指针的追踪。附加优势是基于使用在存储器单元之间迁移存储器页面,其允许存储器页面位于更频繁地访问存储器页面的单元的本地。另一个优势是允许由PPU所生成的故障被合并用于高效执行的故障缓冲区被提供。
附图说明
因此,可以详细地理解本发明的上述特征,并且可以参考实施例得到对如上面所简要概括的本发明更具体的描述,其中一些实施例在附图中示出。然而,应当注意的是,附图仅示出了本发明的典型实施例,因此不应被认为是对其范围的限制,本发明可以具有其他等效的实施例。
图1是示出了配置为实现本发明的一个或多个方面的计算机系统的框图;
图2是根据本发明的一个实施例的、示出了统一虚拟存储器系统的框图;
图3是根据本发明的一个实施例的、用于追踪存储器页面的状态的系统300的示意图;
图4是根据本发明的一个实施例的、实现迁移操作的系统的示意图;
图5示出了根据本发明的一个实施例的、用于将故障存储在故障缓冲区中的虚拟存储器系统;
图6示出了根据本发明的一个实施例的、用于解决由PPU所生成的页面故障的虚拟存储器系统;
图7阐述了根据本发明的一个实施例的、用于经由页面状态目录管理虚拟存储器到物理存储器映射的方法步骤的流程图;
图8阐述了根据本发明的一个实施例的、用于追踪页面故障的方法步骤的流程图;
图9阐述了根据本发明的一个实施例的、用于利用故障缓冲区解决页面故障的方法步骤的流程图;
图10阐述了根据本发明的一个实施例的、用于创建和管理虚拟存储器架构中的公共指针的方法步骤的流程图;以及
图11阐述了根据本发明的一个实施例的、用于管理虚拟存储器子系统中的所有权状态的方法步骤的流程图。
具体实施方式
在下面的描述中,将阐述大量的具体细节以提供对本发明更透彻的理解。然而,本领域的技术人员应该清楚,本发明可以在没有一个或多个这些具体细节的情况下得以实施。在其他实例中,未描述公知特征以避免对本发明造成混淆。
系统概述
图1为示出了配置为实现本发明的一个或多个方面的计算机系统100的框图。计算机系统100包括经由可以包括存储器桥105的互连路径通信的中央处理单元(CPU)102和系统存储器104。存储器桥105可以是例如北桥芯片,经由总线或其他通信路径106(例如超传输(HyperTransport)链路)连接到I/O(输入/输出)桥107。I/O桥107,其可以是例如南桥芯片,从一个或多个用户输入设备108(例如键盘、鼠标)接收用户输入并且经由通信路径106和存储器桥105将该输入转发到CPU102。并行处理子系统112经由总线或第二通信路径113(例如外围部件互连(PCI)Express、加速图形端口或超传输链路)耦连到存储器桥105;在一个实施例中,并行处理子系统112是将像素传递到显示设备110的图形子系统,显示设备110可以是任何常规的阴极射线管、液晶显示器、发光二极管显示器等。系统盘114也连接到I/O桥107并且可以配置为存储内容和应用和数据以由CPU102和并行处理子系统112使用。系统盘114为应用和数据提供非易失性存储并且可以包括固定的或可移动的硬盘驱动器、闪存设备以及CD-ROM(压缩光盘只读存储器)、DVD-ROM(数字多功能光盘ROM)、蓝光、HD-DVD(高清DVD)或其他磁性、光学或固态存储设备。
交换器116提供I/O桥107与诸如网络适配器118以及各种插卡120和121的其他部件之间的连接。其他部件(未明确示出),包括通用串行总线(USB)或其他端口连接、压缩光盘(CD)驱动器、数字多功能光盘(DVD)驱动器、胶片录制设备及类似部件,也可以连接到I/O桥107。图1所示的各种通信路径包括具体命名的通信路径106和113可以使用任何适合的协议实现,诸如PCI-Express、AGP(加速图形端口)、超传输或者任何其他总线或点到点通信协议,并且如本领域已知的,不同设备间的连接可使用不同协议。
在一个实施例中,并行处理子系统112包含经优化用于图形和视频处理的电路,包括例如视频输出电路,并且构成一个或多个并行处理单元(PPU)202。在另一个实施例中,并行处理子系统112包含经优化用于通用处理的电路,同时保留底层(underlying)的计算架构,本文将更详细地进行描述。在又一个实施例中,可以将并行处理子系统112与一个或多个其他系统元件集成在单个子系统中,诸如结合存储器桥105、CPU102以及I/O桥107,以形成片上系统(SoC)。如众所周知的,许多图形处理单元(GPU)设计为实施并行操作和计算并且因此被认为是一类并行处理单元(PPU)。
在并行处理子系统112中可以包括任何数目的PPU202。例如,可在单个插卡上提供多个PPU202、或可将多个插卡连接到通信路径113、或可将一个或多个PPU202集成到桥式芯片中。在多PPU系统中的PPU202可以彼此同样或不同。例如,不同的PPU202可能具有不同数目的处理核心、不同容量的本地并行处理存储器等等。在存在多个PPU202的情况下,可并行操作那些PPU从而以高于单个PPU202所可能达到的吞吐量来处理数据。包含一个或多个PPU202的系统可以以各种配置和形式因素来实现,包括台式电脑、笔记本电脑或手持式个人计算机、服务器、工作站、游戏控制台、嵌入式系统等等。
PPU202有利地实现高度并行处理架构。PPU202包括若干通用处理集群(GPC)。每个GPC能够并发执行大量(例如数百或数千)线程,其中每个线程是程序的实例。在一些实施例中,单指令、多数据(SIMD)指令发出技术用于在不提供多个独立指令单元的情况下支持大量线程的并行执行。在其他实施例中,单指令、多线程(SIMT)技术用来支持大量一般来说同步的线程的并行执行。不同于所有处理引擎典型地都执行同样指令的SIMD执行机制,SIMT执行通过给定线程程序允许不同线程更容易跟随分散执行路径。
GPC包括若干流多处理器(SM),其中每个SM配置为处理一个或多个线程组。如本先前所定义的,传送到特定GPC的一系列指令构成线程,并且跨SM内的并行处理引擎的某一数目的并发执行线程的集合在本文中称为“线程束(warp)”或“线程组”。如本文所使用的,“线程组”是指对不同输入数据并发执行相同程序的一组线程,所述组的一个线程被指派到SM内的不同处理引擎。此外,多个相关线程组可以在SM内同时活动(在执行的不同阶段)。该线程组集合在本文中称为“协作线程阵列”(“CTA”)或“线程阵列”。
在本发明的实施例中,使用计算系统的PPU202或其他处理器来使用线程阵列执行通用计算是可取的。为线程阵列中的每个线程指派在线程的执行期间对于线程可访问的唯一的线程标识符(“线程ID”)。可被定义为一维或多维数值的线程ID控制线程处理行为的各方面。例如,线程ID可用于确定线程将要处理输入数据集的哪部分和/或确定线程将要产生或写输出数据集的哪部分。
在操作中,CPU102是计算机系统100的主处理器,控制和协调其他系统部件的操作。具体地,CPU102发出控制PPU202的操作的命令。在一个实施例中,通信路径113是PCIExpress链路,如本领域所知的,其中专用通道被分配到每个PPU202。也可以使用其他通信路径。PPU202有利地实现高度并行的处理架构。PPU202可以拥有任何量的本地并行处理存储器(PPU存储器)。
在一些实施例中,系统存储器104包括统一虚拟存储器(UVM)驱动程序101。UVM驱动程序101包括用于实施与CPU102和PPU202这二者共用的统一虚拟存储器(UVM)系统的管理相关的各种任务的指令。在其他方面,架构使能CPU102和PPU202以使用公共虚拟存储器地址来访问物理存储器位置,而不管物理存储器位置是否在系统存储器104或本地于PPU202的存储器内。
应该理解,本文所示系统是示例性的,并且变化和修改都是可能的。连接拓扑,包括桥的数目和布置、CPU102的数目以及并行处理子系统112的数目,可根据需要修改。例如,在一些实施例中,系统存储器104直接连接到CPU102而不是通过桥,并且其他设备经由存储器桥105和CPU102与系统存储器104通信。在其他替代性拓扑中,并行处理子系统112连接到I/O桥107或直接连接到CPU102,而不是连接到存储器桥105。而在其他实施例中,I/O桥107和存储器桥105可能被集成到单个芯片上而不是作为一个或多个分立设备存在。大型实施例可以包括两个或更多个CPU102以及两个或更多个并行处理子系统112。本文所示的特定部件是可选的;例如,任何数目的插卡或外围设备都可能得到支持。在一些实施例中,交换器116被去掉,网络适配器118和插卡120、121直接连接到I/O桥107。
统一虚拟存储器系统架构
图2是根据本发明的一个实施例的、示出了统一虚拟存储器(UVM)系统200的框图。如所示的,统一虚拟存储器系统200包括但不限于CPU102、系统存储器104和耦连到并行处理单元存储器(PPU存储器)204的并行处理单元(PPU)202。CPU102和系统存储器104经由存储器桥105彼此耦连并且耦连到PPU202。
CPU102执行可以经由虚拟存储器地址请求存储在系统存储器104或PPU存储器204中的数据的线程。虚拟存储器地址屏蔽在CPU102中执行的线程以免其获知存储器系统的内部工作。因此,线程可能仅获知虚拟存储器地址,并且可通过经由虚拟存储器地址请求数据来访问数据。
CPU102包括CPU MMU209,其处理来自CPU102的、对于将虚拟存储器地址转译为物理存储器地址的请求。访问存储在诸如系统存储器104和PPU存储器204的物理存储器单元中的数据要求物理存储器地址。CPU102包括CPU故障处理器(handler)211,其响应于CPUMMU209生成页面故障而执行步骤,以使所请求的数据对CPU102可用。CPU故障处理器211一般是驻留在系统存储器104中并且在CPU102上执行的软件,该软件由对CPU102的中断所唤起。
系统存储器104存储包括数据的各种存储器页面(未示出)用于由在CPU102或PPU202上执行的线程使用。如所示的,系统存储器104存储CPU页面表206,其包括虚拟存储器地址和物理存储器地址之间的映射。系统存储器104还存储页面状态目录210,其充当用于UVM系统200的“主页面表”,如以下所更详细论述的。系统存储器104存储故障缓冲区216,其包括由PPU202所写的条目以向CPU102通知由PPU202所生成的页面故障。在一些实施例中,系统存储器104包括统一虚拟存储器(UVM)驱动程序101,其包括当被执行时使CPU102执行用于在其他方面补救页面故障的命令的指令。在替代实施例中,页面状态目录210、故障缓冲区216和一个或多个命令队列214的任何组合可以存储在PPU存储器204中。此外,PPU页面表208可以存储在系统存储器104中。
以与CPU102类似的方式,PPU202执行可以经由虚拟存储器地址请求存储在系统存储器104或PPU存储器204中的数据的指令。PPU202包括PPU MMU213,其处理来自PPU202的、对于将虚拟存储器地址转译为物理存储器地址的请求。PPU202包括拷贝引擎212,其执行存储在命令队列214中的、用于拷贝存储器页面、修改PPU页面表208中的数据的命令以及其他命令。PPU故障处理器215响应于PPU202上的页面故障而执行步骤。PPU故障处理器215可以是运行PPU202中的处理器或专用微控制器的软件,或者PPU故障处理器215可以是在CPU102上运行的软件,其中后者是优选选择。在一些实施例中,CPU故障处理器211和PPU故障处理器215可以是由CPU102或PPU202上的故障所调用的统一软件程序。命令队列214可以在PPU存储器204或系统存储器104中,但是优先位于系统存储器104中。
在一些实施例中,CPU故障处理器211和UVM驱动程序101可以是统一软件程序。在这类情况下,统一软件程序可以是驻留在系统存储器104中并且在CPU102上执行的软件。PPU故障处理器215可以是在PPU202中的处理器或专用微控制器上运行的分开的软件程序,或者PPU故障处理器215可以是在CPU102上运行的分开的软件程序。
在其他实施例中,PPU故障处理器215和UVM驱动程序101可以是统一软件程序。在这类情况下,统一软件程序可以是驻留在系统存储器104中并且在CPU102上执行的软件。CPU故障处理器211可以是驻留在系统存储器104中并且在CPU102上执行的分开的软件程序。
在其他实施例中,CPU故障处理器211、PPU故障处理器215和UVM驱动程序101可以是统一软件程序。在这类情况下,统一软件程序可以是驻留在系统存储器104中并且在CPU102上执行的软件。
在一些实施例中,如以上所描述的,CPU故障处理器211、PPU故障处理器215和UVM驱动程序101可以全部驻留在系统存储器104中。如图2所示,UVM驱动程序101驻留在系统存储器104中,而CPU故障处理器211和PPU故障处理器215驻留在CPU102中。
CPU故障处理器211和PPU故障处理器215对可源自CPU102或PPU202的硬件中断进行响应,所述硬件中断诸如起因于页面故障的中断。如以下所进一步描述的,UVM驱动程序101包括用于实施与UVM系统200的管理相关的各种任务的指令,包括但不限于补救页面故障,以及访问CPU页面表206、页面状态目录210、命令队列214和/或故障缓冲区216。
在一些实施例中,CPU页面表206和PPU页面表208具有不同格式,并且包含不同信息;例如,PPU页面表208可以包含以下各项,而CPU页面表206不包含它们:原子禁用位;压缩标签;和存储器混合(swizzling)类型。
以与系统存储器104类似的方式,PPU存储器204存储各种存储器页面(未示出)。如所示的,PPU存储器204还包括PPU页面表208,其包括虚拟存储器地址和物理存储器地址之间的映射。可替代地,PPU页面表208可以存储在系统存储器104中。
页面状态目录
图3是根据本发明的一个实施例的、用于追踪存储器页面的状态的系统300的示意图。如所示的,系统300包括耦连到CPU页面表206和PPU页面表208这二者的页面状态目录210。
页面状态目录210是存储与特定虚拟存储器地址空间中的每个存储器页面相关联的映射的数据结构。为了从PSD210获得物理地址,请求者将所请求的虚拟地址提供到PSD210,PSD210基于虚拟地址实施查找操作。在一些实施例中,PSD210能够保持对不同大小的存储器页面的追踪。为此,PSD210包括多个阵列。例如,第一阵列管理CPU大小的页面,第二阵列管理PPU大小的页面。
尽管在一个实施例中,页面状态目录210包括多级表,但是可以以任何技术可行的方式实现页面状态目录210。每个非叶级(non-leaf level)包括指向下一级中的条目的指针的阵列。指针可以指向PPU存储器204或系统存储器104中的条目。
CPU102或PPU202可以更新PSD210。可以通过使用跨PCI-E总线的原子比较并交换(compare-and-swap)来完成对系统存储器104中的PSD210页面的更新。通过将更新请求放置到存储在系统存储器中的PSD更新循环缓冲区来完成对PPU存储器204中的PSD210页面的更新。代理在对PSD210的任何读操作之前检查循环缓冲区以应用更新。
如以下所描述的,多个虚拟存储器地址空间可以存在。可以为在CPU102上运行的两个不同过程指派两个不同的虚拟存储器地址空间。一些过程可以共享地址空间。PSD210针对每个虚拟存储器地址空间而存在。
不同的PSD210可以每个包括到系统存储器104或PPU存储器204中的相同存储器位置的映射。在这类情况下,单个过程可以被指明为存储器位置的所有者。与该单个过程相对应的PSD210被视为“所有者PSD”。所有者PSD包括到存储器位置的映射,并且包括到该存储器位置的用于所有其他过程的PSD210包括到所有者PSD中的映射的链接。
当与特定PSD210相关联的过程不再要求与特定存储器位置相关联的特定映射时,过程使映射从与该过程相关联的PSD210移除。映射被放置到撤回(retired)列表上。在该点处,其他PSD210可以仍然包括到存储器位置的映射。那些PSD210继续包括该映射直到与那些PSD210相关联的过程确定不再需要映射为止。当没有PSD210包括与存储器位置相关联的映射时,将映射从撤回列表移除。
PSD210中的条目包括虚拟存储器地址和物理存储器地址之间的映射。条目还包括用于与条目相关联的存储器页面的状态信息。下面的列表包括在本发明的各实施例中可被包括在PSD条目中的数个示范性状态。“独享(exclusive)”-存储器页面可以被认为是“独享”的,意味着存储器页面不被复制并且对PPU202或CPU102是可见的,但并非二者都可见。以下所论述的,“独享”状态类似于“属于PPU”或“属于CPU”状态。“共享-未缓存(shared-uncached)”-存储器页面可以被认为是“共享-未缓存”的,意味着存储器页面不被复制,但是对一个或多个PPU202和/或一个或多个CPU102是可见的。“共享-未缓存”状态类似于以下所论述的“CPU共享”状态,“未缓存”的附加品质意味着“不被复制”。存储器页面可以驻留在多于一个的存储器单元中(例如系统存储器104和PPU存储器204这二者中),并且因此“被复制”。“读-被复制(read-duplicated)”-存储器页面可以被认为是“读-被复制”的,意味着存储器页面的多于一个拷贝存在,并且拷贝中的至少一个在CPU102或PPU202的本地并且对该CPU102或PPU202仅可用于读。“迁移-只读(migrating-read-only)”-存储器页面可以被认为是“迁移-只读”的,意味着存储器页面在被迁移的过程中。例如,UVM系统200可以在将存储器页面从PPU存储器204迁移到系统存储器104的过程中。因为存储器页面被认为是“迁移-只读”的,所以当在该状态下时可以读取自但不可以写入至存储器页面。“迁移-不可见(migrating-invisible)”-存储器页面可以被认为是“迁移-不可见”的,意味着存储器页面在被迁移的过程中,但是存储器页面是“不可见”的,意味着没有过程可以读取自或写入至存储器页面。“对等转发条目(peer-forwarding-entry)”-PSD210中的特定条目可以被认为是“对等转发条目”,意味着条目包含到包括与存储器页面相关联的映射的PSD210中的不同条目的链接。
UVM系统200可以将存储器页面存储在后备存储(backing store)中,诸如硬盘驱动器磁盘空间。UVM驱动程序101或操作系统保持对存储在后备存储中的存储器页面的追踪。如果对PSD210所实施的查找操作指示存储器页面存储在后备存储中,那么UVM驱动程序101将存储器页面从后备存储移动到系统存储器104或PPU存储器204。在将存储器页面从后备存储拷贝之后,UVM驱动程序101重试PSD210查找。
下面的表描绘示范性的PSD条目。每行描绘不同的示范性条目。
转译虚拟存储器地址
返回参考图2,当在CPU102中执行的线程经由虚拟存储器地址请求数据时,CPU102从CPU存储器管理单元(CPU MMU)209请求虚拟存储器地址到物理存储器地址的转译。作为响应,CPU MMU209尝试将虚拟存储器地址转译为物理存储器地址,其指定诸如系统存储器104的、存储由CPU102所请求的数据的存储器单元中的位置。
为了将虚拟存储器地址转译为物理存储器地址,CPU MMU209实施查找操作以确定CPU页面表206是否包括与虚拟存储器地址相关联的映射。除虚拟存储器地址以外,对访问数据的请求还可以指示虚拟存储器地址空间。统一虚拟存储器系统200可以实现多个虚拟存储器地址空间,其中每一个被指派到一个或多个线程。虚拟存储器地址在任何给定的虚拟存储器地址空间内是唯一的。此外,给定虚拟存储器地址空间内的虚拟存储器地址是跨CPU102和PPU202一致的,由此允许相同的虚拟地址跨CPU102和PPU202指代相同的数据。在一些实施例中,相同的虚拟地址空间中的两个虚拟存储器地址可以指代相同的数据,但是一般可能不映射到相同的物理存储器地址(例如CPU102和PPU202可以每个具有数据的本地只读拷贝)。
对于任何给定的虚拟存储器地址,CPU页面表206可以或可以不包括虚拟存储器地址和物理存储器地址之间的映射。如果CPU页面表206包括映射,那么CPU MMU209读取该映射以确定与虚拟存储器地址相关联的物理存储器地址并且将该物理存储器地址提供到CPU102。然而,如果CPU页面表206不包括与虚拟存储器地址相关联的映射,那么CPU MMU209不能够将虚拟存储器地址转译为物理存储器地址,并且CPU MMU209生成页面故障。为了补救页面故障并且使所请求的数据对CPU102可用,“页面故障序列”被执行。更具体地,CPU102读取PSD210以找出页面的当前映射状态并且随后确定适当的页面故障序列。页面故障序列一般映射与所请求的虚拟存储器地址相关联的存储器页面或改变所许可的访问的类型(例如读访问、写访问、原子访问),除非致命故障已经发生。以下更详细地论述在UVM系统200中所实现的不同类型的页面故障序列。
在UVM系统200内,与给定虚拟存储器地址相关联的数据可以作为相同数据的只读拷贝存储在系统存储器104中、PPU存储器204中或系统存储器104和PPU存储器204这二者中。此外,对于任何这类数据,CPU页面表206或PPU页面表208中的二者或之一可以包括与该数据相关联的映射。显而易见地,存在映射针对其存在于一个页面表中而非其他页面表中的一些数据。然而,PSD210包括存储在PPU页面表208中的全部映射,以及存储在CPU页面表206中的与PPU相关的映射。PSD210因此起到“主”页面表的作用用于统一虚拟存储器系统200。因此,当CPU MMU209找不出与特定虚拟存储器地址相关联的CPU页面表206中的映射时,CPU102读取PSD210以确定PSD210是否包括与该虚拟存储器地址相关联的映射。PSD210的各种实施例可以除与虚拟存储器地址相关联的映射以外还包括与虚拟存储器地址相关联的不同类型的信息。
当CPU MMU209生成页面故障时,CPU故障处理器211执行用于适当页面故障序列的操作序列以补救页面故障。另外,在页面故障序列期间,CPU102读取PSD210并且执行附加操作以改变CPU页面表206和PPU页面表208内的映射或许可。这类操作可以包括读取和/或修改CPU页面表206、读取和/或修改页面状态目录210条目、和/或在存储器单元(例如系统存储器104和PPU存储器204)之间迁移被称为“存储器页面”的数据块。
图4是根据本发明的一个实施例的、实现迁移操作的系统400的示意图。如所示的,系统400包括页面状态目录210、系统存储器104和PPU存储器204。
如以上所解释的,页面状态目录210存储PSD条目401,该PSD条目401指示虚拟存储器地址402的全部或一部分、物理存储器地址404的全部或一部分以及状态信息406。因此PSD条目401将虚拟存储器地址402映射到物理存储器地址404。
响应于页面故障,UVM驱动程序101可以确定诸如存储器页面408的存储器页面将要被从一个存储器单元迁移到另一个存储器单元,以解决页面故障。例如,UVM驱动程序101可以确定存储器页面408将要被从系统存储器104迁移到PPU存储器204。响应于该确定,UVM驱动程序101执行一系列操作,以下被称为页面故障序列,以使存储器页面408被迁移。此外,页面故障序列可以改变页面状态目录条目401的与存储器页面408相关联的一部分。更具体地,页面故障序列可以在存储器页面已经被迁移之后将物理存储器地址404更新到存储器页面408的物理位置。然而,页面状态目录条目401中的虚拟存储器地址402保持不变,其允许应用程序中的指针保持恒定并且指代存储器页面408,而无论存储器页面408存储在何处。
为了确定在页面故障序列中执行哪些操作,CPU102标识与虚拟存储器地址相关联的存储器页面。之后CPU102从与虚拟存储器地址相关的PSD210读取用于存储器页面的状态信息,该虚拟存储器地址与造成页面故障的存储器访问请求相关联。除其他方面以外,这类状态信息还可以包括用于与虚拟存储器地址相关联的存储器页面的所有权状态。对于任何给定的存储器页面,数个所有权状态是可能的。例如,存储器页面可以是“属于CPU”的、“属于PPU”的或“CPU共享”的。如果CPU102可以经由虚拟地址访问存储器页面,并且如果PPU202无法在不造成页面故障的情况下经由虚拟地址访问存储器页面,则存储器页面被认为是属于CPU的。优选地,属于CPU的页面驻留在系统存储器104中,但是可以驻留在PPU存储器204中。如果PPU202可以经由虚拟地址访问页面,并且如果CPU102无法在不造成页面故障的情况下经由虚拟地址访问存储器页面,则存储器页面被认为是属于PPU的。优选地,属于PPU的页面驻留在PPU存储器204中,但是当一般由于PPU所有权的短期性质从系统存储器104到PPU存储器204的迁移未完成时其可以驻留在系统存储器104中。如果存储器页面存储在系统存储器104中并且到存储器页面的映射存在于PPU页面表208中,其允许PPU202经由虚拟存储器地址访问系统存储器104中的存储器页面,则存储器页面被认为是CPU共享的。
UVM系统200可以基于各种各样的因素将所有权状态指派到存储器页面,该各种各样的因素包括存储器页面的使用历史、可选地存储在PSD210条目中的使用历史。使用历史可以包括关于CPU102或PPU202最近是否访问过存储器页面,以及这类访问被进行多少次的信息。例如,如果基于存储器页面的使用历史,UVM系统200确定存储器页面可能大多或仅由CPU102所使用,则UVM系统200可以为给定的存储器页面指派“属于CPU”的所有权状态并且将页面定位在系统存储器104中。类似地,如果基于存储器页面的使用历史,UVM系统200确定存储器页面可能大多或仅由PPU202所使用,则UVM系统200可以为给定的存储器页面指派“属于PPU”的所有权并且将页面定位在PPU存储器204中。最后,如果基于存储器页面的使用历史,UVM系统200确定存储器页面可能由CPU102和PPU202这二者所使用,并且存储器页面反复从系统存储器104迁移到PPU存储器204将消耗太多时间,则UVM系统200可以为给定的存储器页面指派“CPU共享”的所有权。
作为示例,故障处理器211和215可以实现下面用于迁移的启发式方法中的任何一项或全部:
(a)在CPU102访问最近尚未被迁移的、被映射到PPU202的未映射页面时,从PPU202取消故障页面的映射,将页面迁移到CPU102并且将页面映射到CPU102;
(b)在PPU202访问最近尚未被迁移的、被映射到CPU102的未映射页面时,从CPU102取消故障页面的映射,将页面迁移到PPU202并且将页面映射到PPU202;
(c)在CPU102访问最近已经被迁移的、被映射到PPU202的未映射页面时,将故障页面迁移到CPU102并且将页面映射在CPU102和PPU202这二者上;
(d)在PPU202访问最近已经被迁移的、被映射在CPU102上的未映射页面时,将页面映射到CPU102和PPU202这二者;
(e)在PPU102原子访问被映射到CPU102和PPU202这二者但是未由PPU202所使能用于原子操作的页面时,从CPU102取消页面的映射,并且利用被使能的原子操作映射到PPU202;
(f)在PPU202写访问按照写时拷贝(COW)被映射在CPU102和PPU202上的页面时,将页面拷贝到PPU202,由此进行页面的独立拷贝,按照读-写将新的页面映射在PPU上,并且将当前页面留为被映射在CPU102上;
(g)在PPU202读访问按照按需填零(ZFOD)被映射在CPU102和PPU202上的页面时,在PPU202上分配物理存储器的页面并且用零填充它,并且将该页面映射在PPU上,但是改变它为在CPU102上未映射。
(h)在由第一PPU202(1)访问最近尚未被迁移的、被映射在第二PPU202(2)上的未映射页面时,从第二PPU202(2)取消故障页面的映射,将页面迁移到第一PPU202(1),并且将页面映射到第一PPU202(1);以及
(i)在由第一PPU202(1)访问最近已经被迁移的、被映射在第二PPU202(2)上的未映射页面时,将故障页面映射到第一PPU202(1),并且保持页面在第二PPU202(2)上的映射。
总之,许多启发式规则是可能的,并且本发明的范围不限于这些示例。
此外,任何迁移启发式方法可以“集拢(round up)”以包括较多页面或较大页面大小,例如:
(j)在CPU102访问最近尚未被迁移的、被映射到PPU202的未映射页面时,从PPU202取消故障页面加上与虚拟地址空间中的故障页面相邻的附加页面的映射,将页面迁移到CPU102,并且将页面映射到CPU102(在更详细的示例中:对于4kB有故障的页面,迁移包括该4kB有故障的页面的经对齐的64kB区域);
(k)在PPU202访问最近尚未被迁移的、被映射到CPU102的未映射页面时,从CPU102取消故障页面加上与虚拟地址空间中的故障页面相邻的附加页面的映射,将页面迁移到PPU202,并且将页面映射到PPU202(在更详细的示例中:对于4kB有故障的页面,迁移包括该4kB有故障的页面的经对齐的64kB区域);
(l)在CPU102访问最近尚未被迁移的、被映射到PPU202的未映射页面时,从PPU202取消故障页面加上与虚拟地址空间中的故障页面相邻的附加页面的映射,将页面迁移到CPU102,将页面映射到CPU102,并且将所有经迁移的页面视作CPU102上的一个或多个较大页面(在更详细的示例中:对于4kB有故障的页面,迁移包括该4kB有故障的页面的经对齐的64kB区域,并且将经对齐的64kB区域视作64kB页面);
(m)在PPU202访问最近尚未被迁移的、被映射在CPU102上的未映射页面时,从CPU102取消故障页面加上与虚拟地址空间中的故障页面相邻的附加页面的映射,将页面迁移到PPU202,将页面映射到PPU202,并且将所有经迁移的页面视作PPU202上的一个或多个较大页面(在更详细的示例中:对于4kB有故障的页面,迁移包括该4kB有故障的页面的经对齐的64kB区域,并且将经对齐的64kB区域视作64kB页面);
(n)在由第一PPU202(1)访问最近尚未被迁移的、被映射到第二PPU202(2)的未映射页面时,从第二PPU202(2)取消故障页面加上与虚拟地址空间中的故障页面相邻的附加页面的映射,将页面迁移到第一PPU202(1),并且将页面映射到第一PPU202(1);以及
(o)在由第一PPU202(1)访问最近已经被迁移的、被映射到第二PPU202(2)的未映射页面时,将故障页面加上与虚拟地址空间中的故障页面相邻的附加页面映射到第一PPU202(1),并且保持页面在第二PPU202(2)上的映射。
总之,包括“集拢”的许多启发式规则是可能的,并且本发明的范围不限于这些示例。
在一些实施例中,PSD条目可以包括过渡(transitional)状态信息以确保由CPU102和PPU202内的单元所提出的各种请求之间的恰当同步。例如,PSD210条目可以包括指示特定页面在从属于CPU到属于PPU的转变的过程中的过渡状态。CPU102和PPU202中的各种单元,诸如CPU故障处理器211和PPU故障处理器215一经确定页面在这类过渡状态中,就可以放弃页面故障序列的一部分以避免由对相同虚拟存储器地址的在先虚拟存储器访问所触发的页面故障序列中的步骤。作为具体示例,如果页面故障导致页面被从系统存储器104迁移到PPU存储器204,则将造成相同迁移的不同页面故障被检测并且不造成另一页面迁移。此外,在存在对PSD210的多于一个的写入器(writer)的情况下,CPU102和PPU202中的各种单元可以实现原子操作用于对PSD210的操作的恰当排序。例如,对于对PSD210条目的修改,CPU故障处理器211或PPU故障处理器215可以发出原子比较并交换操作以修改PSD210中的特定条目的页面状态。因此,修改被完成而没有来自其他单元的操作的干扰。
多个PSD210可以存储在系统存储器104中-一个用于每个虚拟存储器地址空间。由CPU102或PPU202所生成的存储器访问请求可以因此包括虚拟存储器地址并且还标识与该虚拟存储器地址相关联的虚拟存储器地址空间。以下关于图3提供关于页面状态目录的附加细节。
正如CPU102可以执行包括虚拟存储器地址的存储器访问请求(即包括经由虚拟存储器地址访问数据的请求的指令),PPU202还可以执行类似类型的存储器访问请求。更具体地,以下结合图1所描述的,PPU202包括配置为执行多个线程和线程组的多个执行单元,诸如GPC和SM。在操作中,那些线程可以通过指定虚拟存储器地址从存储器(例如系统存储器104或PPU存储器204)请求数据。正如CPU102和CPU MMU209,PPU202包括PPU存储器管理单元(MMU)213。PPU MMU213从PPU202接收对于虚拟存储器地址的转译的请求,并且尝试为虚拟存储器地址提供从PPU页面表208的转译。与CPU页面表206类似地,PPU页面表208包括虚拟存储器地址和物理存储器地址之间的映射。还如CPU页面表206的情况,对于任何给定的虚拟地址,PPU页面表208可以不包括将虚拟存储器地址映射到物理存储器地址的页面表条目。正如CPU MMU209,当PPU MMU213从PPU页面表208请求对于虚拟存储器地址的转译并且PPU页面表208中不存在映射或访问的类型不被PPU页面表208允许时,PPU MMU213生成页面故障。随后,PPU故障处理器215触发页面故障序列。另外,以下更详细地描述在UVM系统200中所实现的不同类型的页面故障序列。
如以上所陈述的,响应于接收到对于虚拟存储器地址的转译的请求,如果CPU页面表206不包括与所请求的虚拟存储器地址相关联的映射或不许可正在被请求的访问的类型,则CPU MMU209生成页面故障。类似地,响应于接收到对于虚拟存储器地址的转译的请求,如果PPU页面表208不包括与所请求的虚拟存储器地址相关联的映射或不许可正在被请求的访问的类型,则PPU MMU213生成页面故障。当CPU MMU209或PPU MMU 213生成页面故障时,请求虚拟存储器地址停顿处的数据的线程和“本地故障处理器”-用于CPU102的CPU故障处理器211或用于PPU202的PPU故障处理器215-通过执行“页面故障序列”来尝试补救页面故障。如以上所指示的,页面故障序列包括使能故障单元(即造成页面故障的单元-CPU102或PPU202)以访问与虚拟存储器地址相关联的数据的一系列操作。在页面故障序列完成之后,经由虚拟存储器地址请求数据的线程恢复执行。在一些实施例中,通过允许故障复原(recovery)逻辑与故障指令相反地追踪故障存储器访问来简化故障复原。
在页面故障序列期间所执行的操作取决于,如果存在的话,与页面故障相关联的存储器页面必须经历的所有权状态的改变或访问许可的改变。从当前所有权状态到新的所有权状态的转变或访问许可的改变可以是页面故障序列的一部分。在一些实例中,将与页面故障相关联的存储器页面从系统存储器104迁移到PPU存储器204也是页面故障序列的一部分。在其他实例中,将与页面故障相关联的存储器页面从PPU存储器204迁移到系统存储器104也是页面故障序列的一部分。本文更充分描述的各种启发式方法可以用来配置UVM系统200为在各种操作条件和样式集下改变存储器页面所有权状态或迁移存储器页面。以下所更详细描述的是用于下面的四个存储器页面所有权状态转变的页面故障序列:属于CPU到CPU共享、属于CPU到属于PPU、属于PPU到属于CPU和属于PPU到CPU共享。
PPU202的故障可以发起从属于CPU到CPU共享的转变。在这类转变之前,在PPU202中执行的线程尝试在未被映射在PPU页面表208中的虚拟存储器地址处访问数据。该访问尝试造成基于PPU的页面故障,其随后使故障缓冲区条目被写入到故障缓冲区216。作为响应,PPU故障处理器215读取与虚拟存储器地址相对应的PSD210条目并且标识与虚拟存储器地址相关联的存储器页面。在读取PSD210之后,PPU故障处理器215确定用于与虚拟存储器地址相关联的存储器页面的当前的所有权状态是属于CPU。基于当前的所有权状态以及其他因素,诸如用于存储器页面的使用特征或存储器访问的类型,PPU故障处理器215确定用于页面的新的所有权状态应该是CPU共享。
为了改变所有权状态,PPU故障处理器215将与虚拟存储器地址相对应的新的条目写入PPU页面表208中并且将虚拟存储器地址与经由PSD210条目所标识的存储器页面相关联。PPU故障处理器215还修改用于该存储器页面的PSD210条目以指示所有权状态是CPU共享。在一些实施例中,PPU202中的转译后备缓冲区(TLB)中的条目被无效以对到无效页面的转译被缓存的情况负责。在该点处,页面故障序列完成。用于存储器页面的所有权状态是属于CPU,意味着存储器页面是CPU102和PPU202这二者都可访问的。CPU页面表206和PPU页面表208二者都包括将虚拟存储器地址关联到存储器页面的条目。
PPU202的故障可以发起从属于CPU到属于PPU的转变。在这类转变之前,在PPU202中执行的操作尝试在未被映射在PPU页面表208中的虚拟存储器地址处访问存储器。该存储器访问尝试造成基于PPU的页面故障,其随后使故障缓冲器条目被写入到故障缓冲区216。作为响应,PPU故障处理器215读取与虚拟存储器地址相对应的PSD210条目并且标识与虚拟存储器地址相关联的存储器页面。在读取PSD210之后,PPU故障处理器215确定用于与虚拟存储器地址相关联的存储器页面的当前的所有权状态是属于CPU。基于当前的所有权状态以及其他因素,诸如用于页面的使用特征或存储器访问的类型,PPU故障处理器215确定用于页面的新的所有权状态是属于PPU。
PPU202将指示PPU202生成页面故障的故障缓冲区条目写到故障缓冲区216中,并且指示与页面故障相关联的虚拟存储器地址。在CPU102上执行的PPU故障处理器215读取故障缓冲区条目,并且作为响应,CPU102移除与造成页面故障的虚拟存储器地址相关联的CPU页面表206中的映射。CPU102可以在移除映射之前和/或之后刷新(flush)高速缓存。CPU102还将指示PPU202将页面从系统存储器104拷贝到PPU存储器204中的命令写到命令队列214中。PPU202中的拷贝引擎212读取命令队列214中的命令并且将页面从系统存储器104拷贝到PPU存储器204中。PPU202将与虚拟存储器地址相对应并且将虚拟存储器地址与PPU存储器204中的新拷贝的存储器页面相关联的页面表条目写到PPU页面表208中。到PPU页面表208的写入可以经由拷贝引擎212完成。可替代地,CPU102可以更新PPU页面表208。PPU故障处理器215还修改用于该存储器页面的PSD210条目以指示所有权状态是属于PPU。在一些实施例中,PPU202或CPU102中的TLB中的条目可以被无效,以对转译被缓存的情况负责。在该点处,页面故障序列完成。用于存储器页面的所有权状态是属于PPU,意味着存储器页面仅对PPU202是可访问的。仅PPU页面表208包括将虚拟存储器地址与存储器页面相关联的条目。
CPU102的故障可以发起从属于PPU到属于CPU的转变。在这类转变之前,在CPU102中执行的操作尝试在未被映射在CPU页面表206中的虚拟存储器地址处访问存储器,其造成基于CPU的页面故障。CPU故障处理器211读取与虚拟存储器地址相对应的PSD210条目并且标识与虚拟存储器地址相关联的存储器页面。在读取PSD210之后,CPU故障处理器211确定用于与虚拟存储器地址相关联的存储器页面的当前的所有权状态是属于PPU。基于当前的所有权状态以及其他因素,诸如用于页面的使用特征或访问的类型,CPU故障处理器211确定用于页面的新的所有权状态应该是CPU共享。
CPU故障处理器211将与存储器页面相关联的所有权状态改变到属于CPU。CPU故障处理器211将命令写到命令队列214中以使拷贝引擎212从PPU页面表208移除将虚拟存储器地址与存储器页面相关联的条目。各种TLB条目可以被无效。CPU故障处理器211还将存储器页面从PPU存储器204拷贝到系统存储器104中,其可以经由命令队列214和拷贝引擎212完成。CPU故障处理器211将页面表条目写到CPU页面表206中,该页面表条目将虚拟存储器地址与被拷贝到系统存储器104中的存储器页面相关联。CPU故障处理器211还更新PSD210以将虚拟存储器地址与新拷贝的存储器页面相关联。在该点处,页面故障序列完成。用于存储器页面的所有权状态是属于CPU,意味着存储器页面仅对CPU102是可访问的。仅CPU页面表206包括将虚拟存储器地址与存储器页面相关联的条目。
CPU102的故障可以发起从属于PPU到CPU共享的转变。在这类转变之前,在CPU102中执行的操作尝试在未被映射在CPU页面表206中的虚拟存储器地址处访问存储器,其造成基于CPU的页面故障。CPU故障处理器211读取与虚拟存储器地址相对应的PSD210条目并且标识与虚拟存储器地址相关联的存储器页面。在读取PSD210之后,CPU故障处理器211确定用于与虚拟存储器地址相关联的存储器页面的当前的所有权状态是属于PPU。基于当前的所有权状态或访问的类型以及其他因素,诸如用于页面的使用特征,CPU故障处理器211确定用于存储器页面的新的所有权状态是CPU共享。
CPU故障处理器211将与存储器页面相关联的所有权状态改变到CPU共享。CPU故障处理器211将命令写到命令队列214中以使拷贝引擎212从PPU页面表208移除将虚拟存储器地址与存储器页面相关联的条目。各种TLB条目可以被无效。CPU故障处理器211还将存储器页面从PPU存储器204拷贝到系统存储器104中。该拷贝操作可以经由命令队列214和拷贝引擎212完成。之后CPU故障处理器211将命令写到命令队列214中以使拷贝引擎212改变PPU页面表208中的条目,以使得虚拟存储器地址与系统存储器104中的存储器页面相关联。各种TLB条目可以被无效。CPU故障处理器211将页面表条目写到CPU页面表206中以将虚拟存储器地址与系统存储器104中的存储器页面相关联。CPU故障处理器211还更新PSD210以将虚拟存储器地址与系统存储器104中的存储器页面相关联。在该点处,页面故障序列完成。用于页面的所有权状态是属于CPU,并且存储器页面已经被拷贝到系统存储器104中。页面对CPU102是可访问的,因为CPU页面表206包括将虚拟存储器地址与系统存储器104中的存储器页面相关联的条目。页面还对PPU202是可访问的,因为PPU页面表208包括将虚拟存储器地址与系统存储器104中的存储器页面相关联的条目。
页面故障序列的详细示例
利用本上下文,现在提供在从属于CPU到CPU共享的转变的情况下由PPU故障处理器215所执行的页面故障序列的详细描述,以示出原子操作和转变状态可以如何用来更有效地管理页面故障序列。页面故障序列由尝试访问虚拟地址的PPU202线程触发,对于该虚拟地址,在PPU页面表208中不存在映射。当线程尝试经由虚拟存储器地址访问数据时,PPU202(具体地用户级线程)请求从PPU页面表208的转译。作为响应,PPU页面故障发生,因为PPU页面表208不包括与所请求的虚拟存储器地址相关联的映射。
在页面故障发生之后,线程进入陷阱(trap)、停顿,并且PPU故障处理器215执行页面故障序列。PPU故障处理器215读取PSD210以确定哪个存储器页面与虚拟存储器地址相关联并且确定用于虚拟存储器地址的状态。PPU故障处理器215从PSD210确定用于该存储器页面的所有权状态是属于CPU。因此,由PPU202所请求的数据是对PPU202经由虚拟存储器地址不可访问的。用于存储器页面的状态信息还指示所请求的数据无法被迁移到PPU存储器204。
基于从PSD210所获得的状态信息,PPU故障处理器215确定用于存储器页面的新状态应该是CPU共享。PPU故障处理器215将状态改变为“转变到CPU共享”。该状态指示页面当前在被转变为CPU共享的过程中。当PPU故障处理器215在存储器管理单元中的微控制器上运行时,两个处理器将异步地更新PSD210,使用对PSD210的原子比较并交换(“CAS”)操作以将状态改变为“转变为GPU可见的”(CPU共享)。
PPU202更新PPU页面表208以将虚拟地址与存储器页面相关联。PPU202还使TLB高速缓存条目无效。下一步,PPU202对PSD210实施另一原子比较并交换操作以将与存储器页面相关联的所有权状态改变为CPU共享。最后,页面故障序列结束,并且经由虚拟存储器地址请求数据的线程恢复执行。
故障缓冲区
由CPU102所生成的页面故障的解决方法不涉及故障缓冲区216。然而,由PPUMMU213所生成的页面故障的解决方法涉及故障缓冲区216。以下关于图5和6更详细描述在解决由PPU MMU213所生成的页面故障中的故障缓冲区216的作用。
图5示出了根据本发明的一个实施例的、用于将故障存储在故障缓冲区中的虚拟存储器系统500。如所示的,虚拟存储器系统500包括PPU故障处理器215、故障缓冲区216和包括多个流多处理器504的PPU202。
故障缓冲区216存储指示与由PPU202所生成的页面故障相关的信息的故障缓冲区条目502。故障缓冲区条目502可以包括例如所尝试的访问的类型(例如读、写或原子),对于其所尝试的访问造成页面故障的虚拟存储器地址、虚拟地址空间和造成页面故障的单元或线程的指示。在操作中,当PPU202造成页面故障时,PPU202可以将故障缓冲区条目502写到故障缓冲区216中以通知PPU故障处理器215关于故障存储器页面和造成故障的访问的类型。PPU故障处理器215之后实施动作以补救页面故障。故障缓冲区216可以存储多个故障,因为PPU202正在执行多个线程,其中每个线程可以造成起因于PPU202的存储器访问的管线化性质的一个或多个故障。故障缓冲区条目502中的每一个可以由包括在PPU202内的一个或多个流多处理器504生成。
图6示出了根据本发明的一个实施例的、用于解决由PPU202所生成的页面故障的虚拟存储器系统600。如所示的,虚拟存储器系统600包括PPU故障处理器215、故障缓冲区216、包括命令队列214的系统存储器104和包括拷贝引擎212的PPU202。
PPU故障处理器215读取存储在故障缓冲区216中的故障缓冲区条目502以确定如何解决与故障缓冲区条目502相关联的页面故障。为了解决页面故障,PPU故障处理器215执行页面故障序列以在其他方面修改和与故障缓冲区条目502相对应的存储器页面相关联的PSD条目,和/或迁移与故障缓冲区条目502相关联的存储器页面。在页面故障序列期间,CPU102或PPU202可以将命令写到命令队列214中用于由拷贝引擎212执行。这类方法在拷贝引擎212读取并执行存储在命令队列214中的命令的同时释放CPU102或PPU202以执行其他任务,并且允许用于故障序列的所有命令同时被排队,由此避免对故障序列的进展的监视。在其他方面,由拷贝引擎212所执行的命令可以包括删除、创建或修改PPU页面表208中的页面表条目,从系统存储器104读或写数据,以及将数据读或写到PPU存储器204。
CPU102和PPU202可以分开地进行上下文切换。换言之,响应于检测到故障,PPU202可以将故障缓冲区条目写到故障缓冲区216中。该故障缓冲区可能不被CPU中的PPU故障处理器215立即解决。相反,CPU102可以实施其他处理任务,并最终处置PPU故障。因此,CPU102和PPU202可能不一定同时在相同的上下文中进行操作。换言之,CPU102可能正在执行与衍生(spawn)当前正执行在PPU202上的工作的过程不同的过程。为了向PPU故障处理器215通知哪个过程与生成故障缓冲区条目502的PPU202工作相关联,PPU202向实例指针提供故障缓冲区条目以向CPU102通知PPU202在其中造成故障的地址空间。故障缓冲区216可以包括与相同存储器页面相关联的数个页面故障条目,因为多个流多处理器504正在并行运行并且可以生成导向相同存储器页面的页面故障。PPU故障处理器215检查故障缓冲区216以确定解决哪些故障。
UVM系统架构变化
对统一虚拟存储器系统200的各种修改是可能的。例如,在一些实施例中,在将故障缓冲区条目写到故障缓冲区216中之后,PPU202可以触发CPU中断以使CPU102读取故障缓冲区216中的故障缓冲区条目并且响应于故障缓冲区条目实施任何适当的操作。在其他实施例中,CPU102可以周期性地轮询故障缓冲区216。在CPU102找出故障缓冲区216中的故障缓冲区条目的情况下,CPU102响应于故障缓冲区条目执行一系列操作。
在一些实施例中,系统存储器104而非PPU存储器204存储PPU页面表208。在其他实施例中,可以实现单个或多级高速缓存层次,诸如单个或多级转译后备缓冲区(TLB)层次(未示出),以缓存用于CPU页面表206或PPU页面表208的虚拟地址转译。
在又一些实施例中,在执行在PPU202中的线程造成PPU故障(“故障线程”)的情况下,PPU202可以采取一个或多个动作。这些工作包括:停顿整个PPU202、停顿执行故障线程的SM、停顿PPU MMU213、仅停顿故障线程、停顿包括故障线程的线程组或停顿TLB的一个或多个级。在一些实施例中,在PPU页面故障发生并且页面故障序列已经由统一虚拟存储器系统200执行之后,故障线程的执行恢复,并且故障线程再次尝试执行造成页面故障的存储器访问请求。在一些实施例中,以表现为对故障SM或故障线程的长时延存储器访问的这类方式完成在TLB处的停顿,由此不要求SM针对故障进行任何特殊操作。
最后,在其他替代性实施例中,UVM驱动程序101可以包括使CPU102执行用于管理UVM系统200并且补救页面故障的一个或多个操作的指令,该一个或多个操作诸如访问CPU页面表206、PSD210和/或故障缓冲区216。在其他实施例中,操作系统内核(未示出)可以配置为通过访问CPU页面表206、PSD210和/或故障缓冲区216来管理UVM系统200并且补救页面故障。在又一些实施例中,操作系统内核可以结合UVM驱动程序101进行操作以通过访问CPU页面表206、PSD210和/或故障缓冲区216来管理UVM系统200并且补救页面故障。
图7阐述了根据本发明的一个实施例的、用于经由页面状态目录管理虚拟存储器到物理存储器映射的方法步骤的流程图。尽管结合图1-6的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
如所示的,方法700始于步骤702,其中PPU202执行引用第一虚拟存储器地址的第一操作。在步骤704中,PPU MMU213读取PPU页面表208并且确定PPU页面表208不包括与第一虚拟存储器地址相关联的映射。PPU MMU213一经做出该确定就生成第一页面故障。在步骤706中,在PPU故障处理器215解决页面故障并且将命令放置在命令队列214中之后,PPU202中的拷贝引擎212读取命令队列214以确定与第一虚拟存储器地址相对应的映射。在步骤708中,拷贝引擎212更新PPU页面表208以包括映射。
图8阐述了根据本发明的一个实施例的、用于追踪页面故障的方法步骤的流程图。尽管结合图1-6的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
如所示的,方法800始于步骤802,其中PPU202执行与第一虚拟存储器地址相关联的第一指令。在步骤804中,PPU MMU213确定PPU页面表208不包括与第一虚拟存储器地址相关联的第一映射。在步骤805中,流多处理器504或执行第一指令的其他单元被停顿。在步骤806中,PPU202将第一页面故障传送到故障缓冲区216。
图9阐述了根据本发明的一个实施例的、用于利用故障缓冲区解决页面故障的方法步骤的流程图。尽管结合图1-6的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
如所示的,方法900始于步骤902,其中故障缓冲区216存储多个故障缓冲区条目。在步骤904中,PPU故障处理器215读取故障缓冲区条目以解决故障缓冲区条目。在步骤906中,PPU故障处理器215确定将要采取什么步骤以解决故障缓冲区,并且触发页面故障序列以补救与故障缓冲区条目相关联的一个或多个页面故障。在步骤908中,PPU故障处理器215将命令传送到命令队列214以更新PPU页面表208。在步骤910中,流多处理器504或被停顿的其他单元恢复执行。
图10示出了根据本发明的一个实施例的、用于创建和管理虚拟存储器架构中的公共指针的方法步骤的流程图。尽管结合图1-6的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
如所示的,方法1000始于步骤1002,其中UVM驱动程序101存储包括第一虚拟存储器地址和第一物理存储器地址之间的映射的第一页面状态目录条目。在步骤1004中,CPUMMU209或PPU MMU213基于第一页面状态目录将第一虚拟存储器地址转译为第一物理地址。在步骤1005中,与第一虚拟地址相关联的存储器页面被拷贝或迁移。在步骤1006中,UVM驱动程序101存储包括第一虚拟存储器地址和第二物理存储器地址之间的映射的第二页面状态目录条目(或可替代地修改第一页面状态目录条目)。该第二页面目录条目响应于修改与第一页面状态目录条目相关联的存储器页面的状态而被存储。例如,可以将存储器页面从一个存储器单元迁移到另一个存储器单元,或可以将其从一个存储器单元拷贝到另一个存储器单元。在步骤1008中,CPU MMU209或PPU MMU213基于第二页面状态目录条目将第一虚拟存储器地址转译为第二物理存储器地址。
图11阐述了根据本发明的一个实施例的、用于管理虚拟存储器子系统中的所有权状态的方法步骤的流程图。尽管结合图1-6的系统描述了该方法步骤,但是本领域普通技术人员将理解配置为以任何顺序实施该方法步骤的任何系统均在本发明的范围内。
如所示的,方法1100始于步骤1102,其中CPU MMU209或PPU MMU213分别响应于CPU102或PPU202的存储器访问请求而发出页面故障。在步骤1104中,CPU故障处理器211或PPU故障处理器215标识页面状态目录210中的条目,其和与虚拟存储器地址相关联的存储器页面相对应。在步骤1107中,如果必要的话,修改页面状态目录210中的存储器页面的所有权状态并且迁移存储器页面。在步骤1106中,CPU故障处理器211或PPU故障处理器215从页面状态目录210中的条目读取与存储器页面相关联的所有权状态。在步骤1108中,CPU故障处理器211或PPU故障处理器215更新本地页面表以包括与虚拟存储器地址相对应并且将虚拟存储器地址与存储器页面相关联的条目。
总之,以CPU和一个或多个PPU之间的共享方式提供管理存储器的统一虚拟存储器系统。统一虚拟存储器系统包括页面状态目录,其存储包括在与CPU相关联的页面表和与PPU相关联的页面表这二者中的映射。当PPU或CPU触发页面故障时,页面状态目录是可用的以提供与页面故障相关联的存储器页面的状态。此外,当PPU触发页面故障时,PPU将页面故障传送到故障缓冲区。PPU故障处理器检查故障缓冲区的内容以解决页面故障。提供故障缓冲区允许PPU故障处理器“合并”由PPU所执行的页面故障。此外,统一虚拟存储器驱动程序管理页面状态目录和相关联的虚拟存储器地址,以使得虚拟存储器地址在CPU和PPU这二者之间是共用的。最后,统一虚拟存储器驱动程序基于由CPU和PPU的使用实现迁移存储器页面的迁移方案。
所公开的方法的一个优势是用户级应用不需要取决于特定数据片段存储在何处保持对多个指针的追踪。附加优势是基于使用在存储器单元之间迁移存储器页面,其允许存储器页面位于更频繁地访问存储器页面的单元的本地。另一个优势是允许由PPU所生成的故障被合并用于高效执行的故障缓冲区被提供。
本发明的一个实施例可被实施为与计算机系统一起使用的程序产品。该程序产品的程序定义实施例的各功能(包括本文中描述的方法)并且可以被包含在各种计算机可读存储介质上。示例性计算机可读存储介质包括但不限于:(i)不可写的存储介质(例如,计算机内的只读存储器设备,诸如可由CD-ROM驱动器读取的光盘只读存储器(CD-ROM)盘、闪存、只读存储器(ROM)芯片或任何类型的固态非易失性半导体存储器),在其上存储永久性信息;和(ii)可写的存储介质(例如,磁盘驱动器或硬盘驱动器内的软盘或者任何类型的固态随机存取半导体存储器),在其上存储可更改的信息。
以上已参照特定实施例对本发明进行了描述。然而,本领域普通技术人员将理解的是,可对此做出各种修改和变化而不脱离如随附权利要求书中所阐述的本发明的较宽精神和范围。因此,前面的描述以及附图应被视为是例示性而非限制性的意义。
因此,本发明的实施例的范围由随附权利要求进行阐述。
Claims (10)
1.一种用于经由页面状态目录管理虚拟存储器到物理存储器映射的系统,所述系统包括:
第一处理单元,其配置为执行引用第一虚拟存储器地址的第一操作;
第一存储器管理单元(MMU),其与所述第一处理单元相关联并且配置为一经确定存储在与所述第一处理单元相关联的第一存储器单元中的第一页面表不包括与所述第一虚拟存储器地址相对应的映射,就生成第一页面故障;以及
第一拷贝引擎,其与所述第一处理单元相关联并且配置为:
读取存储在第一命令队列中的一个或多个命令,以及
作为响应,将来自与第二处理单元相关联的第二存储器的第一存储器页面复制到第一存储器,
其中所述第一处理单元和所述第二处理单元包括不同的处理器类型,
其中包括在页面状态目录中的第一条目包括所述第一虚拟存储器地址到与所述第一存储器页面相关联的第一物理存储器地址的映射,并且
其中所述页面状态目录包括针对存储在所述第一存储器中的存储器页面的虚拟存储器地址到物理存储器地址的映射以及针对存储在所述第二存储器中的存储器页面的虚拟存储器地址到物理存储器地址的映射。
2.如权利要求1所述的系统,其中所述页面状态目录具有包括所述映射的所述第一条目,并且其中所述页面状态目录进一步包括第一条目集和第二条目集,所述第一条目集包括所述第一条目,所述第一页面表包括基于所述第一条目集的第一多个条目,并且第二页面表与所述第二处理单元相关联并包括基于所述第二条目集的第二多个条目。
3.如权利要求2所述的系统,其中包括在所述第一多个条目中的每个条目基于包括在所述第一条目集中的不同条目,并且包括在所述第二多个条目中的每个条目基于包括在所述第二条目集中的不同条目。
4.如权利要求2所述的系统,其中所述第一条目进一步包括第一状态数据,所述第一状态数据指示所述第一处理单元和所述第二处理器单元中的一个具有对与所述映射相关联的所述第一存储器页面的访问权。
5.如权利要求4所述的系统,其中所述第一条目进一步包括指示与所述第一存储器页面相关联的第一迁移状态的第二状态数据。
6.如权利要求2所述的系统,其中所述第二处理单元配置为执行引用所述第一虚拟存储器地址的第二操作。
7.如权利要求6所述的系统,其中:
所述第一条目与所述第一处理单元相关联,
所述页面状态目录进一步包括与所述第一虚拟存储器地址和所述第二处理单元相关联的第二条目,并且其中所述第二条目包括与所述第一虚拟存储器地址相对应的第二映射,以及
所述第一条目包括引用所述第二映射的转发条目。
8.如权利要求2所述的系统,进一步包括第二页面状态目录,其中所述页面状态目录与第一过程相关联,并且所述第二页面状态目录与第二过程相关联。
9.如权利要求8所述的系统,其中所述第一条目与所述第一物理存储器地址相关联,包括在所述第二页面状态目录中的第二条目也与所述第一物理存储器地址相关联,并且所述第二条目包括到所述第一条目的链接。
10.一种用于经由页面状态目录管理虚拟存储器到物理存储器映射的方法,所述方法包括:
执行引用第一虚拟存储器地址的第一操作;
一经确定存储在与第一处理单元相关联的第一存储器中的第一页面表不包括与所述第一虚拟存储器地址相对应的映射,就生成第一页面故障;
经由与所述第一处理单元相关联的拷贝引擎,读取存储在第一命令队列中的一个或多个命令,以及
作为响应,将来自与第二处理单元相关联的第二存储器的第一存储器页面复制到第一存储器,
其中所述第一处理单元和所述第二处理单元包括不同的处理器类型,
其中包括在页面状态目录中的第一条目包括所述第一虚拟存储器地址到与所述第一存储器页面相关联的第一物理存储器地址的映射,并且
其中所述页面状态目录包括针对存储在所述第一存储器中的存储器页面的虚拟存储器地址到物理存储器地址的映射以及针对存储在所述第二存储器中的存储器页面的虚拟存储器地址到物理存储器地址的映射。
Applications Claiming Priority (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201361782349P | 2013-03-14 | 2013-03-14 | |
US61/782,349 | 2013-03-14 | ||
US201361800004P | 2013-03-15 | 2013-03-15 | |
US61/800,004 | 2013-03-15 | ||
US14/055,318 | 2013-10-16 | ||
US14/055,318 US9767036B2 (en) | 2013-03-14 | 2013-10-16 | Page state directory for managing unified virtual memory |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104049904A CN104049904A (zh) | 2014-09-17 |
CN104049904B true CN104049904B (zh) | 2017-07-14 |
Family
ID=51418514
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310752168.3A Active CN104049904B (zh) | 2013-03-14 | 2013-12-31 | 用于管理统一虚拟存储器的页面状态目录的系统和方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN104049904B (zh) |
DE (1) | DE102013022166B4 (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10099675B2 (en) | 2014-10-27 | 2018-10-16 | GM Global Technology Operations LLC | System and method for improving fuel economy and reducing emissions when a vehicle is decelerating |
CN111221465B (zh) * | 2018-11-23 | 2023-11-17 | 中兴通讯股份有限公司 | Dsp处理器、系统以及外部存储空间访问方法 |
CN110442389B (zh) * | 2019-08-07 | 2024-01-09 | 北京技德系统技术有限公司 | 一种多桌面环境共享使用gpu的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961840B2 (en) * | 2002-09-30 | 2005-11-01 | International Business Machines Corporation | Method and apparatus for managing a dynamic alias page table |
US7073043B2 (en) * | 2003-04-28 | 2006-07-04 | International Business Machines Corporation | Multiprocessor system supporting multiple outstanding TLBI operations per partition |
CN101916181A (zh) * | 2009-08-28 | 2010-12-15 | 威盛电子股份有限公司 | 微处理器及其执行方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6286092B1 (en) | 1999-05-12 | 2001-09-04 | Ati International Srl | Paged based memory address translation table update method and apparatus |
US7487341B2 (en) | 2006-06-29 | 2009-02-03 | Intel Corporation | Handling address translations and exceptions of a heterogeneous resource of a processor using another processor resource |
US8451281B2 (en) * | 2009-06-23 | 2013-05-28 | Intel Corporation | Shared virtual memory between a host and discrete graphics device in a computing system |
US8473717B2 (en) | 2010-02-03 | 2013-06-25 | Arm Limited | Coprocessor reset controller with queue for storing configuration information of subsequent sessions prior to completion of current session |
JP5473841B2 (ja) | 2010-09-08 | 2014-04-16 | 三菱重工業株式会社 | 中央処理演算装置、及び異常検査方法 |
-
2013
- 2013-12-29 DE DE102013022166.8A patent/DE102013022166B4/de active Active
- 2013-12-31 CN CN201310752168.3A patent/CN104049904B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6961840B2 (en) * | 2002-09-30 | 2005-11-01 | International Business Machines Corporation | Method and apparatus for managing a dynamic alias page table |
US7073043B2 (en) * | 2003-04-28 | 2006-07-04 | International Business Machines Corporation | Multiprocessor system supporting multiple outstanding TLBI operations per partition |
CN101916181A (zh) * | 2009-08-28 | 2010-12-15 | 威盛电子股份有限公司 | 微处理器及其执行方法 |
Also Published As
Publication number | Publication date |
---|---|
DE102013022166B4 (de) | 2024-04-25 |
CN104049904A (zh) | 2014-09-17 |
DE102013022166A1 (de) | 2014-09-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9830276B2 (en) | Replaying memory transactions while resolving memory access faults | |
US9767036B2 (en) | Page state directory for managing unified virtual memory | |
TWI526829B (zh) | 電腦系統、用於存取儲存裝置之方法及電腦可讀儲存媒體 | |
CN104123242B (zh) | 为本地与远程物理存储器之间的共享虚拟存储器提供硬件支持 | |
US9798487B2 (en) | Migrating pages of different sizes between heterogeneous processors | |
CN102722418B (zh) | 用于硬件锁省略(hle)的后期锁获取机制 | |
US20150006821A1 (en) | Evict on write, a management strategy for a prefetch unit and/or first level cache in a multiprocessor system with speculative execution | |
CN104508645B (zh) | 用于使用多个子锁来控制对具有读取器‑写入器锁的共享数据结构的访问的系统和方法 | |
US10146696B1 (en) | Data storage system with cluster virtual memory on non-cache-coherent cluster interconnect | |
US11741015B2 (en) | Fault buffer for tracking page faults in unified virtual memory system | |
US6950909B2 (en) | System and method for reducing contention in a multi-sectored cache | |
US9830224B2 (en) | Selective fault stalling for a GPU memory pipeline in a unified virtual memory system | |
CN104049904B (zh) | 用于管理统一虚拟存储器的页面状态目录的系统和方法 | |
TWI515564B (zh) | 管理統一虛擬記憶體的分頁狀態目錄 | |
US11237960B2 (en) | Method and apparatus for asynchronous memory write-back in a data processing system | |
CN104049951A (zh) | 在解决存储器访问故障的同时重播存储器事务 | |
CN104049905B (zh) | 在异构处理器之间迁移不同尺寸的页 | |
CN104049903A (zh) | 用于统一虚拟存储器系统的迁移方案 | |
Haria | Architecture and Software Support for Persistent and Vast Memory | |
Lee et al. | SDM: Sharing-Enabled Disaggregated Memory System with Cache Coherent Compute Express Link | |
JPH04357541A (ja) | 階層メモリ制御方式 | |
Langer | Software-based Memory-Consistency Mechanisms for Non-Coherent Many-Core Systems |
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 |