发明内容
本发明的目的在于克服上述技术不足,提出一种基于可见显存交换区的GPU不可见显存管理方法及系统,解决现有主存空间的大量占用,操作系统性能受到严重影响的问题。
为达到上述技术目的,本发明的技术方案第一方面提供一种基于可见显存交换区的GPU不可见显存管理方法,其包括如下步骤:
在可见显存区域分配一段固定的连续区域用作数据交换区;
显卡驱动管理数据交换区与不可见显存空间的对应关系,当CPU需要访问不可见显存空间时,显卡驱动将不可见显存空间的数据自动同步数据到数据交换区,CPU通过对数据交换区的直接映射来实现对不可见显存空间的间接访问。
本发明第二方面提供一种基于可见显存交换区的GPU不可见显存管理系统,其包括如下功能模块:
交换区分配模块,用于在可见显存区域分配一段固定的连续区域用作数据交换区;
不可见显存访问模块,用于显卡驱动管理数据交换区与不可见显存空间的对应关系,当CPU需要访问不可见显存空间时,显卡驱动将不可见显存空间的数据自动同步数据到数据交换区,CPU通过对数据交换区的直接映射来实现对不可见显存空间的间接访问。
本发明第三方面提供一种服务器,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述一种基于可见显存交换区的GPU不可见显存管理方法的步骤。
本发明第四方面提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述一种基于可见显存交换区的GPU不可见显存管理方法的步骤。
与现有技术相比,本发明通过在可见显存区域预先分配一块连续区域作为高速数据交换区,利用GPU内部DMA控制器进行快速数据交换,实现对独立显卡不可见显存的快速访问;另外还提供一套不可见显存区域的显存管理对象,对不可见显存区域进行管理;当对不可见显存区进行数据操作时,利用虚地址的缺页中断机制,对数据交换区与不可见显存区对应关系进行动态透明化管理;同时显卡驱动的同步操作确保交换区数据与不可见显存空间数据的同步,确保数据的完整性。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,本发明的实施例提供了一种基于可见显存交换区的GPU不可见显存管理方法,所述方法包括如下步骤:
S1、在可见显存区域分配一段固定的连续区域用作数据交换区。
由于主控CPU直接访问可见显存空间,因此如图2所示,本发明通过在拥有独立显存的显卡的可见显存空间内,划出一小块固定显存区域,用作独立显卡不可见显存空间的数据交换区,主控CPU可直接访问可见显存数据交换区,显卡驱动同时管理可见显存空间和不可见显存空间,如图3所示,当GPU应用申请显存空间时,优先从可见显存空间分配显存,当可见显存空间分配超过某个特定比例时,如超过80%时,显卡驱动将从不可见显存空间分配显存。由于CPU无法直接读写不可见显存,显卡驱动将预留的可见显存区域充当不可见显存空间的高速数据交换区,CPU直接访问该高速数据交换区。具体的,在显卡驱动加载时,通过PCI设备资源对象获取可见显存区域的物理地址,在高地址端预留一段区域用于数据交换区,如预留32MB空间。
S2、显卡驱动管理数据交换区与不可见显存空间的对应关系,当CPU需要访问不可见显存空间时,显卡驱动将不可见显存空间的数据自动同步数据到数据交换区,CPU通过对数据交换区的直接映射来实现对不可见显存空间的间接访问。
当CPU需要访问不可见显存空间时,CPU实际只直接访问数据交换区,由数据同步机制完成数据交换区与不可见显存空间对应区域的数据同步,最终实现CPU对不可见显存区数据的读写访问。
显卡驱动将不可见显存空间的数据自动同步数据到数据交换区是指显卡驱动将数据交换区域数据进行换入和换出操作,具体的,当交换区域数据需要换入时,显卡驱动启动GPU的DMA将不可见显存区域数据搬移到交换区域,实现用户通过虚拟地址从不可见显存区域读出数据。当交换区域数据需要换出时,显卡驱动启动GPU的DMA将交换区域数据搬移到不可见显存区域,实现用户通过虚拟地址间接写入数据到了不可见显存区域。
且所述数据交换区域数据进行换入和换出操作,是指在数据交换区需要映射到新的不可见显存页时,将该数据同步到原映射的不可见显存空间的对应中,并更新该数据交换区原被映射虚拟地址的页表状态为缺页状态。数据交换区的换入和换出操作是在不可见显存虚拟地址空间的缺页中断处理函数中完成。
具体的,应用程序在使用不可见显存区域时,通过显卡驱动接口分配一段虚拟地址空间,采用虚拟地址的缺页中断机制分配不可见显存区域的实际物理页,记录该地址的偏移量,并将该物理页与交换区域“空闲”页关联,显卡驱动修改虚拟地址的页表指向交换区域的物理页地址;例如当分配的虚拟地址空间未建立页表时,将产生缺页中断,显卡驱动需要标记该页对应的物理页面,并映射到交换区域中的页框中,同时通过同步机制对交换区域与不可见显存区域进行必要的数据交换,对于初次映射的不可见显存空间,则不需要将不可见显存数据导入交换区域。
当交换区域数据需要换出时,通过GPU的DMA对显存数据进行快速搬移,同步到不可见显存区域,并将对应的虚拟地址空间页表设置为缺页状态;当执行GPU同步操作时,将交换区已更新数据页同步到不可见显存空间中,确保显存数据在GPU执行时的一致性。
在显卡驱动将数据交换区域数据进行换入和换出操作之前,需要先执行数据交换区域与不可见显存区之间的同步操作,所述同步操作是指将数据交换区内经过修改的数据全部同步到不可见显存空间。
数据交换区与不可见显存空间的数据搬移由GPU控制单元实现,具体是通过GPU内部的DMA控制器实现数据交换区页框与不可见显存空间对应页框数据的同步。
本发明所述基于可见显存交换区的GPU不可见显存管理方法,其通过在可见显存区域预先分配一块连续区域作为高速数据交换区,利用GPU内部DMA控制器进行快速数据交换,实现对独立显卡不可见显存的快速访问与管理;另外还提供一套不可见显存区域的显存管理对象,对不可见显存区域进行管理;当对不可见显存区进行数据操作时,利用虚地址的缺页中断机制,对数据交换区与不可见显存区对应关系进行动态透明化管理;由于GPU显存带宽通常非常大,数据交换速度会非常快,当需要执行数据同步操作时,调用GPU的DMA控制器快速进行数据页交换;同时显卡驱动的同步操作确保交换区数据与不可见显存空间数据的同步,确保数据的完整性。本发明所述基于可见显存交换区的GPU不可见显存管理方法的操作步骤如图4所示,图4中的具体步骤流程如下:
步骤1:通过虚拟地址空间访问不可见显存时,系统内核通过虚拟地址页表项Present标志位判断虚拟地址是否为缺页状态,如果Present为0,则进入步骤9缺页中断处理,否则进入步骤2步骤;
步骤2:进行正常的数据读写访问操作,此时实际操作数据位于交换区(类似cache);
步骤3:显卡驱动程序可能主动执行同步操作,因为GPU执行2D/3D操作时,需要访问不可见显存区,需要执行同步操作,将交换区域的数据同步到不可见显存区,确保数据的一致性;
步骤4:交换页是否被换出,如果被换出,则执行步骤7同步交换数据到不可见显存区,否则回到步骤2可继续对当前交换页进行读写访问;
步骤5:执行数据同步前,通常都需要判断交换区数据是否存在修改,即交换页是否为“脏”页,如果已经修改,则需要同步到不可见显存区;
步骤6:通过DMA将交换页框数据同步到不可见显存页框,实现数据的一致性;
步骤7:当交换区页面被换出时,需要同步交换区数据到不可见显存区,因为该交换页将会被映射到新的不可见显存页框。当交换页数据没有修改时,不需要进行数据搬移,但当交换页数据存在修改时,需要通过DMA将交换区页框数据更新到不可见显存对应页框中;
步骤8:交换页被换出时,需要更新对应不可见显存虚拟地址页表项为缺页状态;
步骤9:当待访问的显存虚拟地址为缺页状态时,系统内核将调用缺页中断处理例程,将分配交换区页框与当前虚拟地址页面进行映射,虚拟地址页面将映射到新分配的交换区页框中;
步骤10:交换区存在空闲页框时,将直接从空闲页框中分配交换页框,否则将换出旧的交换页框给当前显存页使用;
步骤11:建立显存页表,映射显存虚拟地址到交换区页框中;
步骤12:如果不可见显存区页框的数据有意义(不是新分配的页框),则需要从不可见显存区读取原始数据到交换页框;
步骤13:通过GPU内部的DMA实现数据的快速拷贝,实现不可见显存区数据与交换页框数据的同步;
步骤14:通过老化算法选择最不常用的交换页框,换出该页框;
步骤15:换出交换页框时,需要将交换区数据同步到不可见显存区,同步骤7步骤;
步骤16:交换页被换出时,需要更新对应不可见显存虚拟地址页表项为缺页状态,同步骤8步骤。
如图5所示,本发明实施例还公开了一种基于可见显存交换区的GPU不可见显存管理系统,其包括如下功能模块:
交换区分配模块10,用于在可见显存区域分配一段固定的连续区域用作数据交换区;
不可见显存访问模块20,用于显卡驱动管理数据交换区与不可见显存空间的对应关系,当CPU需要访问不可见显存空间时,显卡驱动将不可见显存空间的数据自动同步数据到数据交换区,CPU通过对数据交换区的直接映射来实现对不可见显存空间的间接访问。
本实施例一种基于可见显存交换区的GPU不可见显存管理系统的执行方式与上述基于可见显存交换区的GPU不可见显存管理方法基本相同,故不作详细赘述。
本实施例服务器为提供计算服务的设备,通常指具有较高计算能力,通过网络提供给多个消费者使用的计算机。该实施例的服务器包括:存储器、处理器以及系统总线,所述存储器包括存储其上的可运行的程序,本领域技术人员可以理解,本实施例的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据终端的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
在存储器上包含一种基于可见显存交换区的GPU不可见显存管理方法的可运行程序,所述可运行程序可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器中,并由处理器执行,以完成信息的获取及实现过程,所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述服务器中的执行过程。例如,所述计算机程序可以被分割为交换区分配模块以及不可见显存访问模块。
处理器是服务器的控制中心,利用各种接口和线路连接整个终端设备的各个部分,通过运行或执行存储在存储器内的软件程序和/或模块,以及调用存储在存储器内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器可包括一个或多个处理单元;优选的,处理器可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器中。
系统总线是用来连接计算机内部各功能部件,可以传送数据信息、地址信息、控制信息,其种类可以是例如PCI总线、ISA总线、VESA总线等。处理器的指令通过总线传递至存储器,存储器反馈数据给处理器,系统总线负责处理器与存储器之间的数据、指令交互。当然系统总线还可以接入其他设备,例如网络接口、显示设备等。
所述服务器应至少包括CPU、芯片组、内存、磁盘系统等,其他构成部件在此不再赘述。
在本发明实施例中,该终端所包括的处理器执行的可运行程序具体为:一种基于可见显存交换区的GPU不可见显存管理方法,其包括如下步骤:
在可见显存区域分配一段固定的连续区域用作数据交换区;
显卡驱动管理数据交换区与不可见显存空间的对应关系,当CPU需要访问不可见显存空间时,显卡驱动将不可见显存空间的数据自动同步数据到数据交换区,CPU通过对数据交换区的直接映射来实现对不可见显存空间的间接访问。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各实施例的模块、单元和/或方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。