本文重点介绍【同时运行多个 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?m=0
有人打算整理一下关于编程随想下落的线索吗?(从正反两个方面来举证)
好多怪事都是人为的,第一在搞邪术如祭鬼封神献祭打call,其次是搞种姓的事,
这帮东西用老外的名义来操控挑拨玩弄这个那个,这也是奇葩的,和叫东土人找阿三还是鬼子去表达册封封禅这皇帝是东土的皇帝一样奇葩, ......
ym蜀人都不愿放手的东西如屁眼套路,幼女,献祭,老单和最高神位是有原因的,很值得去研究的 ......
即使博主能活着出狱,若要看到他更新六四系列,那也是在天朝发生了民主化之后,共产党不再有能力镇压批评者之时。
就算哪天中国情报部门不经司法程序,直接把人暗杀了,我也不会觉得奇怪。
https://www.zaobao.com.sg/realtime/china/story20241226-5649612
https://www.youtube.com/watch?v=ozVq_04XMro
如果出现了自杀场景,多半是政府秘密下令处决,并伪装成了自杀。
来自Firsthack的评论
而且,二审的发改率(发回重审+改判)是一个考核政绩的指标,高层认为这个数字越低说明冤假错案越少,然后下面就越容易升官。 ......
原神UID:310221197410210025
互动热线: 13524626271 上海移动
学历: 硕士
生日: 19741021
身高: 165 ......
周欣身份证310105197106042383
户籍地址 :上海市闵行区吴中路429弄15号501室
同户人 :薛军,男,310106196903180414,1969年03月18日; ......
希望各大媒体都报道这几个名字:审判长周欣,审判员:凌莉、须梅华。
家属贝震颖推特号:Birds_b_r_32309
多谢分享“中药注射剂”等国产医疗行业的相关丑闻。
另外,关于疫情期间的乱象,俺整理了一篇:
《每周转载:白纸抗议年的“动态清零”灾难(网文14篇,多图)》
多年前不记得在哪篇博文的评论区和博主讨论叙利亚的命运,当时叙利亚的局势还未尘埃落定。可惜博主现在大牢内,看不到。
这次叙利亚的民主转型发生在俄国陷入战争的泥沼的背景下。 ......
这个是个邪术,第一个是给上面看(不知什么鬼),其次的就真的会指导目标去实际地去做这么些的犯罪邪恶,侵犯幼女的情节是经常频繁重复地出现地,和侵犯女性,还有就是生命 ......
估计到最高法院也没戏,可能会以9:0判决禁抖音。
欢迎提出不同观点。
你提到的是这二者之间的差异,俺也同意这些差异确实存在。
但是,俺要开始说但是了。从本文,咱们也可以讨论这二者之间的共性,至少包含以下方面: ......
玩邪术玩出个什么结果好歹给公开一下,拼命玩邪术还一声不吭,很危险的,要分享分享,劳资帮你们来研究研究
劳资相信这帮东西是能穿越时空的,现在是2019年的ZS,时空被改变穿越了。穿越时空的套路。这帮东西几千年都一个屌样,来几个十级地震都不会任何改变。 ......
现在的两党是争先比谁对华更强硬,已经通过的制裁法案不会松绑,已经加的关税也不会再降,否则就会被在野党骂成“通敌叛国”。
明年1月19日之前,抖音会被禁。
每天上网的好多人都在聊政治呢,难道你要把每一个聊政治的人都抓起来判刑?那也没用。因为年轻人越来越倾向于认为政治制度才是造成他们被困在他那个阶层的重要原因。 ......
这个博客对于政府的批评,大部分都是有理有据。你要是觉得哪里不对,可以反驳博主嘛。判7年是究竟有多心虚? ......
以色列做任何事,都是美国包容范围,和美国民意无关(甚至抗议都无效)。台湾今后也会差不多。
国会一旦提出新的关于台湾的法案,无论是军售,亦或是改善台湾的国际地位等等,都很容易造成近乎【全票通过】。 ......
然而,公报本身只是行政政府的声明,其效力不如法律。 ......
然而,现在的人们,对于不能证明是否为间谍的走线客,也不太宽容。估计人们会支持一律用“有间谍嫌疑”之类的理由,实行一律驱逐的政策。 ......
但是,有些两党已经形成共识的事,其实是不受太大影响的。例如:把台湾武装成以色列。
所以我估计,中共在川普第2任期的前2年之内,就会对台湾动手。
因为这次GOP在众院优势实在太小了,稍微发生一点差错,钟摆效应会让民主党夺回之。
参议院不好说。如果连参议院也丢了,那川普后两年就可能成为跛脚总统,啥事都干不了。
不服者会选择:明着顺从,其实背地里跟共产党对着干。
众议院估计是个险胜。
上次共和党在众议院也是微弱优势,导致议长难产。
这次应该不会难产,因为有川普在,他只要在台上喊几句,就可以让任何一个人当议长,其它共和党议员不会阻挠。 ......
根据NBC新闻:
https://www.nbcnews.com/politics/immigration/trump-may-deport-hundreds-thousands-migrants-biden-allowed-legally-ent-rcna179357 ......
就是先用民调测量其它选举,比如某个地方议员的选举,然后和民调进行对比,看女性候选人是否严重吃亏,是否和民调严重不符。
如果发生该现象,那得出的差额数字,就是该地隐藏的“害羞的性别歧视者”的百分比。 ......
因为“害羞的川粉”等受访者不诚实回答问题的现象,仍然使得民调失真。
贺锦丽连普选票都输了。
你民主党输得这么惨,总不能反思为啥没去迎合那些“黑命贵零元购”之类的种族主义口号吧?反思搞种族平权搞得过头了?
......
美国出了个川贼东。抗战前没做到【攘外必先安内】,这下麻烦大了。
恭喜美国又创造了世界纪录。
估计是川普险胜。
因为大法官的任命是由总统和参议院共同决定,如果总统是川普,那他就会提名非常有争议的保守派大法官。
......
......
川普险胜29%
其它情况基本可以排除。