前几天聊到了对付流氓软件的几个招数,其中最管用的一招是“操作系统虚拟机”。那篇博文发出后,有几个读者在博客留言中抱怨说:用了虚拟机之后,系统太卡了。所以今天来普及一些虚拟机的“运行速度优化”。
本文重点介绍【同时运行多个 VM 的速度优化】。俺会从“硬件选型”和“软件设置”两个角度分别来聊。如果你是第一次看本系列,建议你先看完前面几篇,再看本文。
在虚拟机的速度优化中,“虚拟化技术”是非常重要滴,可惜又少有人了解。所以俺把它放在本文第一个章节。
“虚拟化技术”全称是“x86 硬件虚拟化技术”,维基百科的解释在“这里”。为了打字省力,以下简称“VT”。
该技术是在【硬件】层面额外提供一些机制,这些机制仅仅用于“虚拟化”方面。如果你的电脑不是用来跑“虚拟机”,VT 技术对你而言毫无用处。
为啥要在硬件层面额外提供这样一种技术捏?因为 x86 的体系结构,天生就【不适合】用来搞“操作系统虚拟化”(个中缘由,在本文评论区有相关讨论,这里就不细谈了)但是最近10多年来,“虚拟化”是大势所趋。所以 Intel 和 AMD 都在自家的芯片上提供了适合“虚拟化”的扩展机制。对 Intel 芯片而言,称之为“Intel-VT”(也叫“VT-x”);对 AMD 芯片而言,称之为“AMD-V”。
请注意,VT 只在部分型号的芯片上提供。也就是说,不论是 Intel 还是 AMD,都只有某些型号的芯片是支持 VT 滴。
如果要从原理上阐述 VT 的用处,需要涉及到 x86 架构的设计及其缺陷,说来话长啊。考虑到篇幅,俺只举几个例子。
举例1:
有了 VT 之后,如果 Guest OS 中需要执行 CPU 的特权指令,虚拟机软件可以利用 VT 原生支持(硬件层面搞定);如果没有 VT,碰到这种情况就只能靠软件模拟运行(靠软件模拟,效率会差很多!)。
很多同学抱怨电脑跑 VM 太慢,其中一部分人的原因就是——CPU【不】支持 VT。
举例2:
有了 VT 之后,你可以在“32位”的 Host OS 里面虚拟出“64位”的 Guest OS;若没有 VT 支持,就无法在“32位”上虚拟“64位”。
首先,你应该去查一下自己的电脑是啥型号的,然后 Google 一下该型号的硬件配置,通常都可以在那些电脑行情网站(比如:太平洋电脑网、中关村在线)上找到该型号使用的 CPU 规格。在 CPU 规格中,通常就会提到这款 CPU 是否支持 VT。万一在 CPU 规格中没有提及是否支持 VT,你可以根据该 CPU 的详细型号,再到 Intel 或 AMD 的官网上查,肯定能查到相关说明。
假如你查到自己的 CPU 是支持 VT 的,还没完。你还得到操作系统里面检验一下,看 VT 在操作系统层面是否可见。
对于使用 Windows 的同学
Intel 和 AMD 各自都提供了专门的检测工具。不过俺还是推荐用微软提供的检测工具(Intel & AMD 通吃)。下载链接在“这里”。该工具是绿色的(免安装),在 Host OS 中运行它,就会提示你的系统是否支持 VT。
对于使用 Linux 的同学
请自行查看 Host OS 中的
对于 Intel 芯片,搜索 vmx 标志。
如果你上网查到自己的 CPU 支持 VT,但用微软的检测工具却显示不支持,那么很可能是你【没有】在 BIOS 中开启 VT 设置。
如果你在 BIOS 中开启了 VT,但是微软的检测工具还是报告说“不支持 VT”,那么还有如下几种可能:
1. 有些电脑在系统启动时会锁定 VT 设置。所以你必须先【关机】,然后再开机并进入 BIOS 界面,再去修改 VT 设置。如果你只是【重启动系统】,没有进行【关机】操作,可能会导致 VT 的修改没生效。
2. 极少数便携式电脑在 BIOS 修改 VT 扩展之后,要进行【完全放电】,才能让修改生效。
3. 检查一下你的芯片驱动是否装对了
所谓的“并行”(parallel),通俗而言就是:让 CPU 可以同时干多个事情。
CPU 的并行能力,主要通过三种技术来实现:多处理器(multi processor)、多核(multi core)、超线程(hyper threading)。
至于这三种的详细解释,俺就偷个懒,大伙儿自己去看维基百科吧。
这三种 CPU 的并行技术,其优缺点对比(尤其是前两种),网上有不少口水战。客观地讲,在不同的使用场景,不同技术的表现也是不同滴。所以很难一概而论地说哪个技术更好。
在“多 VM 同时运行”的场景下,俺个人认为:
其它指标相同的情况下,“N 个单核的 CPU”优于“一个 N 核的CPU”
其它指标相同的情况下,“一个双核的单线程 CPU”优于“一个单核的超线程 CPU”(注:“超线程”通常指“双线程”)
如果你正打算采购一台电脑,并且计划在该电脑上跑多个 VM。从“性价比”的角度考虑,你应该挑选“单 CPU 多核”。
因为个人用的电脑,主板大都只支持【单个 CPU】;支持多 CPU 的电脑,价格要高出很多。所以在性价比考虑之下,只能退而求其次,选“单 CPU 多核”——这是比较划算的方案。
至于应该买“几核”的 CPU,俺的建议是——在你的钞票预算内,核心数【多多益善】。
主流的虚拟机软件(VMware 和 VirtualBox)都可以指定 Guest OS 使用的 CPU 数量。
对于 VirtualBox,它提供的界面上让你设置的是“虚拟 CPU 数”(对应的是“核心数”)。你设置的数量要【小于等于】你物理 CPU 的“总核心数”(即使是超线程的 core 也只算1个)。
对于 VMware,它提供的界面上可以让你设置“CPU 数”与“每 CPU 核心数”。此处的设置比 VirtualBox 复杂。大伙儿可以参考 VMware 官网的文档(链接在“这里”)。
通常情况下,你只需设置为跟你的物理 CPU 的情况一致,就可以了。但是有些特殊情况,俺需要提醒一下。
VMware 下的特殊情况:
微软提供的某些 Windows 版本,会限制“可用 CPU 数”(这是微软的销售策略导致滴)。比如 Windows Server 2003 Standard Edition 限定了最多只能用4个 CPU(此处指【processor】,不是 core);比如 WinXP 最多支持2个 CPU(也是指 processor)。如果你分配给 Guest OS 的 CPU(processor) 超过了该 Windows 的“CPU 上限”,那超出的部分就浪费啦。
相比 CPU,内存方面没有太多讲究。
如果你正在考虑买电脑,并且你想跑多个 VM,在预算范围内尽量买内存大的,或者是买来之后自己加内存。
需要多大的内存,取决于你需要【同时运行】的 VM 数量,以及每个 VM 的用途。
如果你善于优化,即使不大的内存,也可以同时跑好几个 VM(本文后续章节会稍微聊一下 Guest OS 的优化)。
目前所有的虚拟机软件,都可以让你单独设定每个 Guest OS 的内存大小。
给 Guest OS 配置内存,要恰到好处。
如果配得太小,可能会导致 Guest OS 频繁使用虚拟内存,然后虚存频繁换页,就会导致频繁的磁盘 I/O,自然就拖慢【整台电脑】的性能。
如果配得太大,可能会导致留给 Host OS 的内存太小,然后 Host OS 频繁使用虚存,同样会出现频繁的内存换页和磁盘 I/O。【整台电脑】的性能同样会被拖慢。
如果电脑的物理内存【小于】4GB,你的 Host OS 可以装“32位”也可以装“64位”。俺通常建议想玩 VM 的同学装“64位”。因为装了“64位”之后,万一今后想扩展物理内存,就不存在 4GB 的限制。
如果电脑的物理内存【超过】4GB,你当然要直接上【64位】的操作系统。虽然从理论上讲,“32位”也可以玩转超过 4GB 的物理内存。不过捏,这需要通过一些旁门左道的技术(比如:PAE/物理地址扩展)。俺个人不建议大伙儿(尤其是技术菜鸟)去折腾这种旁门左道。
“机械硬盘”大伙儿应该都比较熟悉了,俺就不介绍了。单说说新兴的“固态硬盘”(洋文缩写是 SSD)。
相比传统的硬盘,SSD 的【优点】很明显,至少有如下几个:
1. 读写速度飞快(尤其是读速度比机械硬盘快更多)
2. 无噪音
3. 无惧震动
4. 不发热
5. 低功耗
但是 SSD 的【缺点】同样明显,至少有如下几个:
1. 损坏后难恢复(相比机械硬盘,损坏前无预兆,一旦损坏就整块报废)
2. 写入次数很有限(这个可以通过“损耗均衡技术”来解决)
3. 价格
俺个人觉得:多数情况下,【没有必要】刻意追求 SSD。基于性价比考虑(如今 SSD 的价格还是偏高),花小钱升级内存比花大钱买 SSD 对性能的提升更明显。
因为普通人用电脑,操作的软件大都【不是】“磁盘 I/O 密集型”。比如你用浏览器上网,浏览器对磁盘的读写就非常非常少。比如你用 Office 处理文档,即使你设置了“每分钟自动保存”,对磁盘的读写依然是非常少的。
有些同学可能会问:自己天天下载电影,天天在电脑上播放,这样算不算“磁盘 I/O 密集型”?俺觉得这个都算不上。因为在线下载,瓶颈在网速(家用宽带也就 10Mbps 的数量级,SATA 的传输率是 Gbps 的数量级)。即使是播放本地高清视频文件,也远达不到磁盘传输的上限。
相对而言,如果你的内存足够大,就可以禁用操作系统的“虚拟内存”。如此一来就避免了虚存换页导致的“磁盘 I/O”——在内存紧张的情况下,虚存交换导致的磁盘读写,是很惊人的。(下面的章节还会再提到“虚拟内存”的优化)
对于 PC 机而言,比较常见的硬盘接口有两种:一种是老式的 PATA(并行 ATA,也叫“IDE”),另一种是新式的 SATA(串行 ATA)。如今新买的电脑,估计都已经是 SATA 接口了。
因为电脑厂商要考虑旧操作系统的兼任性,所以大多数 PC 机的 BIOS 设置中,都保留了一个“IDE”的兼容模式。在新买的电脑中,有的电脑 BIOS 默认设置是 ACHI(用于 SATA),有的默认设置是 IDE。
如果你不确定的话,建议看一下你电脑的 BIOS 设置,看看硬盘的工作模式是哪个。如果依然是 IDE 模式,赶紧改成 ACHI 模式。因为 ACHI 模式才能完全发挥 SATA 接口的性能。
某些虚拟机软件同时支持多种虚拟磁盘格式(典型的就是 VirtualBox,支持好多种)。那么你在创建新的 Guest OS 时,应该选择哪种格式捏?俺的建议是:选择该虚拟机软件原生的格式。
以 VirtualBox 为例。
它同时支持 VDI、VMDK、VHD、HDD、QED 等多种格式。但是这些格式中,只有 VDI 是 VirtualBox【原生】支持滴——所谓的“原生支持”就是说,这个 VDI 格式本身就是 VirtualBox 的开发团队设计的。所以,对 VirtualBox 的用户而言,如无特殊情况,尽量用它原生的 VDI 磁盘格式。
下面是几款常见虚拟化软件【原生的】“虚拟磁盘格式”:
补充说明:
使用原生的磁盘格式,除了性能上的考虑,还有一个是基于“安全性”的考虑——对虚拟机用户而言,虚拟磁盘承载了你的数据,是非常重要滴。
由于原生的磁盘格式就是——虚拟化软件的开发团队自己设计的格式。所以对“原生格式”的支持,比较【不易】出故障和 Bug。
如果你的电脑只有【一块】物理硬盘,请跳过本小节。
如果你的电脑中同时插了多块物理硬盘,可以考虑用 RAID 来提升硬盘的读写性能。
由于大部分网友的电脑都是【单】硬盘,俺就不展开细聊了。有此需求的同学可以参考如下博文:
《扫盲 Linux 逻辑卷管理(LVM)——兼谈 RAID 以及“磁盘加密工具的整合”》
如今很多网友都用上 Win7。但是 Win7 的内存占用是比较大滴。如果你想在 VM 里面跑 Win7,建议你改用 Windows ThinPC。这是微软官方发布的版本,根据 Win7 进行精简(含 Win7 SP1)。它的系统安装盘小了很多,安装后的硬盘占用也小了很多,启动后的内存占用也小了很多。关于 ThinPC 的更多介绍,可以看俺之前的博文《Windows XP 大限已至——要不要换系统?如何换?》。
如果你喜欢折腾技术,还可以用 Linux 作为 Guest OS。相比 Windows,Linux 的优点之一是:可以深度定制。通过定制,可以让它变得很轻量级,只占用很少的内存。如今已经有很多现成的“轻量级 Linux 发行版”(请看维基百科的这个链接),其中一些只要几十兆内存就可以正常运行。
不熟悉 Linux 的同学可以参考俺之前的博文《扫盲 Linux:新手如何搞定 Linux 操作系统》。
比如说,如今网友们上网,经常会在浏览器中开启几十个标签页。当标签页开得很多时,浏览器占用的内存自然也猛增。但是不同的浏览器,差异还是很明显的。俺找到一篇今年(2014)的测评报告(英文原文,中文翻译),对比了 Chrome 34、Firefox 29、IE 11。当开启 40 个标签页的情况下,Firefox 的内存占用最小,IE 最大。并且 IE 占用内存几乎是 Firefox 的2倍。
俺举这个例子是想说明——选择性能更优秀的软件,会帮你节省很多内存。
Windows 是面向傻瓜用户的,而且 Windows 的应用范围很广(从商务办公到居家打游戏),所以它默认开启了很多系统服务。因为微软不确定这些服务是否会被用到,所以就把【可能用到】的服务,都设置为“自动”启动。
这样一来,确实方便了傻瓜用户,但是也导致默认的系统服务占用太多内存。所以你需要把那些你压根儿用不到的服务停掉(把启动方式修改为“手动”)。
(至于哪些服务可以停掉,大伙儿如果感兴趣,再另外写一篇)
很多软件(尤其是流氓软件)喜欢在“启动项”里面加东西。有些启动项压根儿用不到,岂不是白白浪费内存?
所以你应该清理一下那些没啥用的启动项。
其实在刚才,俺已经提到了“虚拟内存”的话题。
“虚拟内存”简称“虚存”,洋文叫做“virtual memory”,维基百科的词条在“这里”。
经常听到有人抱怨系统太卡。当系统运行变慢的时候,你观察一下系统的内存使用,然后再看一下电脑的硬盘灯。如果系统的内存使用已经很高,并且硬盘灯长亮。这通常说明系统在进行频繁的“虚存交换/虚存换页”。这个过程需要进行频繁的磁盘读写,从而拖慢了整个系统。于是你就觉得系统很卡。
关于“虚存”,俺的经验是:先把物理内存搞大,然后禁用虚存。由于物理内存足够,并且虚存被禁用,那么就不存在“虚存交换”,这可以降低很多的磁盘 I/O 过程。
套用到 VM 管理上——你必须给每个 Guest OS 配置足够大的内存,然后在 Guest OS 里面禁用“虚存”(具体如何禁用,你自己去 Google 一下)。
注意事项:
如果你要使用俺这个建议,要确保系统的内存是【足够大】滴!在禁用虚存的情况下,如果内存耗尽,可能会导致系统崩溃或者某个进程崩溃。
在本文的最后,俺顺便列举一些杂七杂八的注意事项。
虽然这条放在“杂项”,但是这条很重要。
当你安装好 Guest OS 的操作系统之后,首先记得在这个 Guest OS 里面安装虚拟机软件的驱动。对于 VMware 而言,这玩意儿叫做“VMware Tools”;对 VirtualBox 而言,这玩意儿叫做“Guest Additions”。
装好之后,除了改善很多 GUI 方面的体验(比如“鼠标的无缝融合”,比如“改进 Guest 的屏幕分辨率”),还可以改善其它的一些虚拟设备的性能。
如果你要运行一些涉及 3D 的应用(比如 3D 游戏),要记得去 Guest OS 的设置界面,勾选“3D 加速”这个选项(VirtualBox 和 VMware 都有此选项)。
Guest OS 的虚拟磁盘文件,通常都很大很大(相当于把 Guest OS 的整个硬盘内容放在一个文件中)。如果 Host OS 里面的杀毒软件尝试去扫描这些虚拟磁盘文件,由于文件太大,会导致扫描过程消耗非常多的磁盘 I/O,从而拖慢你整台电脑的性能。
所以,你必须对杀毒软件进行一些设置,禁止它去扫描那些存放 Guest OS 的目录。
回到本系列的目录
本文重点介绍【同时运行多个 VM 的速度优化】。俺会从“硬件选型”和“软件设置”两个角度分别来聊。如果你是第一次看本系列,建议你先看完前面几篇,再看本文。
★CPU(中央处理器)的【虚拟化技术】
在虚拟机的速度优化中,“虚拟化技术”是非常重要滴,可惜又少有人了解。所以俺把它放在本文第一个章节。
◇啥是“虚拟化技术”?
“虚拟化技术”全称是“x86 硬件虚拟化技术”,维基百科的解释在“这里”。为了打字省力,以下简称“VT”。
该技术是在【硬件】层面额外提供一些机制,这些机制仅仅用于“虚拟化”方面。如果你的电脑不是用来跑“虚拟机”,VT 技术对你而言毫无用处。
为啥要在硬件层面额外提供这样一种技术捏?因为 x86 的体系结构,天生就【不适合】用来搞“操作系统虚拟化”(个中缘由,在本文评论区有相关讨论,这里就不细谈了)但是最近10多年来,“虚拟化”是大势所趋。所以 Intel 和 AMD 都在自家的芯片上提供了适合“虚拟化”的扩展机制。对 Intel 芯片而言,称之为“Intel-VT”(也叫“VT-x”);对 AMD 芯片而言,称之为“AMD-V”。
请注意,VT 只在部分型号的芯片上提供。也就是说,不论是 Intel 还是 AMD,都只有某些型号的芯片是支持 VT 滴。
◇VT 有啥用?
如果要从原理上阐述 VT 的用处,需要涉及到 x86 架构的设计及其缺陷,说来话长啊。考虑到篇幅,俺只举几个例子。
举例1:
有了 VT 之后,如果 Guest OS 中需要执行 CPU 的特权指令,虚拟机软件可以利用 VT 原生支持(硬件层面搞定);如果没有 VT,碰到这种情况就只能靠软件模拟运行(靠软件模拟,效率会差很多!)。
很多同学抱怨电脑跑 VM 太慢,其中一部分人的原因就是——CPU【不】支持 VT。
举例2:
有了 VT 之后,你可以在“32位”的 Host OS 里面虚拟出“64位”的 Guest OS;若没有 VT 支持,就无法在“32位”上虚拟“64位”。
◇如何判断“VT 是否可用”?
首先,你应该去查一下自己的电脑是啥型号的,然后 Google 一下该型号的硬件配置,通常都可以在那些电脑行情网站(比如:太平洋电脑网、中关村在线)上找到该型号使用的 CPU 规格。在 CPU 规格中,通常就会提到这款 CPU 是否支持 VT。万一在 CPU 规格中没有提及是否支持 VT,你可以根据该 CPU 的详细型号,再到 Intel 或 AMD 的官网上查,肯定能查到相关说明。
假如你查到自己的 CPU 是支持 VT 的,还没完。你还得到操作系统里面检验一下,看 VT 在操作系统层面是否可见。
对于使用 Windows 的同学
Intel 和 AMD 各自都提供了专门的检测工具。不过俺还是推荐用微软提供的检测工具(Intel & AMD 通吃)。下载链接在“这里”。该工具是绿色的(免安装),在 Host OS 中运行它,就会提示你的系统是否支持 VT。
对于使用 Linux 的同学
请自行查看 Host OS 中的
/proc/cpuinfo
文件(命令如下)对于 Intel 芯片,搜索 vmx 标志。
cat /proc/cpuinfo | grep vmx对于 AMD 芯片,搜索 svm 标志。
cat /proc/cpuinfo | grep svm
◇疑难解答
如果你上网查到自己的 CPU 支持 VT,但用微软的检测工具却显示不支持,那么很可能是你【没有】在 BIOS 中开启 VT 设置。
如果你在 BIOS 中开启了 VT,但是微软的检测工具还是报告说“不支持 VT”,那么还有如下几种可能:
1. 有些电脑在系统启动时会锁定 VT 设置。所以你必须先【关机】,然后再开机并进入 BIOS 界面,再去修改 VT 设置。如果你只是【重启动系统】,没有进行【关机】操作,可能会导致 VT 的修改没生效。
2. 极少数便携式电脑在 BIOS 修改 VT 扩展之后,要进行【完全放电】,才能让修改生效。
3. 检查一下你的芯片驱动是否装对了
★【CPU】的并行能力
◇名词解释
所谓的“并行”(parallel),通俗而言就是:让 CPU 可以同时干多个事情。
CPU 的并行能力,主要通过三种技术来实现:多处理器(multi processor)、多核(multi core)、超线程(hyper threading)。
至于这三种的详细解释,俺就偷个懒,大伙儿自己去看维基百科吧。
◇几种并行技术的性能对比
这三种 CPU 的并行技术,其优缺点对比(尤其是前两种),网上有不少口水战。客观地讲,在不同的使用场景,不同技术的表现也是不同滴。所以很难一概而论地说哪个技术更好。
在“多 VM 同时运行”的场景下,俺个人认为:
其它指标相同的情况下,“N 个单核的 CPU”优于“一个 N 核的CPU”
其它指标相同的情况下,“一个双核的单线程 CPU”优于“一个单核的超线程 CPU”(注:“超线程”通常指“双线程”)
◇购买时的考虑
如果你正打算采购一台电脑,并且计划在该电脑上跑多个 VM。从“性价比”的角度考虑,你应该挑选“单 CPU 多核”。
因为个人用的电脑,主板大都只支持【单个 CPU】;支持多 CPU 的电脑,价格要高出很多。所以在性价比考虑之下,只能退而求其次,选“单 CPU 多核”——这是比较划算的方案。
至于应该买“几核”的 CPU,俺的建议是——在你的钞票预算内,核心数【多多益善】。
◇配置时的考虑
主流的虚拟机软件(VMware 和 VirtualBox)都可以指定 Guest OS 使用的 CPU 数量。
对于 VirtualBox,它提供的界面上让你设置的是“虚拟 CPU 数”(对应的是“核心数”)。你设置的数量要【小于等于】你物理 CPU 的“总核心数”(即使是超线程的 core 也只算1个)。
对于 VMware,它提供的界面上可以让你设置“CPU 数”与“每 CPU 核心数”。此处的设置比 VirtualBox 复杂。大伙儿可以参考 VMware 官网的文档(链接在“这里”)。
通常情况下,你只需设置为跟你的物理 CPU 的情况一致,就可以了。但是有些特殊情况,俺需要提醒一下。
VMware 下的特殊情况:
微软提供的某些 Windows 版本,会限制“可用 CPU 数”(这是微软的销售策略导致滴)。比如 Windows Server 2003 Standard Edition 限定了最多只能用4个 CPU(此处指【processor】,不是 core);比如 WinXP 最多支持2个 CPU(也是指 processor)。如果你分配给 Guest OS 的 CPU(processor) 超过了该 Windows 的“CPU 上限”,那超出的部分就浪费啦。
★【内存】相关的优化
相比 CPU,内存方面没有太多讲究。
◇购买时的考虑
如果你正在考虑买电脑,并且你想跑多个 VM,在预算范围内尽量买内存大的,或者是买来之后自己加内存。
需要多大的内存,取决于你需要【同时运行】的 VM 数量,以及每个 VM 的用途。
如果你善于优化,即使不大的内存,也可以同时跑好几个 VM(本文后续章节会稍微聊一下 Guest OS 的优化)。
◇配置时的考虑
目前所有的虚拟机软件,都可以让你单独设定每个 Guest OS 的内存大小。
给 Guest OS 配置内存,要恰到好处。
如果配得太小,可能会导致 Guest OS 频繁使用虚拟内存,然后虚存频繁换页,就会导致频繁的磁盘 I/O,自然就拖慢【整台电脑】的性能。
如果配得太大,可能会导致留给 Host OS 的内存太小,然后 Host OS 频繁使用虚存,同样会出现频繁的内存换页和磁盘 I/O。【整台电脑】的性能同样会被拖慢。
◇32位 vs 64位
如果电脑的物理内存【小于】4GB,你的 Host OS 可以装“32位”也可以装“64位”。俺通常建议想玩 VM 的同学装“64位”。因为装了“64位”之后,万一今后想扩展物理内存,就不存在 4GB 的限制。
如果电脑的物理内存【超过】4GB,你当然要直接上【64位】的操作系统。虽然从理论上讲,“32位”也可以玩转超过 4GB 的物理内存。不过捏,这需要通过一些旁门左道的技术(比如:PAE/物理地址扩展)。俺个人不建议大伙儿(尤其是技术菜鸟)去折腾这种旁门左道。
★【磁盘】相关的优化
◇机械硬盘 VS 固态硬盘
“机械硬盘”大伙儿应该都比较熟悉了,俺就不介绍了。单说说新兴的“固态硬盘”(洋文缩写是 SSD)。
相比传统的硬盘,SSD 的【优点】很明显,至少有如下几个:
1. 读写速度飞快(尤其是读速度比机械硬盘快更多)
2. 无噪音
3. 无惧震动
4. 不发热
5. 低功耗
但是 SSD 的【缺点】同样明显,至少有如下几个:
1. 损坏后难恢复(相比机械硬盘,损坏前无预兆,一旦损坏就整块报废)
2. 写入次数很有限(这个可以通过“损耗均衡技术”来解决)
3. 价格
俺个人觉得:多数情况下,【没有必要】刻意追求 SSD。基于性价比考虑(如今 SSD 的价格还是偏高),花小钱升级内存比花大钱买 SSD 对性能的提升更明显。
因为普通人用电脑,操作的软件大都【不是】“磁盘 I/O 密集型”。比如你用浏览器上网,浏览器对磁盘的读写就非常非常少。比如你用 Office 处理文档,即使你设置了“每分钟自动保存”,对磁盘的读写依然是非常少的。
有些同学可能会问:自己天天下载电影,天天在电脑上播放,这样算不算“磁盘 I/O 密集型”?俺觉得这个都算不上。因为在线下载,瓶颈在网速(家用宽带也就 10Mbps 的数量级,SATA 的传输率是 Gbps 的数量级)。即使是播放本地高清视频文件,也远达不到磁盘传输的上限。
相对而言,如果你的内存足够大,就可以禁用操作系统的“虚拟内存”。如此一来就避免了虚存换页导致的“磁盘 I/O”——在内存紧张的情况下,虚存交换导致的磁盘读写,是很惊人的。(下面的章节还会再提到“虚拟内存”的优化)
◇记得切换物理磁盘的【工作模式】
对于 PC 机而言,比较常见的硬盘接口有两种:一种是老式的 PATA(并行 ATA,也叫“IDE”),另一种是新式的 SATA(串行 ATA)。如今新买的电脑,估计都已经是 SATA 接口了。
因为电脑厂商要考虑旧操作系统的兼任性,所以大多数 PC 机的 BIOS 设置中,都保留了一个“IDE”的兼容模式。在新买的电脑中,有的电脑 BIOS 默认设置是 ACHI(用于 SATA),有的默认设置是 IDE。
如果你不确定的话,建议看一下你电脑的 BIOS 设置,看看硬盘的工作模式是哪个。如果依然是 IDE 模式,赶紧改成 ACHI 模式。因为 ACHI 模式才能完全发挥 SATA 接口的性能。
◇虚拟磁盘【格式】的选择
某些虚拟机软件同时支持多种虚拟磁盘格式(典型的就是 VirtualBox,支持好多种)。那么你在创建新的 Guest OS 时,应该选择哪种格式捏?俺的建议是:选择该虚拟机软件原生的格式。
以 VirtualBox 为例。
它同时支持 VDI、VMDK、VHD、HDD、QED 等多种格式。但是这些格式中,只有 VDI 是 VirtualBox【原生】支持滴——所谓的“原生支持”就是说,这个 VDI 格式本身就是 VirtualBox 的开发团队设计的。所以,对 VirtualBox 的用户而言,如无特殊情况,尽量用它原生的 VDI 磁盘格式。
下面是几款常见虚拟化软件【原生的】“虚拟磁盘格式”:
软件名称 | 原生磁盘格式 |
---|---|
VirtualBox | VDI |
各种 VMware | VMDK |
Virtual PC Virtual Server | VHD |
QEMU | QED |
补充说明:
使用原生的磁盘格式,除了性能上的考虑,还有一个是基于“安全性”的考虑——对虚拟机用户而言,虚拟磁盘承载了你的数据,是非常重要滴。
由于原生的磁盘格式就是——虚拟化软件的开发团队自己设计的格式。所以对“原生格式”的支持,比较【不易】出故障和 Bug。
◇RAID 的考虑
如果你的电脑只有【一块】物理硬盘,请跳过本小节。
如果你的电脑中同时插了多块物理硬盘,可以考虑用 RAID 来提升硬盘的读写性能。
由于大部分网友的电脑都是【单】硬盘,俺就不展开细聊了。有此需求的同学可以参考如下博文:
《扫盲 Linux 逻辑卷管理(LVM)——兼谈 RAID 以及“磁盘加密工具的整合”》
★优化“Guest OS 的内存占用”
◇使用“更省内存”的操作系统
如今很多网友都用上 Win7。但是 Win7 的内存占用是比较大滴。如果你想在 VM 里面跑 Win7,建议你改用 Windows ThinPC。这是微软官方发布的版本,根据 Win7 进行精简(含 Win7 SP1)。它的系统安装盘小了很多,安装后的硬盘占用也小了很多,启动后的内存占用也小了很多。关于 ThinPC 的更多介绍,可以看俺之前的博文《Windows XP 大限已至——要不要换系统?如何换?》。
如果你喜欢折腾技术,还可以用 Linux 作为 Guest OS。相比 Windows,Linux 的优点之一是:可以深度定制。通过定制,可以让它变得很轻量级,只占用很少的内存。如今已经有很多现成的“轻量级 Linux 发行版”(请看维基百科的这个链接),其中一些只要几十兆内存就可以正常运行。
不熟悉 Linux 的同学可以参考俺之前的博文《扫盲 Linux:新手如何搞定 Linux 操作系统》。
◇使用“更省内存”的软件
比如说,如今网友们上网,经常会在浏览器中开启几十个标签页。当标签页开得很多时,浏览器占用的内存自然也猛增。但是不同的浏览器,差异还是很明显的。俺找到一篇今年(2014)的测评报告(英文原文,中文翻译),对比了 Chrome 34、Firefox 29、IE 11。当开启 40 个标签页的情况下,Firefox 的内存占用最小,IE 最大。并且 IE 占用内存几乎是 Firefox 的2倍。
俺举这个例子是想说明——选择性能更优秀的软件,会帮你节省很多内存。
◇禁用不需要的系统服务(service)
Windows 是面向傻瓜用户的,而且 Windows 的应用范围很广(从商务办公到居家打游戏),所以它默认开启了很多系统服务。因为微软不确定这些服务是否会被用到,所以就把【可能用到】的服务,都设置为“自动”启动。
这样一来,确实方便了傻瓜用户,但是也导致默认的系统服务占用太多内存。所以你需要把那些你压根儿用不到的服务停掉(把启动方式修改为“手动”)。
(至于哪些服务可以停掉,大伙儿如果感兴趣,再另外写一篇)
◇去掉不需要的启动项(auto run)
很多软件(尤其是流氓软件)喜欢在“启动项”里面加东西。有些启动项压根儿用不到,岂不是白白浪费内存?
所以你应该清理一下那些没啥用的启动项。
◇虚拟内存的设置
其实在刚才,俺已经提到了“虚拟内存”的话题。
“虚拟内存”简称“虚存”,洋文叫做“virtual memory”,维基百科的词条在“这里”。
经常听到有人抱怨系统太卡。当系统运行变慢的时候,你观察一下系统的内存使用,然后再看一下电脑的硬盘灯。如果系统的内存使用已经很高,并且硬盘灯长亮。这通常说明系统在进行频繁的“虚存交换/虚存换页”。这个过程需要进行频繁的磁盘读写,从而拖慢了整个系统。于是你就觉得系统很卡。
关于“虚存”,俺的经验是:先把物理内存搞大,然后禁用虚存。由于物理内存足够,并且虚存被禁用,那么就不存在“虚存交换”,这可以降低很多的磁盘 I/O 过程。
套用到 VM 管理上——你必须给每个 Guest OS 配置足够大的内存,然后在 Guest OS 里面禁用“虚存”(具体如何禁用,你自己去 Google 一下)。
注意事项:
如果你要使用俺这个建议,要确保系统的内存是【足够大】滴!在禁用虚存的情况下,如果内存耗尽,可能会导致系统崩溃或者某个进程崩溃。
★杂项
在本文的最后,俺顺便列举一些杂七杂八的注意事项。
◇在 Guest OS 中安装虚拟化的相关驱动
虽然这条放在“杂项”,但是这条很重要。
当你安装好 Guest OS 的操作系统之后,首先记得在这个 Guest OS 里面安装虚拟机软件的驱动。对于 VMware 而言,这玩意儿叫做“VMware Tools”;对 VirtualBox 而言,这玩意儿叫做“Guest Additions”。
装好之后,除了改善很多 GUI 方面的体验(比如“鼠标的无缝融合”,比如“改进 Guest 的屏幕分辨率”),还可以改善其它的一些虚拟设备的性能。
◇3D 加速
如果你要运行一些涉及 3D 的应用(比如 3D 游戏),要记得去 Guest OS 的设置界面,勾选“3D 加速”这个选项(VirtualBox 和 VMware 都有此选项)。
◇【禁止】Host OS 的杀毒软件扫描“虚拟磁盘文件”
Guest OS 的虚拟磁盘文件,通常都很大很大(相当于把 Guest OS 的整个硬盘内容放在一个文件中)。如果 Host OS 里面的杀毒软件尝试去扫描这些虚拟磁盘文件,由于文件太大,会导致扫描过程消耗非常多的磁盘 I/O,从而拖慢你整台电脑的性能。
所以,你必须对杀毒软件进行一些设置,禁止它去扫描那些存放 Guest OS 的目录。
回到本系列的目录
版权声明
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2014/09/system-vm-6.html
本博客所有的原创文章,作者皆保留版权。转载必须包含本声明,保持本文完整,并以超链接形式注明作者编程随想和本文原始地址:
https://program-think.blogspot.com/2014/09/system-vm-6.html