-
最新日志
最新评论
- 吴景鹏 发表于《自由软件日——华科站成功举办》
- Twinkle 发表于《Tech Lead, new start~》
- omycle 发表于《91%通过SCSA part2,认证持久战终于结束》
- sacs à main femme 发表于《拿到我心仪的IBM T61》
- 晚点末班车 发表于《自由软件日——华科站成功举办》
存档页
分类
功能
备案/许可证编号
湘ICP备09016480号
Tag Archives: 虚拟化
虚拟化在中国
近年来,虚拟化一直是一个炙手可热的研究领域,虚拟化的浪潮席卷服务器、存储、网络、PC机等各个领域。虚拟化最突出的优势就是节省资金、整合服务器、最 大化资源利用率。Amazon、EMC、Microsoft、IBM、Google、Citrix、Cisco、Sun等公司在虚拟化市场展开了激烈的竞 争,而以虚拟化为基石的云计算技术的发展则使竞争愈演愈烈。与此同时,虚拟化在我国也得到了迅速的发展和应用。我国的开发人员在虚拟化的开源社区里发挥着 越来越重要的作用,一些企业和单位开始部署虚拟化解决方案,部分高校也正在进行虚拟化领域的研究工作。 2009年11月19日,2009 Xen Summit(Xen峰会)在Intel上海紫竹园区的研发基地拉开帷幕。国内外虚拟化领域的专家学者、Xen开发者和爱好者等200余人共聚一堂,共同 探讨虚拟化的成果及创新理念,展望虚拟化的机遇和未来。Intel于2004年11月公布了首个Xen虚拟化技术代码,开启了全面支持Xen虚拟化的序 幕。过去5年中,Intel为Xen的发展做出了巨大贡献,其对Xen 3.0的贡献在社区中排名第二,仅次于Citrix。正如中国开源软件推进联盟主人比黄花瘦席陆首群教授所说的那样,Xen峰会在中国召开,象征着中国软件开发者正 在从国际开源社区资源的消费者转向贡献者,在开源社区的top contribution list里涌现出了越来越多中国人的名字。 在我国,越来越多的企业开始部署虚拟化解决方案。中国联通开始采用Novell公司先进的虚拟化解决方案,使用SUSE Linux Enterprise Server和智能工作负载管理套件,为其打造架构灵活、易于扩展的互联网数据中心(IDC)平台;华为公司也采用了Novell公司的SUSE Linux Enterprise Server、PlateSpin Migrate及PlateSpin Orchestrate等产品为其构建数据中心虚拟化平台;腾迅公司也将虚拟化技术应用到自己的产品中,如QQ 2009 SP4 云端专版就采用云端的虚拟化技术,让QQ表情和聊天记录全部存于本机系统盘之外的缓存文件夹。此外,中国石油、上海电信、北京电视台等单位也都采用了微软 的虚拟化解决方案。 国内高校的虚拟化研究工作也正在火热进行中。在2009 Xen summit大会上,“计算系统虚拟化基础理论与方法研究”国家973项目首席科学家、华中科技大学计算机科学与技术学院院长金海教授介绍了目前中国在开 源虚拟化基础研究方面的进展。该973项目由华中科技大学牵头,并与北京大学、清华大学、上海交通大学、国防科技大学、浙江大学、江南计算技术研究所、航 天部二院等高校或单位一起承担,分为计算系统虚拟化的理论模型及体系结构研究、单计算系统资源虚拟化方法研究、多计算系统资源虚拟化方法研究、虚拟计算系 统普适化运行环境研究、虚拟计算系统安全可信机制研究、虚拟计算系统评测理论与方法研究、基于高效能计算机的虚拟化技术研究、虚拟化仿真系统应用研究等子 方向。该项目与 EMC、Intel等著名虚拟化厂商密切合作,已发表顶级国际学术论文多篇,申请国际专利多项,研究成果已达到国际先进水平。 虽然目前中国的虚拟化进程仍处于起步阶段,但我国的政府、企业和研究机构已经看到了虚拟化把有限、固定的资源按需重新规划并最大化利用率的巨大潜力,我们有理由相信虚拟化在中国拥有一个美好的未来。
通过Crossbow虚拟化技术搭建VLAN
VLAN(Virtual Local Area Network),即"虚拟局域网",是一种将局域网(LAN)设备从逻辑上划分成一个个网段,从而实现虚拟工作单元的数据交换技术。VLAN 的出现,使得管理员可以根据实际需求,把同一物理局域网内的不同用户逻辑地划分成不同的广播域,每一个VLAN都包含一组有着相同需求的PC要或工作站, 与物理上形成的LAN有着相同的属性。由于它是从逻辑上划分,所以同一个 VLAN内的各个PC机或工作站并没有限制在同一个物理范围中,即它们可以在不同物理LAN网段。由于一个VLAN内部的广播和单播流量都不会转发到其他 VLAN中,从而有助于控制流量、减小arp等广播报文的范围、减少设备投资、简化网络管理、提高网络的稳定性和安全性。本文主要介绍如何在OpenSolaris下使用Crossbow虚拟化技术来实现VLAN体系结构。 物理交换机通过将其端口与特定的VLAN标识相关联,从而实现不同VLAN通信的分离。Crossbow虚拟交换机则将VNIC(虚拟网卡)和VLAN 标识(VID)关联起来,通过MAC地址来对各个VNIC的数据进行分类。同时,虚拟交换机也实现了每个VLAN的广播域,使得标记的广播帧只会传送到与 该VLAN标识匹配的VNIC上。从效率和安全性来看,Crossbow的VLAN实现有两个重要的特性:一是能防止不必要的帧复制,二是能保证帧在 VLAN传输的正确性和完整性。 图一中有两个独立的子网,并且它们使用同样的IP地址。 图一 两个拥有相同IP的独立子网 如果能在不更改机器IP配置的前提下将两个子网整合到一起,将不仅能减少成本,而且能增强其服务的可靠性。这两个子网的整合需要做到: 1. 必须保留现在有的IP地址。因为像防火墙、代理、目录服务等都与IP地址密切相关,重新分配IP地址将会破坏这些服务的可用性。 2. 整合后必须保证两个子网通信的独立性和无干扰性。 将两个子网整合到同一物理网络的传统方法是给每个子网分配一个VLAN ID,然后将交换机的端口与相应的子网VLAN ID关联起来。最后,每台机器都连接到正确的端口,如图二所示。但是,整合后机器的数量和与交换机端口的连接数量并未改变。我们也可以使用虚拟化技术来实 现,使用两个虚拟机来代替两台服务器,它们共存于一台服务器上。 图二 两个物理的VLAN 在将NIC分配给虚拟机时,可以有有多种选择。最常用的办法就是给每个虚拟机 都分配物理网卡,但这样就失去了节约成本和高可用性的意义。当一个NIC(网卡)出错了,所有建立在这块NIC之上的虚拟机都将不可用,同时,这样还会因 为有限的物理NIC数量来降低配置的可靠性。 一种更好的办法就是首先创建一个link aggregation,与NIC绑定。aggregation然后被虚拟化成多个VNIC并分配给相应的虚拟机,如图三所示。VNIC建立在相应虚拟机 VLAN ID的基础上,当整个VLAN虚拟化过程完成后,仍能保证不同虚拟机之间的正常通信。 图三 两个虚拟的VLAN 我们可以通过以下的命令来创建link aggregation、VNIC,最后建立起虚拟化的VLAN体系结构: dladm create-aggr -l nxge0 … Continue reading
在OpenSolaris使用Crossbow简化QoS配置
通常配置系统的QoS(Quality of Service)策略是一项非常艰苦的工作。举个例子,假如我们需要将TCP流量控制在1000Mb/s,在Solaris 10上一般使用IPQoS来解决问题,而在Linux上则使用tc技术,但是需要经历定义队列规则、分类、过滤规则等各种复杂的步骤。本文将介绍如何在 OpenSolaris下使用Crossbow来简化QoS配置,分为Solaris zone和Xen两部分。 首先介绍在Solaris zone里的配置方法。 在一个zone里使用crossbow来限制带宽的操作非常简单。你仅仅需要创建一个有带宽限额的VNIC(虚拟网卡),并将它分配给相应的zone即 可。举个例子,如果我们要限制一个zone的带宽不超过100Mb/s的话,只需使用以下命令创建一个最大带宽值为100的VNIC: dladm create-vnic -p maxbw=100 -l e1000g0 vnic1 zone创建以后,我们在配置文件中将vnic1作为它的网卡,这样该zone通过vnic1发送和接收的带宽就被限制在100Mb/s了。这个设置是永久的,即使在系统重启后也有效。如果我们要把带宽修改为200Mb/s,可使用以下命令: dladm set-linkprop -p maxbw=200 vnic1 可以使用以下命令查看VNIC和zone的对应情况: dladm show-linkprop -p zone vnic1 LINK PROPERTY PERM VALUE vnic1 zone rw zone1 … Continue reading
使用VirtualBox虚拟机和KGDB调试Linux内核
搞过内核开发的人都知道,内核调试是个脑力活,也是个体力活,因为底层的内核开发和应用程序开发有着较大的差别。应用程序的开发在操作系统之上,有许多优 秀的IDE供我们选择,从而能够非常方便进行调试;而内核级的开发则不一样,操作系统的内核调试器除完成一般的调试功能外,还必须工作在内核中。在 Linux中,内核调试方法有多种,可以在内核中插入printk()函数来调试分析,可以使用/proc文件系统对内核进行分析,也可以使用kgdb进 行内核源代码级的调试。本文将介绍如何使用VirtualBox 3.0.12 + RHEL 5 + KGDB的方式调试Linux内核(在一台主机运行RHEL 5,用VirtualBox 3.0.12虚拟两个RHEL 5代替两台机器,并在两台虚拟机上配置KGDB来进行内核的调试)。 kgdb提供了一种使用gdb调试Linux内核的机制。使用kgdb调试内核需要准备两台机器,一台作为开发机(用来远程查看内核信息并调试内核),另一台作为目标机(跑有要调试的内核), 并通过串口将它们连接起来。在2.6.26以前的Linux内核中使用kgdb需要打上补丁,而在2.6.26及以后的内核里已经加入了对kgdb的支 持。当kgdb内核调试环境搭好后,目标机上运行的是打了kgdb补丁的Linux内核,而开发机上运行gdb,gdb通过串口与要调试的内核进行通信, 对目标机上的内核进行控制,从而实现远程对内核的调试。 首先从http://www.virtualbox.org下 载for RHEL5的VirtualBox,目前的最新版本是VirtualBox 3.0.12。装上VirtualBox后,就可以虚拟出两个RHEL 5虚拟机来代替两台机器了。当然我们也可以使用VirtualBox的clone功能,如果第一台虚拟机的文件名为rhel1.vdi,可使用命令VBoxManage clonevdi rhel1.vdi rhel2.vdi命令迅速克隆出另一台虚拟机。我们将一台虚拟机用作目标机,另一台用作开发机。我 们可以利用主机的命名管道来完成两台虚拟机间的通信。一台虚拟机在主机中创建命名管道并将其串口与管道相连,另外一台虚拟机也将自己的串口连接到主机的命 名管道上,这样就实现了两个虚拟机串口的连接。两台虚拟机都使用自己的COM1端口,主机的命名管道同为/tmp/vbox,在配置时由一台虚拟机创建, 另一台则不创建。我们可使用以下的方式来测试两虚拟机的串口是否连接成功: (1)首先启动创建管道的虚拟机,再启动另一台虚拟机,然后使用命令stty ispeed 115200 ospeed 115200 -F /dev/ttyS0将各自COM1端口的输入输出波特率都设为115200。 (2)在其中一台虚拟机v1终端上执行cat /dev/ttyS0, 在另一台虚拟机v2上执行 echo ok … Continue reading
虚拟化之群雄争霸
10月28日,一年一度的虚拟化用户大会在北京隆重举行。该大会是VMware全球客户活动的重要组成部分,是VMware 中国举办的第三届虚拟化用户大会。大会以"秉云之势,承虚而入"为主题,秉承创新的理念,主要阐述"借助虚拟化技术和云计算推动企业成功"的观点,吸引了2000多名用户、合作伙伴及EMC、IBM、Intel、HP、Cisco等赞助商的参与。 大会展示了VMware从桌面到数据中心及云计算虚拟化解决方案的创新理念,详尽地描绘了其完整的云计算策略和虚拟化路线,诠释了下一代虚拟化功能和产品的发展方向。 大会上频频提出虚拟化融合的概念,它不仅仅是服务器的整合,还包括将服务器虚拟化、存储虚拟化和网络虚拟化融合在一起,形成一个统一的整体。为适应不断变化的业务需求,未来的数据中心也将是动态的、融合的。 近来,NetApp这家业界领先的创新性存储和数据管理解决方案提供商,也向外界公开了其云计算战略,并发布了Data ONTAP 8及其它最新的技术解决方案。同时,NetAPP、Cisco和VMware三大公司也联合推出了虚拟化动态数据中心解决方案,从而允许虚拟服务器、以太网、应用和数据网络支持以尽可能有效的方式展开协作。 Oracle公司也推出了其最新版的Oracle服务器虚拟化软件Oracle VM 2.2。它具有基于Xen的最新业界标准管理程序Xen 3.4,可使运行在基于英特尔微型架构的英特尔至强5500系列处理器(代码Nehalem)及6核AMD皓龙处理器的客户系统的性能得到大幅度提升。同时,它还实现了Oracle VM与Virtual Iron技术的首次集成,从而使客户能够非常容易地将Virtual Iron虚拟机迁移到Oracle VM上。这样,客户就可以加速部署并简化企业应用的管理,以最环保和最高效的方式运行数据中心。 此外,Sun、IBM、HP、Cisco等公司也在继续开发和完善着自己的虚拟化解决方案,虚拟化领域的群雄争霸局面已经形成。
如何在xVM克隆基于ZFS的domain
如果你正在使用ZFS作为根文件系统,你就能利用其snapshot快照机制迅速克隆出相同配置的domain。通过对其根磁盘分区进行克隆,你就能轻松地得到多个相似的domain,而它们的主要差别仅仅是使用的存储空间不同而已。本文将介绍如何利用ZFS的clone技术来创建新的 domain。 首先,我们需要关闭正在运行的domain才能进行克隆,以保持硬盘快照的一致性,命令如下: xm shutdown -w dom1 当然,你也可以在domain中运行sys-unconfig命令使新的克隆从重新配置开始。 完成以上操作后,我们就可以使用命令zfs snapshot pool/dom1-root@clone 为dom1的根磁盘分区创建一个快照了,再使用命令zfs clone pool/dom1-root@clone pool/dom2-root来克隆一个可写的snapshot快照。 这时如果你使用zfs list命令,应该能看见新创建的snapshot及clone。接下来,我们需要复制dom1的配置文件。使用如下命令将配置文件copy到一个新的文件: virsh dumpxml domain1 >domain1.xml cp domain1.xml domain2.xml 对copy的配置文件,至少需要作三处改变。 首先,你需要为克隆的domain重命名,若想命名为dom2,则将<name>dom1</name>更改为<name>dom2</name>即可; 其次,你需要删除UUID这一行,从而让virsh为domain生成一个新的配置文件。删除的部分如下: <uuid>78cd98b5e7ab16594fa0cf1260826571</uuid> 接下来,我们需要为domain指定新的磁盘分区: <source dev='/dev/zvol/dsk/export/dom1-root'/>更改为<source dev='/dev/zvol/dsk/export/dom2-root'/> 最后,告诉virsh新domain的存在。 virsh define domain2.xml 这时候,你就可以启动自己克隆的domain了。
让Solaris、OpenSolaris作为xVM的Dom0
Xen是由剑桥大学开发的一个开放源代码的虚拟机管理器,是目前世界上最流行的虚拟机管理器之一,在《Virtualization:Xen and xVM Server》一文中有关于Xen和xVM Server的介绍。Sun公司也推出了自己基于Xen的虚拟化项目xVM,其最根本的区别就是Xen以Linux作为Dom0,而xVM以Solaris或OpenSolaris作为Dom0.本文将介绍如何将Solaris或OpenSolaris配置成xVM的Dom0。 在Solaris 10里已经集成了xVM项目,当你完整安装Solaris 10后,在grub启动时会发现有一个xVM的启动项,这时选择该启动项后Solaris 10就以Dom0的形式运行了。 在OpenSolaris下则需要安装相应的软件包并进行配置,具体过程如下: 如果你的OpenSolaris是build 126或者更新的版本,激活xVM只需要以下几条命令即可: $ pfexec pkg install xvm-gui $ pfexec svcadm enable milestone/xvm $ pfexec reboot 如果是老版本的OpenSolaris,整个安装及配置过程就相对复杂一些。 首先使用命令beadm create -a -d xvm xvm创建一个独立的环境; 接着安装一些相应的软件包,命令如下: $ pfexec beadm mount xvm /tmp/xvm-be $ … Continue reading
让Solaris 10作为zone运行于OpenSolaris
如果dtrace和mdb这些工具运行在OpenSolaris全局zone中,那么这些工具对运行在跑有Solaris 10的zone中的进程来说是无用的,主要是因为Solaris 10和OpenSolaris之间部分调试库的一些不兼容的改变,导致Solaris 10不能作为OpenSolaris的zone正常地运行。同时,由于新版本的OpenSolaris加入了Crossbow等许多非常优秀的特性,让运 行Solaris 10的zone能充分利用OpenSolaris作为全局zone的众多优势,也是非常有必要的。本文将介绍如何解决在OpenSolaris上正常运行 跑有Solaris 10的zone这个技术难题。 解决这个问题最大的难点之一,就是x86平台下Solaris 10的libc对%fs段寄存器的使用。Solaris 10的libc希望X86平台64位处理器的%fs寄存器来存储非0的selector值(如果%fs值为0,那么Solaris 10的_curthread()返回NULL),问题也由此产生了,由于OpenSolaris的内核清空了%fs,而在64位的x86机器上,libc 总是使用%fs来查找当前线程的ulwp_t数据结构,从而使运行Solaris 10的zone不能使用libdoor这些普通的类库和thr_main(3C)等关键libc函数。 整个解决方案比较复杂,因为必须保证在Solaris 10 zone中运行的所有线程开始运行时%fs寄存器的值非零。幸运的是,在Solaris 10和OpenSolaris中只有两个系统调用修改了%fs:SYS_lwp_private和SYS_lwp_create。 SYS_lwp_private是一个libc私有的系统调用,只有在一个进程执行后libc初始化时才被调用一次,用来配置FS段使其段基址在单一线程 ulwp_t结构的开始处。 具体过程如下: 1. Solaris 10的仿真库在s10_lwp_private()实现SYS_lwp_private,它把系统调用传到未改变的OpenSolaris内核,然后调用 thr_main(3C)来测试Solaris10环境下的libc在内核配置%fs后是否运行正常。如果返回-1,那么将调用一个特殊的 SYS_brand系统调用将%fs还原到过去的非零状态。 2. Solaris 10的仿真库在s10_lwp_create()中实现SYS_lwp_create,使得新的线程在 s10_lwp_create_entry_point()而不是在_thrp_setup()中启动。当然,新的线程最终还是必须执行 _thrp_setup(),所以s10_lwp_create()在新线程栈中的预定位置保存_thrp_setup()的地址。 s10_lwp_create_entry_point()调用thr_main(3C)测试当%fs为零时Solaris 10的libc运行是否正常。如果thr_main(3C)返回-1,那么新的线程将调用和s10_lwp_private()一样的SYS_brand 系统调用来恢复%fs。然后,新的线程再从栈中的预定位置读取真正的入口点地址并跳转到入口点。 3. 在运行Solaris 10的zone里保证fork产生的子线程继承其父线程的%fs selector值,从而使父线程即使在调整%fs寄存器后也能保持父子线程的一致性。 4. 同时,还需要考虑对SIGCANCEL等信号的处理,以防止段错误的出现。
聚焦VMworld虚拟化盛会
IT行业独立研究公司TheInfoPro公司最近的实时数据显示,2009年安装的服务器中有50%将采用虚拟化技术,预计到2012年这个比例将增长到80%。可见,虚拟化技术正在以较快的速度增长和普及。 万众瞩目的VMworld虚拟化大会于8月31日 至9月3日在旧金山召开。作为虚拟化领域内的领佳节又重阳导厂商,VMware今年推出了长距离VMotion技术、VMware Go、PCoIP、CapacityIQ与ConfigControl,并开放云端平台与vCenter的API接口,强化第三方软件厂商的支持。其轻松部署虚拟机的vCenter Lab Manager、可显示每个虚拟机账户信息的vCenter Chargeback等产品都让人眼前一亮。VMware公司总裁兼首席执行官Paul Maritz在大会上强调了降低IT复杂性的重要性,对VSphere这款易于管理的、并能很好地降低数据中心复杂性的虚拟化软件给出了很高的评价;VMware首席技术官Stephen Herrod作了题为《虚拟化的未来:从手机到云》的演讲,提出了VMware的移动策略,除了将手机作为瘦客户之外,还可以通过手机管理数据中心,并对手机本身实施虚拟化。其VMware View产品除了可以作为便携终端的瘦客户机之外,还可以作为vCenter的管理终端使用。同时,他还表示VMware将公布实现手机虚拟化的“VMware MVP”(Mobile Virtualization Platform)。 与此同时,开源hypervisor之家Xen.org发布了XCP(Xen Cloud Project),旨在跨广泛的云厂商使虚拟化标准化,为Xen创建一个稳定的、定义好的API,从而加速其在企业和云里的采用。软件巨头微软专为中端市场客户推出了一系列“特殊应用的虚拟化/管理软件以及服务升级”的解决方案,如System Center Virtual Machine Manager技术等。此外,思科与VMware合作,在大会上展示了一项远程实时迁移技术,整个技术可以让远在125英里外的虚拟服务器穿过多个数据中心,从而使企业真正撤离一个数据中心。
Xenstore简介及Xenstore读写机制的研究与实现
Xenstore是Xen提供的一个域间共享的存储系统(数据库),也可以说它是一个由Domain 0管理的简单的分层操作系统,其作为虚拟机间的中介通信是基于共享内存页与事件通道来实现的。Xenstore中存储了各个虚拟机(包括Domain 0)的配置信息,例如Domain ID,Domain Name,UUID,前后端设备,启动时间,虚拟机状态等。 Xenstore是一个具有层次结构的目录,类似于Linux中的树形目录。Xenstore中存储了Domain之间共享的配置信息,Domain 0作为管理域,可以查看整个结构的内容,而Domain U只能查看自身的信息,这种设计方法提高了Xenstore的安全性。 Xenstore的数据结构与文件系统非常相似。Xenstore只是用于domain间少量信息的传送,并不用于大规模数据的存储。它也保存着正在运行的domain信息,这些信息存储在一个稳定的位置,所以是易读的。 Xenstore中主要有三个路径: /vm – 存储了domain的配置信息 /local/domain – 存储了本地节点的虚拟机信息,类似于Linux的/proc结构 /tool-存储了各种工具的信息 Xenstore提供了访问的接口程序,基本的接口包括两个缓冲环(ring buffer)。关于Xenstore的数据内容更新的Request放在1号环,Response 和状态改变的异步通知被放入2号环。第一个环被domU写入,dom0读出,而第二个环由dom0写入,domU读出。 在Xenstore里,可以使用命令xenstore-read和xenstore-write对数据进行读写。 实现代码如下: #include <stdlib.h> #include <string.h> #include <stdio.h> char buf[100] ; void xenstore_w(char* key, char* value) //将key/value的键值对写入xenstore { char *a … Continue reading