国产飞腾1500A处理器的显存管理优化

2017-06-05 14:15孙立明吴庆波
计算机技术与发展 2017年5期
关键词:拷贝内存指令

孙立明,吴庆波

(国防科技大学 计算机学院,湖南 长沙 410073)

国产飞腾1500A处理器的显存管理优化

孙立明,吴庆波

(国防科技大学 计算机学院,湖南 长沙 410073)

基于飞腾1500A处理器的计算机系统中,现有操作系统图形子系统主存和显卡VRAM(显存)之间拷贝图形运算数据时会产生段错误,导致图形子系统只能使用主存作为显存而不能直接使用VRAM。由于显卡访问主存比访问VRAM的速度慢很多,因此在某些场景下限制了显卡的工作效率,从而限制了图形子系统的性能。为此,提出了一种基于飞腾1500A处理器的图形系统显存管理的优化方法,让图形子系统能够访问显卡VRAM,以达到提升性能的目的。该方法把图形子系统划分为固定组件和流动组件两类。对于固定组件,采用飞腾1500A访问I/O设备的指令替换内存拷贝指令,使固定组件能够直接访问VRAM,从而将图形数据拷贝到VRAM中,以提高显卡工作效率;对于流动组件,则继续使用主存作为显存。实验结果表明,采用该管理方法后,基于飞腾1500A处理器的计算机图形显示整体性能在某些显卡中大幅提升,其中3D显示性能有数倍的提升,并且不会产生段错误;即使对2D图形大概有10%的性能下降,亦能适于运行大量3D图形应用的场景。

图形子系统;显示优化;显存;VRAM

0 引 言

国产飞腾1500A处理器是国防科大研制的自主可控国产CPU,采用ARMv8[1]指令集。飞腾1500A处理器有一个独特的特征,与其他处理器包括同样采用ARMv8指令集的处理器都不同。飞腾1500A处理器的内存访问指令分为两类,一类是普通的ld/st访存指令,可以访问所有的CPU地址空间[2];另外一类是ldp/stp指令,只能访问主存地址范围,不能访问外设地址范围。

ldp/stp指令,在访问内存时,一条指令可以携带两个64比特数据,从而在一条指令中同时传输128比特数据,而普通的ld/st指令,只携带一个数据,一条指令最多同时传输64比特数据。很显然,数据拷贝时,使用ldp/stp指令能够获得更高的传输性能。事实上,基于飞腾1500A处理器的计算机系统中的大量数据拷贝操作(如memcpy函数)基本都是调用ldp/stp指令来进行的。

基于飞腾1500A处理器的计算机系统采用的显卡是独立显卡[3],显卡上有自带的显存,称为VRAM显存。显然显卡访问VRAM显存的地址是处于外设地址范围的。显卡也可以使用系统主存作为显存,这种类型的显存称为GTT显存。显卡访问VRAM显存的速度要比访问GTT显存的速度高出很多[4],一般来说,使用VRAM显存会获得更高的显示性能。

现有操作系统中的图形子系统主要由应用层的Xorg server[5](一种图形窗口系统服务程序)、Xorg client(图形窗口系统应用程序,比如gnome桌面等)、DRI[6](3D图形程序的直接加速渲染框架,为3D[7]应用程序提供OpenGL[8]编程接口)、3D图形程序以及内核层的DRM[9]驱动组成。其中内核层的DRM为图形子系统提供显存管理、模式设置及GPU命令提交[10]等功能。图形子系统中各组成部分使用的显存由DRM统一管理,当图形应用程序或者Xorg server等需要使用显存时,向DRM申请分配显存,当显存不再使用时,也由DRM来释放。

图形子系统在工作过程中,会产生大量的从主存拷贝的图形数据到显存中的数据拷贝操作,这些数据拷贝操作有些是调用的通用的memcpy函数,有些是图形应用程序自己实现的拷贝函数。但在基于飞腾1500A处理器的计算机系统上,为了性能考虑,编译器和操作系统都会把这些拷贝操作翻译成ldp/stp指令。这时如果使用的是VRAM显存,在基于飞腾1500A处理器的计算机系统上,则会产生段错误(由于ldp/stp指令不能访问外设地址范围)。

图形子系统提供了参数,能够控制图形子系统在工作时是使用GTT显存还是VRAM显存或者VRAM显存与GTT显存同时使用。由于上述原因,图形子系统在基于飞腾1500A处理器的计算机系统只能使用GTT显存(否则会产生段错误)。由于显卡访问GTT显存速度较慢,从而导致图形子系统显示性能较差。

针对上述问题,提出了一种基于飞腾1500A处理器对显存管理的优化方法,可使图形子系统利用VRAM显存,从而提高基于飞腾1500A处理器的计算机系统的图形显示性能,且不会产生段错误。

1 基于飞腾1500A处理器的显存管理优化方法

基于飞腾1500A处理器的显存管理优化方法把图形子系统划分为两类组件:固定组件和流动组件。把图形子系统中常用的一些比较重要的组件划分为固定组件,剩余的组件划分为流动组件。对固定组件,用飞腾1500A能够访问I/O设备的指令替换内存拷贝指令,从而使固定组件能够使用VRAM。对流动组件,则依然使用主存作为显存。固定组件涵盖了图形子系统中的大部分组件,在通常情况下它们的执行时间占有整个图形子系统执行时间的绝大部分(有时甚至是100%)。因此用飞腾1500A能够访问I/O设备的指令替换内存拷贝指令,让固定组件能够利用VRAM内存,可以大大提高图形系统的性能。同时对于没有用飞腾1500A能够访问I/O设备的指令替换内存拷贝指令的流动组件,仍然使用GTT显存,所以也不会产生段错误。

1.1 图形子系统的分类

为什么要对图形子系统进行分类处理?要让基于飞腾1500A处理器的图形子系统能够访问VRAM显存,把所有的内存拷贝指令都替换成飞腾1500A能够访问I/O设备的指令不就行了吗?事实上这种方法是行不通的。

一个原因是内存拷贝操作在操作系统中是一个很基本的操作,图形子系统中会使用,拷贝图形数据时也会使用。除拷贝图形数据之外,操作系统中还有大量的数据拷贝操作,它们的使用频率比拷贝图形数据要高出很多。全部替换的话会大大降低整个系统的性能,得不偿失。

那只替换图形数据拷贝的操作不替换普通数据拷贝的操作是否可行?同样不行。因为图形软件多种多样,有些软件比如mesa,Xorg等规模庞大,分析出每个数据拷贝操作进行逐个替换是一个近乎不可能完成的操作。

另一个原因是,有很大一部分的图形应用程序是第三方软件,不可能对它们进行修改,而它们可能实现自己的数据拷贝函数,不会调用通用的数据拷贝函数。对这种图形应用程序,不可能把它们的内存拷贝指令都替换成飞腾1500A能够访问I/O设备的指令。

因此,要对图形子系统进行分类,一类可以对它们进行指令替换操作,能够使用VRAM显存,把它们命名为固定组件;另一类依然使用GTT显存,把它们命名为流动组件。

考虑图形子系统中应该把哪些组件划分为固定组件,那么剩下的就归类为流动组件。从上述可知,被划分为固定组件的程序应该具备如下几个特征:

(1)不是第三方软件,而应该是操作系统的固定组成部分。这样可以方便获取源代码并对其进行修改。这也是把它们命名为固定组件的原因。

(2)拥有大量的图形数据拷贝操作,同时没有或有少量的其他数据拷贝工作。

(3)它们应该占据系统中图形拷贝操作的绝大部分,否则不会产生明显效果。

经过筛选之后,把DRM、mesa(DRI)、Xorg server以及gnome桌面归类为固定组件,其他程序归类为流动组件。

对图形子系统分好类之后,如何在图形子系统中实现分类。

图形子系统的显存管理都是由DRM进行的。VRAM内存和GTT内存都是由DRM管理的。按使用显存类型对图形程序进行分类也是由DRM来实现。

实现方法如下:

DRM自身默认属于固定组件。

对于位于应用层的其他组件,都是通过ioctl系统调用请求DRM分配显存的。在DRM的ioctl函数中增加一条ioctl命令-FORCE_VRAM,一旦接收到用户层传来的是该命令,则强制性为其分配VRAM显存。

通过FORCE_VRAM命令,就可以划分固定组件和流动组件了。应用层程序请求显存分配时如果传递下来的是FORCE_VRAM,则属于固定组件,分配VRAM显存;如果传递的是原来的命令,则属于流动组件,分配GTT显存。

1.2 对分类组件的处理

对分好类的组件进行处理主要是对固定组件进行处理,流动组件无需特别处理。对固定组件的处理分为两点:

(1)修改向DRM请求显存分配的方式,使用FORCE_VRAM命令分配VRAM显存。

(2)用飞腾1500A能够访问I/O设备的指令替换内存拷贝指令。

对于第一点,方法如下:

在libdrm中实现一个新的显存分配函数,该函数调用ioctl系统调用携带FORCE_VRAM命令分配VRAM显存。

修改固定组件的所有显存分配代码,调用1中新实现的显存分配函数。

对于第二点,方法如下:

实现一个新动态连接库,比如命名为libkymem.so,该连接库中实现新的内存拷贝相关函数:比如把新的函数命名为kymemcpy,kymemset,kymemmove。

在这些新的函数中用普通的内存访问指令ld/st(能够访问io地址范围的指令)替换ldp/stp指令,实现内存拷贝操作。

修改固定组件中调用memcpy,memset,memmove等函数的位置,改为调用libkymem.so中的kymemcpy,kymemset,kymemmove函数。

把libkymem.so放入系统中。

进行上述两点处理后,固定组件在工作时就使用VRAM显存了,而流动组件还是保持原来的调用方式不变,因此继续使用GTT内存。固定组件修改了内存拷贝指令,而流动组件使用GTT内存,因此在内存数据拷贝时都不会产生段错误。

固定组件使用VRAM内存后,由于显卡访问VRAM显存的效率大大高于访问主存,因此显卡的工作效率有极大提升。由于固定组件在系统的工作中占据显示工作的绝大部分比例,因此基于飞腾1500A处理器的计算机系统的整个显示性能都会有明显提升。

2 实验及结果分析

基于该方法把图形子系统划分为两类组件:固定组件和流动组件。对固定组件,在飞腾1500A的银河麒麟操作系统上实现了上述方法,并在HD5450,HD7450,HD7750以及R9 270四款显卡做了对比测试,分别测试了系统的2D图形显示性能,3D图形显示性能,以及常用的OpenGL图形编程及Gtk图形编程的图形显示性能。其中,2D图形测试、3D图形测试、OpenGL图形编程、Gtk图形编程的测试用例分别是X11perf[11]、glxgears[12]、glmark2[13]、Gtkperf。

图形测试结果如图1~6所示(X11perf由于测试结果过多,选取了比较有代表性的画点,画100像素线段及画100像素椭圆的测试数据)。

图1 glxgears的测试结果(单位:FPS)

通过测试结果可以看出,该优化方法并不能全面提高2D和3D的图形显示性能,其中2D图形性能还稍微有些下降,3D图形性能有明显提升(大概有几倍)。在体现图形系统的综合性能的Gtkperf测试中,对有些显卡的图形性能有明显提升,而glmark2测试中图形系统性能则有大幅提升。主要是因为在2D图形环境下,显卡的图形运算压力并不大,而CPU会有大量的图形数据处理工作,因此CPU的图形数据处理速度就成为瓶颈,CPU每次要把数据写入VRAM相比直接写入内存会慢很多,因此性能有所损失。而在3D图形环境下,图形运算压力大,而CPU可能经常处于空闲状态,显卡经常需要等待数据到来,因此从VRAM取数据可以提升性能。

图2 glmark2的测试结果

图3 X11perf画点的测试结果(单位:个/s)

图4 X11perf画100像素线段的测试结果(单位:个/s)

图5 x11perf画100像素椭圆的测试结果(单位:个/s)

图6 Gtkperf的测试结果

综合来看,该优化方法在某些显卡下能够提升图形子系统的整体性能,对3D图形的性能有几倍提升,而在2D图形环境下的性能损失在10%左右,是可以接受的。因此该方法特别适于运行大量3D图形应用的场合。

3 结束语

基于飞腾1500A处理器的特征,针对当前采用飞腾1500A处理器的计算机系统图形子系统不能使用VRAM显存的问题,提出了一种采用飞腾1500A处理器的计算机系统显存优化管理方法。该方法将图形子系统分成固定组件和流动组件两类,在飞腾1500A处理器中以能访问IO地址范围的指令替换内存拷贝指令,使固定组件访问VRAM显存,从而实现显示功能。实验结果表明,该方法显著提升了采用飞腾1500A处理器的计算机系统图形显示综合性能,特别是数倍提高了3D显示性能,尤其适用于运行大量3D图形应用的场合,且不会产生段错误。不足之处在于2D图形应用的性能会下降10%,但在当前大量3D图形应用的条件下是可以接受的。

[1] Rusitoru R.ARMv8 micro-architectural design space exploration for high performance computing using fractional factorial[C]//International workshop on performance modeling.[s.l.]:[s.n.],2015.

[2] Jundt A,Cauble-Chantrenne A,Tiwari A,et al.Compute bottlenecks on the new 64-bit ARM[C]//Proceedings of the 3rd international workshop on energy efficient supercomputing.[s.l.]:[s.n.],2015.

[3] 赵 刚.计算机图形显示加速及实现技术[M].北京:电子工业出版社,2009.

[4] Carr N A,Hall J D,Hart J C.The ray engine[C]//Proceedings of ACM SIGGRAPH/Eurographics graphics hardware.[s.l.]:[s.n.],2002.

[5] 万 华.基于X Window图形分层显示的实现[J].雷达科学与技术,2000(1):26-29.

[6] Weo M,Neider J,Davis T.OpenGL programming guide[M].CA,USA:Silicon Graphics Inc.,1997.

[7] 吴恩华.图形处理器用于通用计算的技术、现状及其挑战[J].软件学报,2004,15(10):1493-1504.

[8] McReynolds T,Blythe D.Advanced graphics programming using OpenGL[M].San Francisco,CA,USA:Morgan Kaufmann Publishers Inc.,2005.

[9] Miller K,Przybyla D,Pegah M.Soothing the many-headed beast:improving the rendering process in the world of 3D animation[C]//SIGUCCS'04.[s.l.]:[s.n.],2004.

[10] 孙家广.计算机图形学[M].第3版.北京:清华大学出版社,1988.

[11] 贾志刚.精通OpenGL[M].北京:电子工业出版社,1998.

[12] 尚 游.OpenGL高级图形编程指南[M].哈尔滨:哈尔滨工业大学出版社,1999.

[13] Sugita K.Performance evaluation of programmable graphics hardware for image filtering and stereo matching[C]//Proceedings of the ACM symposium on virtual reality software and technology.[s.l.]:ACM,2003.

Video Memory Management Optimization of Domestic Phytium 1500A Processor

SUN Li-ming,WU Qing-bo

(School of Computer Science,National University of Defense Technology,Changsha 410073,China)

In phytium 1500A processor-based computer system,the existing operating system graphics subsystem could produce segment errors when copying data between main memory and graphics card VRAM (video memory),which causes that the graphics subsystem can only use main memory as video memory and cannot be used VRAM directly.Because main memory access is so slower than accessing VRAM directly by graphics card that the problem in some scenes limits the efficiency of the graphics card,thereby limiting the performance of the graphics subsystem.Therefore,an optimization method of graphics system memory management with the Phytium 1500A processor has been presented,which permits the system equipped with graphics card VRAM,for the purpose of performance promotion.The graphics subsystem is composed of two types of components,fixed and mobile components.In the former of which the instructions of I/O devices can be used to replace memory copy instructions with Phytium 1500A processor by using VRAM which could copy the pattern data to the VRAM for efficiency promotion of the graphics card;in the latter of which the main memory can be used as video memory.Experimental results show that the Phytium 1500A processor-based computer graphics display performance has been significantly improved,wherein the 3D display performance has been promoted several times higher without mistake and that even if there is about 10% performance degradation for 2D graphics,the VRAM is also suitable for a large number of scenes with 3D graphics applications.

graphics subsystem;display optimization;video memory;VRAM

2016-06-17

2016-09-22 网络出版时间:2017-03-13

国家“863”高技术发展计划项目(2013AA01A212)

孙立明(1988-),男,硕士,研究方向为操作系统。

http://kns.cnki.net/kcms/detail/61.1450.TP.20170313.1547.096.html

TP39

A

1673-629X(2017)05-0006-04

10.3969/j.issn.1673-629X.2017.05.002

猜你喜欢
拷贝内存指令
《单一形状固定循环指令G90车外圆仿真》教案设计
笔记本内存已经在涨价了,但幅度不大,升级扩容无须等待
“春夏秋冬”的内存
唐氏综合征是因为“拷贝”走样了
文化拷贝应该如何“拷”
文化拷贝应该如何“拷”
内存搭配DDR4、DDR3L还是DDR3?
中断与跳转操作对指令串的影响
一种基于滑窗的余度指令判别算法
MAC指令推动制冷剂行业发展