GVT对显示引擎的虚拟(2)

引用注明>> 【作者:张佩】【原文:http://www.yiiyee.cn/Blog/

  • 1. GVT对显示中断的模拟
ISR
中断能打断普通线程的执行

显示引擎定义的中断大部分都是通用型的,不同设备厂商开发的不同代产品在工作的时候,都会不断产生这些中断。比如同步中断(v-sync和h-sync)、vblank中断、扫描中断,这些中断和终端显示器对帧囊(FrameBuffer)的处理相关,在数据处理过程中不断地实时产生;以及插拔检测(hot plug detection)中断,当显示器插入或拔出Port的时候产生。显示引擎也可能会定义一些私有类型的中断,因不同的显卡设备而异,比如一些错误检测中断,其实是硬件和软件驱动之间的一种简单的通信机制。

GVT虚拟的显示设备只实现了最基本的功能,所以模拟通用型中断就足够了。实际上,GVT现在的代码只模拟了vblank和flip done两种中断,发现已经能够满足系统驱动和大部分应用软件的需求了。当然这是不够的,已经发现了一些应用软件,依赖于线扫描中断和垂直同步中断,不久的将来,GVT会陆续加入对它们的支持。理想的情况是GVT把所有的通用型显示中断都模拟好,我们不能假设形形色色的应用软件永远不会使用某种通用型中断。 继续阅读“GVT对显示引擎的虚拟(2)”

145 total views, 2 views today

GVT对显示引擎的虚拟(1)

引用注明>> 【作者:张佩】【原文:http://www.yiiyee.cn/Blog/

server-virtualization
这是一幅描绘了平台虚拟化的示意图

GVT是Intel针对集成显卡(IGD)设备实现的虚拟化方案,最近已经被成功地Upstream到了Linux内核4.10中了。所以用户只要拥有一份最新的Linux内核代码或镜像文件,就可以尝试这个很酷的显卡虚拟化功能。但GVT只是一个核心模块,剥离了和具体的系统虚拟化方案的耦合性,所以要想通过GVT来虚拟化你的显卡,还必须结合特定虚拟化平台下的适配模块。GVT本身是平台无关的,它通过一套公共的接口来抽象各种虚拟化平台的功能。

KVMGT是一起被Upstream的另一个模块,它就是在KVM(Kernel Virtual Machine)平台下GVT的适配模块。虚拟软件比如QEMU在KVM平台上,可以通过KVMGT暴露的用户层接口,来创建和维护GVT的虚拟GPU实例。将来,GVT在XEN和其它虚拟化平台下的适配模块,也将会被Upstream到Linux内核中去,不过这需要一些时间和持续的努力。 继续阅读“GVT对显示引擎的虚拟(1)”

111 total views, 2 views today

Foxdisk00-源代码编译

为了便于之后博文的行文方便,我把代码放在了下载区:[download id=”9″]。

编译器使用的是Borland C++3.1,C编译器和汇编编译器都在其中。代码中包含三个汇编文件:Loaser.asm、iMath.asm、iTimeInt.asm,必须用Tasm编译。微软的masm语法要求稍微有些不同,因此foxdisk3.01的代码没有办法直接用微软早期的DOS下编译器编译。

编译步骤很简单:

1)      安装BorlandC++3.1;

2)      进入代码文件主目录,设置Path目录;(参考我的bcccmd.bat)

3)      etrhz.exe hztable.h Global.c Setup.c iSetup.c;

4)      ehz24.exe /k hzk24k.h _HZ24STR.c;

5)      运行make;

上述步骤执行后,会自动生成foxdisk.exe。在dos下安装的时候,需要调用资源文件ifox.bmp,包含在\Rleease文件夹中。

继续阅读“Foxdisk00-源代码编译”

37 total views, 1 views today

为自己定一个小目标

我的童年有很长的时间是在外婆家度过的,那个时候,外婆的爸爸妈妈还健在—我们的方言里称呼为“老外公、老外婆”。老外婆家离外婆家大概只有3公里左右,路两旁全是一拢拢农田和纵横交错的沟渠。进村子前,有几片不大的树林点缀在村子入口,松树、茶树、香樟树,还有一些我叫不出名字的树。春夏之交的时候,栀子花开了,空气中就飘着淡淡的栀子花甜香。

老外公和老外婆已经去世多年,我已经很难记得他们的样子;去拜见他们的场景记忆也慢慢开始模糊,唯有那飘在道路旁边的栀子花香味,始终不散。把这些回忆记录下来,是我很喜欢的事情。从小养成了的这种记录习惯,我的电脑里面有各种心情记录、管理记录,以及技术开发记录。这是比较私密的个人信息,作为技术宅男,我不是很喜欢把它们发布到QQ空间以外的地方。

改变这种想法从一位很好的朋友开始。

15年7月,参加了一次集体翻译的活动,第一次见到张佩。实际上对他慕名已久,公司产品开发中有时候需要驱动开发的知识,他的大作《竹林蹊径》是案边常用参考书。

张佩说话声音洪亮、语速很快、思考很快、写代码也很快,学习新技术奇快无比,我非常佩服。我是性格比较内向的人,不知道为什么,和他却一见如故,很快就像多年的好友一样无话不谈了。

那时我准备将我的foxdisk移植到uefi上,实现自己想要的一些功能。张佩很有兴趣,我就把自己的foxdisk 3.0的代码和文档给了他,请他指正。之后我有几次上海出差,每次都会抽一些时间去见他,他建议我把平常的一些技术学习的历程用博客写下来。 继续阅读“为自己定一个小目标”

49 total views, no views today

浅论Intel GPU虚拟化实现方案GVT

引用注明>> 【作者:张佩】【原文:http://www.yiiyee.cn/Blog/

v0.3 (未完成版,慎勿转载)

kvmgt
KVMGT未upstream前的架构图

在最近的Linux内核4.10的发布中,Intel的GPU虚拟化方案(GVT)完成了代码上传,从此成为Linux内核的一部分。GVT在4.10的发布文档中,作为主要的新特性之一而被发布者隆重地介绍。在过去的两年中,我作为一名开发者,参与到了GVT的开发过程中。对此重大里程碑事件深感欣慰。将陆续写作一些文章,对Inte的GPU驱动和虚拟化实现,进行由粗入细的介绍。

我近来对于一些计算机术语,产生了一点个人趣味上的偏好,细节在此不能备述,容后专文细讲。这里就两个用惯的术语,要在文章中,做很大的习惯上的改变,读者可能会觉得很不适应。无法,我确定了要这样做,只能请读者忍耐。

术语新译
Context:境(一般译作:上下文)
Execution Context:执行境
Hardware Context: 硬境
Logic Context:拟境
buffer:囊(一般译作:缓冲区)
Ring buffer:环形囊

继续阅读“浅论Intel GPU虚拟化实现方案GVT”

236 total views, 12 views today