本发明专利技术涉及一种在Linux操作系统下,针对Xorg图形服务器在帧缓存设备上的多核CPU显示优化技术。该技术建立了基于二维划分的分屏方法,并为每一个子屏幕绑定一个子线程。所有的图形绘制操作将打包成任务,加入各个子线程的就绪队列中,由各自所在子屏幕绑定的子线程完成绘制。本发明专利技术可以使Xorg图形绘制任务并行完成,提高图形绘制的效率。任务队列采用双向条件等待设计,任务队列为空时子线程将处于等待状态,任务队列超过设定上限时主线程将协助过载子线程完成溢出任务,实现负载均衡。
Multi core CPU frame buffer display optimization method based on split screen
The invention relates to a multi-core CPU display optimization technique for a Xorg graphics server in a Linux operating system. In this technique, a partition method based on two dimensional partition is established, and a sub thread is bound for each sub screen. All graphics rendering operations will be packaged into tasks, to join the various threads in the ready queue, by their respective sub screen binding to complete the sub thread drawing. The invention can complete the parallel task of Xorg drawing, and improve the efficiency of drawing. The task queue using two-way conditional waiting design, space-time sub thread will wait for the task queue, task queue exceeds the set limit when the main thread will assist the overload sub thread to complete overflow task, achieve load balancing.
【技术实现步骤摘要】
本专利技术涉及图形显示技术,尤其是涉及一种在Linux操作系统下,针对Xorg图形服务器在帧缓存设备上的多核CPU显示优化技术。
技术介绍
Xorg图形服务器起源于上世纪80年代初,是Unix/Linux系统上最基本的图形交互系统,Xorg图形服务器采用Client/Server设计思想,本身是一个运行于用户态的系统服务进程,主要处理图形界面下用户的输入和输出,并根据用户程序的请求在显示屏幕上绘制各种基本图形,例如矩形、圆型、椭圆等基本操作。帧缓存设备是Xorg图形显示设备的一种抽象,允许应用程序通过一种抽象和统一的接口访问图形显示设备,这样软件就不必了解底层硬件的细节。帧缓存设备通常对应内存或者GPU上显存的一部分存储空间,这部分空间内放置的数据恰好对应屏幕上显示的一帧图像,向帧缓存设备写入数据就会立即显示在屏幕上面。由于帧缓存设备使用简单高效,所以在嵌入式领域被广泛使用。但对帧缓存设备的操作一般仅由CPU发起和完成,重负载情况下会大量占用CPU时间。一方面,对帧缓存设备的操作一般仅由CPU发起和完成,由于帧缓存设备接口简单统一,对于图形显示设备的硬件要求低,因而被广泛应用在嵌入式领域。同时,由于很多现代CPU指令集中也逐步加入了支持多媒体和图形图像处理的SIMD指令,例如Intel指令集中的MMX指令和SSE指令,AMD指令集中的3DNow!指令,ARM指令集中的NEON指令等,使得很多现代CPU在图形图像处理方面也有长足进步。另外,由于业界的GPU大厂商如Nvidia、AMD、ARM等都不完全开放GPU驱动源码和硬件接口协议,导致Linux桌面上的GPU驱动发展相对滞后。这样在某些场景中,Xorg在帧缓存设备上的性能甚至超过Xorg在开源GPU驱动上的性能。另一方面,随着微电子技术的快速发展,由于功耗急剧增加、微体系结构的复杂度难以控制、量子物理效应,以及程序中指令级并行性的有限性等原因,单核微处理器已经很难持续依靠提高频率和开发指令级并行性(ILP,Instruction Level Parallelism)来继续提高性能了。目前微处理器的发展趋势以片上多核(CMP)为代表,即在同一块芯片上集成多个相对较为简单的核心,依靠多核协同工作提高性能。例如目前Intel的Skylake架构至强Xeon处理器最多支持28核。Intel代号Knights Landing的新一代Xeon Phi处理器,具备惊人的76个X86核心。即使在手机芯片领域,联发科都要推出10核心的Helio X20了。而提高多核CPU的性能,主要依靠开发线程级并行(TLP,Thread Level Parallelism)。即在多核之间同时并行处理数千条以上规模的指令序列,才能有效弥补核间通讯与同步的开销。要充分发挥多核CPU的性能,必须对现有的单线程应用程序进行并行化改造。目前包括嵌入式CPU和手机上使用的CPU,绝大多数CPU都采用多核CPU设计,即每个CPU都具备2-8个核心,可以各自相对独立的工作。但现在的Xorg图形服务器没有采用多线程的设计思想,仍旧只能在单一CPU核心上工作。当使用帧缓存设备用于显示图形时,可能造成某一CPU核心负载过重,而其他CPU核心相对空闲的情况发生。这将大大降低多核CPU的利用效率,也无法发挥出多核CPU全部核心的性能,导致Xorg图形服务器效率低下。
技术实现思路
本专利技术提出了一种在Linux操作系统下,通过多线程优化的方法,解决Xorg图形服务器的帧缓存设备在多核CPU上绘制图形时,仅使用CPU中的某一个核心而不能发挥CPU全部核心性能的问题,可以显著提高Xorg图形服务器帧缓存设备的性能。本专利技术的技术方案是:一种基于分屏的多核CPU帧缓存显示优化方法,其特征在于,将Xorg图形服务器的屏幕分别沿X轴均分成m份,再沿Y轴均分成n份,共将整个屏幕分成m*n个子屏幕,为每一个子屏幕创建并绑定一个子线程;再由主线程将图形绘制参数打包成任务,并根据图形中心所在的子屏幕,交给相应绑定的子线程绘制。具体的,对所述的任务建立了带有互斥锁的子线程私有任务队列,主线程将图形绘制任务加入到相应的子线程的私有任务队列中,子线程从其私有任务队列中依次取出图形绘制任务并根据任务参数完成绘制。具体的,所述主线程和所述子线程间通过互斥锁和双向条件变量实现多线程间的任务弹出和加入功能,当任务队列中没有任务时,所有请求从任务队列中弹出任务的子线程将等待,当有至少一个任务加入任务队列时,所有等待弹出任务的子线程将被全部唤醒并将至少有一个子线程获得一个队列头部的任务;当队列缓冲区满的时候,所有请求向队列中加入任务的子线程将等待,当有至少一个任务被弹出任务队列时,所有等待加入任务的子线程将被全部唤醒并将至少有一个子线程可以向队列尾部加入至少一个任务。具体的,所述子线程具备就绪和运行两个私有队列。具体的,所述主线程和所述子线程之间的负载均衡,当某子线程的任务队列长度超过设定值后,主线程将从超过设定值的子线程的任务队列中弹出一定数量的任务,并由主线程将这些任务完成。本专利技术具有以下技术效果:在Linux操作系统上,Xorg的帧缓存设备在多核CPU(假定N核心)上绘制基本图形,可以获得比较接近于N倍的性能提高。性能的提高可以使用x11perf–rect100标准性能测试工具进行以矩形填充为代表的测试。在一台商用DELL OPTIPLEX 3010台式机(4核心,4G内存,操作系统采用Ubuntu 14.10,内核为3.16.0)上测试,x11perf–rect100在帧缓存设备上获得的加速比最大为2.43。附图说明图1为Xorg图形服务器主事件循环示意图;图2为帧缓存设备和GPU硬件加速示意图,(a)为帧缓存设备(b)为GPU硬件加速;图3为分屏算法示意图;图4为任务队列示意图;图5为主线程算法流程图;图6为子线程算法流程图;图7为Process处理函数流程图。具体实施方式首先,本专利技术在算法上,将Xorg图形服务器的屏幕按照X轴和Y轴均分为相等面积的若干子屏幕,为每一个子屏幕创建并绑定一个子线程。各种图形绘制任务,如填充矩形、填充椭圆等,根据其所在的子屏幕分配给绑定的子线程,并由该子线程负责绘制。这样多个子线程同时工作,就可以成倍加速帧缓存设备的绘制性能。其次,本专利技术设计了用于生产、分配和消费任务的任务队列。1)根据单生产者多消费者模型,建立了带有互斥锁的子线程私有任务队列,主线程将图形绘制任务加入到相应的子线程的私有任务队列中,子线程从其私有任务队列中依次取出图形绘制任务并根据任务参数完成绘制。2)主子线程间通过互斥锁和双向条件变量实现多线程间的任务弹出和加入功能。当任务队列中没有任务时,所有请求从任务队列中弹出任务的子线程将等待,当有至少一个任务加入任务队列时,所有等待弹出任务的子线程将被全部唤醒并将至少有一个子线程获得一个队列头部的任务。类似的,当队列缓冲区满的时候,所有请求向队列中加入任务的子线程将等待,当有至少一个任务被弹出任务队列时,所有等待加入任务的子线程将被全部唤醒并将至少有一个子线程可以向队列尾部加入至少一个任务。3)每个子线程具备就绪和运行两个私有队列。当主线程独占某个子线程A的就绪队列并向就绪队列中添加本文档来自技高网...
【技术保护点】
一种基于分屏的多核CPU帧缓存显示优化方法,其特征在于,将Xorg图形服务器的屏幕分别沿X轴均分成m份,再沿Y轴均分成n份,共将整个屏幕分成m*n个子屏幕,为每一个子屏幕创建并绑定一个子线程;再由主线程将图形绘制参数打包成任务,并根据图形中心所在的子屏幕,交给相应绑定的子线程绘制。
【技术特征摘要】
1.一种基于分屏的多核CPU帧缓存显示优化方法,其特征在于,将Xorg图形服务器的屏幕分别沿X轴均分成m份,再沿Y轴均分成n份,共将整个屏幕分成m*n个子屏幕,为每一个子屏幕创建并绑定一个子线程;再由主线程将图形绘制参数打包成任务,并根据图形中心所在的子屏幕,交给相应绑定的子线程绘制。2.如权利要求1所述的一种基于分屏的多核CPU帧缓存显示优化方法,其特征在于,对所述任务建立了带有互斥锁的子线程私有任务队列,主线程将图形绘制任务加入到相应的子线程的私有任务队列中,子线程从其私有任务队列中依次取出图形绘制任务并根据任务参数完成绘制。3.如权利要求2所述的一种基于分屏的多核CPU帧缓存显示优化方法,其特征在于,所述主线程和所述子线程间通过互斥锁和双向条件变量实现多线程间的任务弹出和加入功能,当任务队列...
【专利技术属性】
技术研发人员:高珑,戴华东,阳国贵,任怡,汪黎,董攀,张毅,
申请(专利权)人:中国人民解放军国防科学技术大学,
类型:发明
国别省市:湖南;43
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。