Posts Tagged ‘虚拟化 Virtulization’

什麼是敏感指令

1974年,Popek和Goldberg在美國电脑協會的通訊期刊上發表了一篇論文"虛擬化第三代架構的一般性要求"(Formal Requirements for Virtualizable Third Generation Architectures)。在這篇文章中,提出了敏感指令的概念。

敏感指令(Sensitive Instructions)的定義: 敏感指令是這樣一組指令,這些指令的行為取決於指令執行時處理器的工作模式,以及指令在記憶體中的位置。

——-

對敏感指令的處理是虛擬化技術的一個關鍵點。在用戶態執行的敏感指令如果總會造成陷入(always generates a trap),這樣的敏感指令也屬於特權 指令。在不使用Wmware提出的動態二進制翻譯機制的情況下,除非所有的敏感指令都是特權指令,虛擬機管理程式才能保證正確運行。換言之,如果某種處理器架構的所有的敏感指令都是特權指令的一個子集,我們就可以說這種處理器架構是可虛擬化的。在這種情況下,我們就可以肜經典的“陷入後模擬“(trap-and-emulate)的方法實現虛擬化。按照這個定義,在嵌入式工業中最常見的ARM架構則不是可虛擬化的,因為ARM的敏感指令有些是特權指令,有些則不是。

原文 from the paper "KVM for ARM" by Christoffer Dall and Jason Nieh, Columbia University:Popek and Goldberg define sensitive instructions as the group of instructions where the effect of their execution depends on the mode of the processor or the location of the instruction in physical memory. A sensitive instruction is also privileged if it always generates a trap, when executed in user mode. The VMM can only guarantee correct execution without the use of dynamic translation if all sensitive instructions are also privileged. In other words, an architecture is virtualizable if and only if the set of sensitive instrucctions is a subset of the seet of privileged instructions. If that is the case, the VMM can be implemented using a classic trap-and-emulate solution. Unfortunately, ARM is not virtualizable as the architecture defines both sensitive privileged instructions and sensitive non-privileged instructions.

blog.ykyi.net 翻译

Be the first to comment - What do you think?  Posted by zausiu - June 21, 2012 at 16:20

Categories: Virtualization   Tags: ,

为什么要虚拟化

如今,虚拟化是炙手可热的一个高频词。一些质疑虚拟化的人经常会问:我们为什么要搞虚拟化呢,计算机硬件变得越来越便宜了啊!另一方面,一些痴迷虚拟化技术的狂人们在他们的桌式机上用虚拟机运行着四五个操作系统。他们或许也有同样的疑问。仅管他们看着虚拟机里旧式操作系统,模拟出的旧式硬件,觉得非常爽非常有成就感。但是他们却不太解释得清楚究竟为什么需要虚拟化技术。那么,这篇文章将要告诉你我们需要虚拟化技术的原因。

整合 Consolidation:

使用虚拟化技术的最常见原因是需要整合:把多台机器的工作负载全部整合到同一台机器上面。在更少的物理机器上运行更多的虚拟机。但是你肯定要问:计算机已经越来越便宜了呀。没错,计算机越来越便宜了。但是如果机器非常多的话,这个价格你是绝对不能忽略的。

典型的数据中心 A Typical(full) data center

让我们来看一看当今世界的数据中心。如今的数据中心里急缺存放机器的空间,房子里满满的塞满了机器,你找不到更多的地方来添置计算机或空调之类的设施。空间利用率已经接近极限了。但是,大多数机器的资源利用率却非常地低。大概平均只有10-20%的的资源利用率。简言之,数据中心的物理空间已经饱合,但是物理机器的使用能力确远远没有利用足够。那么,如果数据中心要承担多更的工作负载,你会再建一个数据中心呢还是想办法把没有利用好的资源利用起来。

只有数据中心还有空间让你添置机器,当然多加一台机器就相当容易的解决问题了。但无论如论你放不上新的机器的时候,你应该会有很大的麻烦说服BOSS新建一个数据中心。另外一个大问题是,即使BOSS答应新建一个数据中心来解决问题,但是巨大的电力供应从哪里来呢。一个一千万瓦功率的数据中心不是说接入电网就可以接入电网的。你或许还要说服电网的领导批准提升电网的供电能力。

虚拟化是解决这个问题的最佳办法。用虚拟化把所以机器的性能都利用起来吧!

隔离硬件(Hardware Isolation)

硬件的性能每个月都在快速提高。但是,当我们把工作负载转移到一台新的服务器的时候,我们还需要先在裸机上安装操作系统,然后再配置各种软件环境,再把所有的数据转移到这台新服务器上来。忙到最后我们还要心惊肉跳的祈祷一切顺利!

如果使用虚拟化,你就不必这么麻烦了,因为不再直接与硬件层交互。你只需要在新的机器上部署好虚拟环境,再把虚拟机整个移过来。不需要再额外配置什么鬼东西,因为配置就在虚拟机里面,你已经把虚拟机整个搬来了。

历史遗留的旧操作系统(Legacy Operating System)

计算机工业走了这么多年,碰到要维护旧的操作系统并不鲜见。不幸的是,你有一个致关重要的程序只能够在这个恐龙级别的操作系统下运行。但大多数老旧的操作系统不能够在新的硬件上运行呀,你又没有办法再配置一台旧硬件的机器。

解决方案就是使用虚拟化。比如Vmware的Binary rewriting,或者Xen又或者KVM都可以。工作原理则是虚拟层模拟了简单的硬件,从你的旧操作系统看过去,多核CPU变成了老旧操作系统支持的旧时代CPU,当然频率却变快了。多核,ACPI设备发现,中断路由,支持10G以太网,支持SATA都不会成为你运行旧操作系统的障碍,因为虚拟层(Virtualization Layer)!

当然了,虚拟化本身会占用一些性能。但是因为采用了虚拟化,你才能在非常快速的新硬件上运行旧操作系统,这样得到的效率提高要远远高于在原生态支持旧操作系统的旧硬件上运行。因此,还为你节省了电费。

测试(Testing)

不管你是学习软件开发的在校学生,还是大银行的首席信息官,你一定缺少足够多的测试硬件吧。

虚拟化可以解决这一问题。在虚拟机上测试新发布的Fedora Rawhide或者Debian Unstable先,而不是直接格掉机器安装。还能给你的开发团队一把虚拟机,让每人一台虚拟机想测试什么就测试什么。

维护(Maintenace)

有了虚拟化,能方便很多方面的维护。

比如使用即时迁移技术,像Vmware的vmotion,Xen的Live Migration,你可以在保持虚拟机上的操作系统正常工作的情况下把虚拟机从一台物理机器移动到另一台物理机器。这项技术确实非常有用啊,不仅仅可以用来在你的朋友面前炫燿。

还有很多情况,你可以使用到即时迁移技术。比如物理机的硬件故障。有一台机器的CPU风扇坏了,CPU的保护系统自动启用使用CPU工作在一个非常慢的速度。那么你就可以把虚拟机即时迁移到另一台健康的机器上,然后修理那台坏的机器而不致于产生Downtime。又如,某台虚拟机的工作负载越来越大,那么你可以这台虚拟机所在的物理机上另外一些虚拟机器迁移到其它物理机上,为这台需要更多资源的虚拟机提供更多支持。有时候你需要升级某台机器的硬件,那么先把这台机器上所有的虚拟机即时迁移到其它机器,再开始你的硬件升级工作,还是没有任何Downtime。酷毙了,是吗?

节省能源(Power Saveing)

举个例子,你有100台服务器运行着各种各样的100个服务程序。但每台服务器的负载只有不到50%,那么你可以用50台物理机器虚拟出100台虚拟机运行100个服务程序。一下子节省了50%的电力,不是吗?想想,一个功率是一千万瓦的数据中心如果能节省50%的电力,这是个多么了不起的数字啊!为你节省了电费钱,还为对抗全球变暖做出了贡献。

安全和性能隔离(Security and performance isolation)

如果你采用虚拟机把不同的程序运行在不同的虚拟机里面,那么如果其中有一个程序出错,吃光了所有的内存,它也不至于影响其它程序。因为其它程序运行在不同的虚拟机里,它们仍然运行得很好,一点都不会受到那个出错程序的影响。如果这些程序运行在同一个OS下,那情况就不妙了。

一个相似的情况下,如果有一台虚拟机被入侵者攻陷,那么入侵者仅仅只控制了这一台虚拟机,暂时不能对其它虚拟机造成直接威胁。当然,这些虚拟机应该相互隔离的很好,每台虚拟机都运行着自己的内核,大多数虚拟化技术都是这样做的。但有一种虚拟化技术叫做容器技术(Container Technoloties),如Linux VServer, Virtuozzo/OpenVZ和Solaris Zones,它们实现的虚拟化的隔离性要相当低一些,得到的好处是虚拟化自身消耗更少的硬件资源。

copyright blog.ykyi.net

Be the first to comment - What do you think?  Posted by zausiu - June 16, 2012 at 11:55

Categories: Tech Articles, Virtualization   Tags:

怎么编译,构建,安装,使用WinKVM

 

WinKVM : Windows kernel-based Virtual Machine

 

WinKVM Windows下台下基于内核的虚拟机(Linux的KVM的windows移植)

 

怎么编译,构建WinKVM

 

这篇方章会告诉你如何编译WinKVM.

你必须先准备好三件东西。

1. 去到http://www.cygwin.com/ 下载安装Cygwin。注意安装时选好gcc-3.x rsync, zlib和awk.

2. 建议用Visual Studio 2008专业版,你也可以使用Visual Studio Express版。

3. Windows DDK, 本文使用The Microsoft® Windows Server™ 2003 Service Pack 1 (SP1) DDK。

必须先下载并安装好这三大件!呃,当然!WinKVM的代码必须下载好了。https://github.com/ddk50/winkvm/

 

在动手编译之前,先设置好好编译环境。添加环境变量BASEDIR2K3,指向你的DDK安装的目录。Visual Studio使用这个环境变量构建驱动程序WinKVM

好吧,动手干活吧!WinKVM的构建过程有一点麻烦。

三样东西必须分开构建。

STEP ONE:

先构建 kvmctldll: cd到vcproj/user/kvmctldll目录,双击kvmctldll.vcproj打开工程,点击build。结束后到vcproj/bin目录下查看有没有kvmctldll.dll文件。如果有,那恭喜你,第一步成功了。

STEP TWO:

使用Cygwin环境编译KVM的原生版本。

cd kvm/kernel  ## 转到kvm/kernel目录。

make           ## 如果你得到:unrecognized emulation mode:elf_i386。不要慌张,这不是一个错误。

make cpobjs   

STEP THREE: 

打开到vcproj/kernel/winkvm.vcproj,编译构建WinKVM驱动。

到vcproj/bin目录下查看有没有成功。如果有生成winkvmstab.sys,则成功了。

STEP FOUR:

最后,要在cygwin环境下构建QEMU。如下:

cd kvm/winkvm-qemu

./configure –prefix=path/to/installation –enable-kvm –target-list=i386-softmmu –disable-kqemu

make

make install

 

 

怎么使用WinKVM

 

必须先申明,在安装好WinKVM以后,你的操作系统可能很不稳定喔!因为WinKVM还只是一个alpha版本。

另外!一定不能在多处理器的系统上运行~如果你的机器是多处理器或者多内核的,必须在启动阶段启用单内核模式。见本文最后怎么进入单内核模式。

先到http://github.com/ddk50/winkvm/downloads下载WinKVM的编译好的二进制驱动并方便方装的相当文件。

然后, 执行下载好的 DIP_gui.exe,这个程序会帮助你安装好WinKVM。点击“…”按钮,再选中winkvmstab.sys驱动文件,最后点击“Install”就开始安装了。安装过程可能会花费一点时间。如果你要卸载驱动的话,同样点击'…'按钮后,再选'Uninstall'。

最后一步,双击"WinKVM.bat"批处理文件执行WinKVM。

 

 

有童鞋问,哥的cpu是多核啊,怎么设置从单核模式启动啊????

 

那本座就告诉你怎么转换到单核模式(single-core mode)启动windows。

1. 按win+r, 输入cmd回车。 (即启动windows的控制台,你可以用其它方式打开windows的控制台)

2. cd c:\

3. attrib -h -r -s boot.ini (这样才能看到c驱动器下的boot.ini文件)

4. 用资源管理器转到c盘根目录,随便用什么文本编辑器参照下面一行编辑boot.ini文件。

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional (onecpumode)" /noexecute=optin /fastdetect /onecpu

5. attrib +h +r +s boot.ini (如果你不怕麻烦再把boot.ini默认的系统属性,隐藏属性,只读属性再加回去吧!)

重启机器,可以进入单核模式啦(single-core mode)!

copyright blog.ykyi.net

Be the first to comment - What do you think?  Posted by zausiu - June 14, 2012 at 00:00

Categories: Tech Articles, Virtualization   Tags: ,

Next Page »