KVM你问我答 FAQ (四)

KVM和Xen有什么区别? Xen是一个外部虚拟机管理程序(External hypervisor),它承担了管理物理机器的任务并把物理机器的各种资源分配给客户机。与Xen不同,KVM本身是Linux内核的一部分,它使用Linux自己的进程调度和内存管理。这就天然决定了KVM易于使用并于体积会很小。仅管体积小,但KVM的功能确不少。比如,KVM可以把客户机从内存中兑换到物理磁盘上,如同swap普通进程一样释放RAM。KVM目前只在提供支持硬件虚拟化的x86机器上运行(如vt/svm指令集)。从这这方面讲,Xen通过修改客户机操作系统,充许虚拟机运行在没有硬件虚拟化技术的x86平台上运行。这种虚拟化技术称之为准虚拟化paravirtualization,参见另一贴:Linux的虚拟化技术。KVM在CPU级别不支持paravirtualization,但为了指高I/O性能,会对设备驱动程序支持准虚拟化。 KVM和Vmware有什么区别呢? VMware是一个商用专用虚拟化产品,KVM是在GPL许可证下发布的自由软件。 KVM和QEMU有什么区别? QEMU是模拟器。参见Linux的虚拟化技术 KVM & QEMU 。 KVM有windows下的移移植版本吗? ...

June 11, 2012 · 1 min · kamus

KVM你问我答 FAQ (三)

我在使用QEMU,如何知道我有没有启用KVM的硬件加速功能? 如果你怀疑你没有启用KVM提供的硬件加速功能。你可以按照下面的步骤做检查。首先,看看你有没有得到下面的提示信息: qemu-system-x86_64 -hda myvm.qcow2 open /dev/kvm: No such file or directory Could not initialize KVM, will disable KVM support 如果是这种情况,请再检查: kvm模块被正确载入了吗? lsmod | grep kvm. 查看 dmesg 的输出,保证没有这个提示信息: “KVM, disabled by BIOS”. 请确保/dev/kvm 确实存在,而且你有权限使用它。 其它诊断方式: 如果你能使用 QEMU monitor ( ctrl-alt-2, 再 ctrl-alt-1 回到 VM 的显示屏 ),敲入 info kvm 命令。如果正常的话,应该有“KVM support: enabled”这条信息输出。 在host机上敲 lsmod | grep kvm 命令,看看输出的最右栏。如果kvm在正常运行的话,这个数字不能是0。这行的数字与架构相关的模块(一般指的是kvm_intel,或kvm_amd)有联系,它显示了有多少个VM正在使用这个模块。举例说明,如果你有两个虚拟机正在使用KVM模块,host机的CPU使用的是vt技术,那么就会得到: # lsmod | grep kvm kvm_intel 44896 2 kvm 159656 1 kvm_intel ...

June 10, 2012 · 2 min · kamus

KVM你问我答 FAQ (二)

如果我的没有root权限,怎么使用KVM呢? 最简洁的做法就是创建一个组,比如kvm组,然后把将要使用kvm的用户添加到组里面。然后用chown命令把/dev/kvm的所有组改成kvm。如果你的系统里安装了udev,你还可以通过配置udev的方式使得linux自动把新创建的设备设成正确的组。比如在ubuntu的/etc/udev/rules.d/40-permissions.rules文件中增加一行: KERNEL==”kvm”, GROUP=”kvm” 怎么做才能得到kvm的最佳性能呢? See the Tuning KVM page. KVM稳定吗? ****KVM非常稳定而且已经用于工作生产环境之中。对于所有的开始工程,开发版的稳定性总是逊于稳定发行版。建议使用稳定发行版。KVM已经被使用比较长一段时间,模拟常用的操作系统和配置。一但有问题出现,开发者会在第一时间修复。参看Guest Support Status,列举了目前运行良好的操作系统。****zausiu’s blog http://ykyi.net KVM真的可以用于生产环境吗? ****为了稳定性,强列建议你使用你使用的发行版提供的KVM模块。如前面所述,及早使用新特性总是令人开心的事情。但是,你常常要要承担一定的风险,一些未知的问题可能在使用时暴露出来。在生产环境中,最好使用你使用的发行版提供的稳定版,而开发版本,如果你愿意,可以使用在不是那么重要的环境下。 如果我用kill -9杀掉VM进程会发生什么事呢? ****From the guest’s perspective, it is as if you yanked the power cord out. From the host’s perspective, the process is killed and all resources it uses are reclaimed. 从客户虚拟机的立场来看,这就如同被拨掉了电源。从Host机的立场看,仅仅是VM进程被杀死了,这个VM进程所申请的所有系统资源被回收给操作系统。如前文所说,对于linux内核,VM进程就是一个普通的进程。 请帮助我设置客户机的网络。 ****可以参考这里 Networking 设置网站,也可以找找QEMU的网络设置相关文档。 哪里有更多KVM的文档呢? 绝大多数问题都在QEMU的 documentation中被提到了,还有部分在扩展FAQ ( 已经废弃的老板 FAQ). ...

June 9, 2012 · 1 min · kamus

KVM你问我答FAQ (一)

使用KVM需要哪些准备? ****你需要一台运行Linux的x86的机器。它的CPU是有VT技术支持的英特尔cpu或者有SVM(又常被称为AMD-V)支持的AMD的CPU. KVM支持64位的处理器吗? ****KVM支持64位的处理器!此时,你可以运行32位或者64位的客户机。 What is Intel VT / AMD-V / hvm? 英特尔VT,是什么?AMD-V又是什么?hvm是什么? Intel VT 和AMD’s AMD-V 都指的是指令集扩展。它们在硬件层面帮助实现虚拟机管理技术。这种技术使得在虚拟机上运行的速度接近直接在真实机器上运行的速度。HVM是硬件虚拟机的缩写(Hardware Virtual Machine )则是一个生产商中立的词汇(vendor-neutral term),它常常用来指代x86指定集扩展。 从哪里得到KVM内核模块呢? ****可以从这里获得 http://www.linux-kvm.org/page/Getting_the_kvm_kernel_modules 。 我如何知道我的CPU支持Intel VT技术或者AMD-V技术呢? 如果你的Linux操作系统比较新,尝试以下的指令: . egrep ‘^flags.(vmx|svm)’ /proc/cpuinfo* 如果出现一些文字,那说说你的CPU支持虚拟化。你也可以在/proc/cpuinfo文件中找到处理器模块的名字,然后到供应商的网站上查询。 注意: 如果安装了Xen hypervisor,为了防止被劫持,你在dom0和domU中都得不到这些输出。dom0和domU是Xen hypervisor的术语。如果你没有安装Xen,直接忽略。 一些产商默认在BIOS定设中禁用了CPU的虚拟化支持。你需要先在BIOS中打开虚拟化支持。 如果你用的是intel cpu,对于内核版本2.6.15以前的Linux,你得不到这样的输出。如果你用的是amd cpu,对于内核版 本2.6.16以前的linux,你得不到这样的输出。如果你不确定你的Linux内核版本,用#uname -r 命令查看。 出现 “KVM: disabled by BIOS” error 错误 Check if there is an option to enable it in the BIOS. If not, look for a more recent BIOS on the vendor’s web site. 在BIOS设定在找找看有没有启用cpu虚拟化的选项,如果没有,去到主板厂商的网站上面看看有没有新的BIOS发布并支持打开cpu虚拟化,那么你需要刷新BIOS. 注意: 1.对于部分硬件(如 HP nx 6320),你需要先关掉主机电源,再打开主机电源才能使BIOS中启用cpu虚拟化支持生效。 2.BIOS的部分设定有可能与启用CPU虚拟化冲突。比如在Thinkpad T500上,启用Intel AMT技术会出现冲突。这样kvm-intel在载入时会抱怨”disabled by bios”错误。 3. 在一些Dell的硬件中,你还需要禁用”Trusted Execution”,否则不能打开VT。 ...

June 9, 2012 · 1 min · kamus

Linux的虚拟化技术 KVM 和 QEMU

Linux 2.6.20发布以后。一个称之为KVM的非常优秀的虚拟化框架加入了linux代码主干。KVM是Kernel-based Virtual Machine的首字母简写。这篇文章将在理论层面和实践层面都会简单介绍KVM是如何工作的。http://ykyi.net 简单的理论背景: 目前有几种虚拟化的方式。 其中一种称之为准虚拟化(para-virtulization)。使用准虚拟化的时候,为了达到虚拟化的目的,客户机系统必须被修改。修改后的客户机知道它运行在虚拟的环境中,与虚拟机管理程序(Supervisor)协同工作。这样的好处理较之全虚拟化,性能上有一定的优势。 另一种称之为全虚拟化(full virtualization)。使用这种技术则不需要修改操作系统。但相对于准虚拟化技术,全虚拟代技术牺牲了一些性能。因为没有客户机OS的参于,是非常困难得到很高的虚拟化效率的。但自从CPU产商在硬件层面推出虚拟化支持的时候,情况就不一样了。如Intel的VT,AMD的AMD-V虚拟化技术。KVM就是利用了CPU的虚拟化支持技术实现了。并且KVM作为linux内核的一个模块加载,天然继承了linux内核的诸多优势。基于KVM的虚拟机,被当成一个标准的Linux进程被Linux内核调度。这个KVM虚拟机看到的都是虚拟的硬件。对于一个标准的Linux进程,有两种运行模式:内核态和用户态。KVM给虚拟机进程加入了第三个模式:客户模式(guest mode)。而客户模式又有它自己的内核态和用户态。 KVM包括两部分组件: 一个设备驱动程序用来管理虚拟化硬件。这个驱动是一个字符驱动,用来管理虚拟化硬件(for managing the virtualization hardware)。 一个用户空间运行的模拟器。通常选择QEMU稍作修改。QEMU是由一个叫Fabrice Bellard的法国黑客写的。 KVM与QEMU实战,在linux下安装windows xp: 前期准备,需要安装KVM和QEMU.另外还有保证你已经编译了内核。 真正的安装超级简单。 第一步:# qemu-img create hda.img -f qcow 6G 第二步: # kvm -no-acpi -m 256 -cdrom winxpsp2.iso -hda hda.img -boot d 下面简单的解释下。 第一步创建了一个虚拟磁盘(实际上就是文件系统上一个文件而已,不过话又说回来,unix的哲学就是所有的东东都是文件。)这条命令选择了QEMU的写时复制策略。这使得这个文件会按需增长。所以一开始这个文件不会太大,以后随着你的虚拟xp占用的空间增大而增大。不过这条命令把大小限制到第大6G. 第二步:指定了win xp的镜像文件就开始安装啦!喔,这条命令使用了 -no-acpi 开关。据说acpi在QEMU中支持的不够好。不过我觉得问题应该得到解决了吧,所以也可以不用 -no-acpi。ykyi.net 于是就装好啦!真的非常简单啊~~ 于是你就可以用这个虚拟的xp做一些你不愿意在真实OS上作的测试啦!或者使用只有在win下的软件。 转贴请注明出处 http://ykyi.net/2012/06/linux%E7%9A%84%E8%99%9A%E6%8B%9F%E5%8C%96%E6%8A%80%E6%9C%AF-kvm-%E5%92%8C-qemu/

June 7, 2012 · 1 min · kamus

Linux用两种信号量 Linux has two kinds of semaphore

面试中经常会考什么是信号量,对于linux,实际上有两种semaphore. 第一种是指一种IPC(Inter-process communication进程通讯)的方法。这种IPC是从Unix SYstem V时代开始的,System V发布时加入了三种IPC,它们是semaphore信号量,message queues消息队列,shared memory共享内存。 Linux中另一种Semaphore是内核用来同步的机制。在kernel中,semaphore通常当成一个二值信号量使用。获得信号量时有可能会睡眠,这样进程就会被调度开,放弃处理机;如果某段内核代码得到了一个信号量,这段代码还可以睡眠。这点不像spinlock,尝试得到spinlock会不停地忙等,得到spinlock后不充许睡眠。当然这个“不充许”不是语法层面的,而是应该被程序员遵守。否则整个系统的的性能就会被这代不遵守约定的代码毁掉了。 copyright ykyi.net

June 5, 2012 · 1 min · kamus

内核线程是什么东东 What is Kernel threads

有一些Unix内核,比如Solaris和SVR4.2/MP,被组织成一些内核线程。一个内核线程是一个执行上下文且可以被调度;这样的内核线程可能与一个用户程序相关联,也有可以只执行一些内核函数。上下文切换的时候,切换内核线程上下文的开销远比切换用户进程上下文的开销要小。因为内核线程通常共用一个地址空间。而Linux的内核线程则有不同。Linux的内核线程仅仅周期性的执行一个内核函数。而且,Linux内核进线程并不表示一个基本的可执行上下文。 zausiu’s blog. http://ykyi.net Some Unix Kernels, such as Solaris and SVR4.2/MP, are organized as a set of kernel threads. A kernel thread is an execution context that can be independently scheduled; it may be aasociated with a user program, or it may run only some kernel functions. Context switches between kernel threads are usually much less expensive than context switches between ordinary processes, because the former usually operate on a common address space. Linux uses kernel threads in a very limited way to execute a few kernel functions periodically; however, they do not represent the basic execution context abstractions.

June 5, 2012 · 1 min · kamus

十个选择Oracle Linux而不是RedHat企业版Linux的原因

Linux在当今基于云的解决方案中被普通采用。而Oracle Linux目前最完整的集成解决方案。它提供了高性能和高可靠性,却只是选择Redhat Linux的花费的1/7。 http://ykyi.net 译! 原因一: Oracle Linux成本低: Oracle Linux可以自由下载和部署。 对Oracle Linux的支持订阅(Support Subscription)非常简单且价格便宜。 支持花费(Support costs)不到Redhat的七分之一。 你不能够下载Redhat Ent Linux,除非你购买了Support Subscription。 而Redhat Ent Linux的订阅以及插件的价格都很贵。 Redhat Ent Linux的授权许可证非常的复杂。 原因二: Oracle Linux已包含管理工具。 Oracle Linux支持用户使用免费的Oracle Linux服务器的生命期管理工具,这个工具相当于Redhat的卫星服务以及相关模块。 同样的Oracle企业管理者工具也能被授权管理从应用到磁盘的整个解决方案。 而红帽的卫星服务器用户则需要分别为每台服务器都申请许可证。可想而知,花费要高很多。 原因三:Oracle Linux的高有效性。 Oracle Linux includes OCFS2 and Oracle Linux Basic and Premier Support subscribers have free access to Oracle Clusterware Red Hat charges separately for add-ons that include clustering software for HA ...

May 27, 2012 · 3 min · kamus

怎么订阅Linux内核邮件列表

官方页面: http://vger.kernel.org/majordomo-info.html As of now, subscription support is not handled at the web! 从现在开始,订阅操作不在通过web方式操作啦。 All VGER list control activities (joining and leaving, that is) are handled via email server at address: 所以的VGER列表的操作都通过邮件的方式搞定。 majordomo@vger.kernel.org All email sent to there must be TEXT/PLAIN, there can be no multipart messages, no VCARDs, nothing “fancy’’. In presense of such things, Majordomo will very likely do wrong thing. 所以的邮件都必须以纯文本发送。不需要multipart message,不需要VCARD,不需要花哨的东东。如果你违反了,Majordomo系统就会出错。 When you send there email, do make sure that all of the email headers, both visible and transport level, have same addresses in them. People experience problems when for example “From:’’, “Sender:’’ and possible “Reply-To:’’ headers present different addresses. The most common manifestation is complete silence from VGER! ...

May 20, 2012 · 3 min · kamus

gcc的-E选项什么意思

gcc的-E选项可以为你生成预编译后的文件。预编译后的文件将把c文件中的宏以及该文件包含的所有头文件展开。这样就没有了一层一层进入嵌套包含的头文件。下面是一个使用gcc的-E选项的例子。 下面是来自gcc mannual page的解释: -E Stop after the preprocessing stage; do not run the compiler proper. The output is in the form of preprocessed source code, which is sent to the standard output. Input files which don’t require preprocessing are ignored. $ gcc -E drivers/char/mydrv.c -D__KERNEL__ -Iinclude -Iinclude/asm-x86/mach-default > mydrv.i 其中的-I选项告诉编译器在哪些目录中搜索所需要的头文件。 还可以用gcc的-S选项生成汇编码的文件。如: $ gcc -S drivers/char/mydrv.c -D__KERNEL__ -Iinclude -Ianother/include/path ykyi.net

February 22, 2012 · 1 min · kamus