软件虚拟化 vs 硬件虚拟化

本篇文章从这张图片开始

大家应该都听过毛不易的《消愁吧》,里面有句歌词是:一杯敬朝阳,一杯敬月光...我觉得人真的要敬畏未知,不然容易闹出笑话来,比如这位网友...此时我又想起了韩寒的一句话:人还是要多读书,才能不丢人

CPU虚拟化,是一种硬件虚拟化技术,是由CPU提供的!你们经常用的docker、k8s,是一种软件虚拟化技术,是由Linux内核提供的。本篇文章,跟大家展开说说硬件虚拟化vs软件虚拟化

不论是软件虚拟化技术,还是硬件虚拟化技术,它们诞生的最直接原因都是给创建虚拟机提供基础设施。早期,是没有硬件虚拟化技术的,只有软件虚拟化技术。你们用过VMware吗,早期,它也是基于软件虚拟化技术实现的,今天的VMware,纯纯的基于硬件虚拟化技术实现

Linux平台下的qemu,你可以选择让它基于软件虚拟化技术运行,或者硬件虚拟化技术运行,开关就是个参数:-enable-kvm

如果qemu不加参数-enable-kvm,它是如何运行的呢?它自己需要模拟解析CPU指令,比如CPU的mov指令

这里只是举个例子,qemu内部实际使用的是性能更高的解决方案:TCG,这个技术有点类似Java虚拟机JVM的模板解释器或即时编译JIT,上面的伪代码类似JVM的字节码解释器

TCG的工作流程是这样的

是不是看到这,你还是不知道TCG的性能为什么比上面伪代码的效率高?举个例子(拿这句话去问AI就能得到答案)

CPU虚拟化技术,是一种硬件虚拟化技术,又名vt。qemu加参数-enable-kvm就是基于硬件虚拟化技术运行,kvm又是什么呢?kvm与vt是什么关系呢?docker与它们又有什么区别呢?

废话不多说,直接上图

kvm,是Linux内核的一个驱动模块,是在Linux系统中写虚拟机的基础设施,它是基于vt实现的。你可以这样理解:虚拟机是精装修房,kvm是简装修房,vt是毛坯房

举个代码例子,你可能更容易理解,比如你基于vt写虚拟机,代码类似于

如果基于kvm写呢,两句话搞定

不是说基于kvm写虚拟机不需要做vt写虚拟机做的那些,而是那些事,是写虚拟机都要做的,kvm做了,所以你基于kvm写虚拟机,更省事!

CPU虚拟化是什么,vt是什么,kvm是什么,kvm与vt的关系,这四个问题已经讲清楚了!接下来说docker

严格意义上来说,docker不算一种软件虚拟化技术,它更像操作系统虚拟化技术。如何判断是不是虚拟化技术呢?就看它是不是在模拟硬件!很显然,docker不是!但是docker给人的感觉,又是虚拟机

docker虽然给人的感觉是虚拟机,但是它运行的不是一个完整的操作系统,它运行的更像是一个个应用

你可能想说:docker也可以运行Ubuntu镜像呀!是的,没错,但是这个Ubuntu镜像是没有Linux内核的,只是Ubuntu的用户态!其实在docker的眼里,Ubuntu的用户态也只是一个应用而已!

docker是如何实现的呢?基于Linux内核提供的namespace+cgroups+overlayfs实现的。细节不展开了,如果你想深入学习,我之前做过课程《手写docker》

而真正的虚拟机,运行的都是完整的操作系统,包含操作系统内核、操作系统用户态、应用...甚至可以在虚拟机中打游戏!

至此,软件虚拟化的全部,与硬件虚拟化的全部,就分享完了!如果你收获满满,我感受到你的欣赏,你的谢意,能不能帮我点下在看、转发,万分感谢!

如果你对上面的内容感兴趣,想看我之前的文章及我的奋斗历程。白手起家程序员的职场心得,欢迎看我【个人简介】详细了解。

相关推荐
码士集团小青15 分钟前
面霸篇:高频 Java 基础问题(核心卷一)
linux·服务器·数据库·redis·缓存·1024程序员节
水饺编程1 小时前
第2章:Linux 基础,切换用户
linux·c语言·汇编
Lsetea2 小时前
curl指定--tlsv1.2仍连接TLS1.3:最低版本与tls-max排查
linux·https·ssl证书·curl·tls
Lsetea2 小时前
curl访问HTTPS报47 Too many redirects:重定向循环与max-redirs排查
linux·http·https·ssl证书·curl
CCblandy2 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
9624563 小时前
一次 Dell PowerEdge R750xs 启动故障复盘:从 iDRAC 带外管理到 Linux 多内核回退与 initramfs 重建
linux·运维·服务器
Zevalin爱灰灰4 小时前
Linux入门第一部分(Ubuntu入门篇) 第二章 浅尝Ubuntu(二)
linux·嵌入式·1024程序员节
Random Glow4 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
北京中科新远科技5 小时前
高速接口兼容排查实战:OSFP、QSFP112与QSFP56如何逐层验证
linux·运维·网络
Ruiery5 小时前
Linux 6.6内核 CPU 深度解析(零):x86 内核引导协议 — 从 bootloader 到 main()
linux·运维·服务器