ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

虚拟化到底虚拟了什么?从CPU、内存到容器与云计算全解析

虚拟化到底虚拟了什么?从CPU、内存到容器与云计算全解析 先交代一下背景我从毕业开始就在机房和虚拟机打交道早期用VMware Workstation装Linux折腾各种服务器环境后来在公司管理几百台物理机的KVM和H3C/华为的虚拟化集群再后来带了云平台运维团队。说实话虚拟化这门技术刚入门时最容易让人懵的不是命令记不住而是搞不懂一个问题——大家都在说虚拟化它到底“虚拟”了什么如果不把这个底层想明白后面碰到“模块hv启动失败”“Docker Desktop未检测到虚拟化支持”“该固件的虚拟化支持未开启”这类报错基本只能靠搜索引擎硬猜运气好了照抄搞定运气不好直接重装系统。这篇文章我就从核心原理讲起再把Type 1/Type 2/容器的对比、常见报错的排查链路、以及从虚拟化延伸到云计算的完整路径一次性说透。适合刚入门的运维新手也适合已经搭好环境但总是出问题、想系统梳理一遍的老铁。1. 虚拟化的本质CPU、内存与IO的资源再分配1.1 CPU虚拟化从指令翻译到VM Entry/VM Exit很多人以为虚拟化就是“用软件模拟一台电脑”这种理解在原理层面是错的。虚拟化的核心不是“模拟硬件”而是让多个操作系统共享同一套物理硬件同时每个操作系统都以为自己独占整台机器。这里面最棘手的问题就是CPU怎么分。CPU有一堆特权指令和系统寄存器这些资源在x86架构里是分ring级别的操作系统内核跑在ring 0用户程序跑在ring 3。正常情况下全机器只有一套内核在ring 0它可以随意修改CR0、CR3、IDTR这些寄存器可以关中断、开中断。现在问题来了一台物理机上如果要跑10个虚拟机意味着有10个“觉得自己是唯一内核”的Guest OS都以为自己能碰这些特权寄存器。如果它们真的同时操作整个系统直接就崩了。没有硬件辅助虚拟化之前Hypervisor只能靠二进制翻译把Guest OS里的特权指令“翻译”成无害的等价操作。比如一个Guest内核想往控制寄存器里写值Hypervisor捕获到这条指令先记录到影子状态里再放行。听起来简单实际上每条特权指令都要经过一次完整的陷入、翻译、执行、返回流程性能损耗极其夸张。我记得当年用纯软件虚拟化跑一个Windows XP开个机都能等好几分钟运行起来更是PPT一样。这就是为什么早年虚拟化只停留在实验室里上不了生产。2005年前后是个分水岭Intel VT-x和AMD-V把虚拟化能力直接做进了CPU指令集。CPU多出了VMX root和VMX non-root两种工作模式。Hypervisor运行在VMX root模式Guest OS运行在VMX non-root模式。Guest内核再执行特权指令时CPU硬件会自动触发VM Exit把控制权交还给HypervisorHypervisor处理完之后再通过VM Entry切回去。这个陷入和切回的动作由硬件完成速度比软件翻译快了一个数量级。日常运维里怎么确认CPU支不支持硬件虚拟化Linux下直接查看grep -E vmx|svm /proc/cpuinfo能看到vmx标志说明Intel的VT-x已经开了svm则是AMD处理器。如果这条命令没有输出先别急着怪机器大半是BIOS里没开VT或者是虚拟机里没把嵌套虚拟化打开。这里还想多说一句“嵌套虚拟化”。很多人在VMware Workstation里再装一个虚拟机虚拟机里又想跑KVM或者再跑一层VMware就会遇到“模块hv启动失败”或“在此主机上不支持嵌套虚拟化”。原因很直接你的第一层虚拟机默认没有把CPU的vmx标志暴露给内部的第二层Guest。此时需要到VMware的虚拟机设置里找到“处理器”勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”并且物理机的BIOS也要开着VT。一层一层透传下去才能支持多层虚拟化。1.2 内存虚拟化影子页表与EPT/NPTCPU虚拟化解决了指令的问题内存虚拟化则要解决地址空间的问题。Guest OS觉得自己有一块完整的物理内存从地址0开始到若干GB结束但实际上这块内存是Hypervisor从物理机里给它“编”出来的。这里涉及三条地址线Guest虚拟地址GVAGuest物理地址GPA宿主机物理地址HPA。正常非虚拟化系统里CPU只要做一次虚拟地址到物理地址的页表转换。虚拟化场景下Guest自身页表把GVA翻译成GPAHypervisor还得把GPA再翻译成HPA。每次内存访问都可能多出一次转换性能压力全在这里。早期没有硬件支持时Hypervisor用影子页表解决。影子页表相当于Hypervisor替每个Guest进程维护一份从GVA直接到HPA的映射表Guest自己的页表则被设为只读。Guest一旦尝试改页表就要陷入Hypervisor由它同步更新影子页表。这么做的问题很明显Guest里的进程数量多、切换频繁影子页表的同步开销巨大还特别消耗内存。后来Intel搞出了EPTAMD搞出了NPT做法很直观硬件直接支持两级页表转换。Guest访问内存时CPU通过Guest自己的页表完成GVA到GPA再通过EPT表完成GPA到HPA全过程由内存管理单元硬件完成不再需要每个Guest进程都维护影子页表。性能损耗从原来的百分之几十降到了个位数。现在生产环境的KVM、ESXi、Hyper-V走的都是这条路线。运维上跟内存虚拟化直接相关的还有一个优化点大页内存。普通的4KB页在内存很大的虚拟机里容易造成TLB抖动特别是跑数据库、跑JVM大堆的应用性能差距非常明显。KVM里可以给QEMU进程配置巨大页ESXi里的做法是给虚拟机预留内存并启用大页。我在实际项目里见过同一套Java应用从4KB页换成大页之后吞吐量能提升十几个百分点代价不过是宿主机内存分配方式调整了一下。1.3 IO虚拟化从设备模拟到virtio到SR-IOVCPU和内存搞定以后IO是最后一块硬骨头。Guest里的网卡、磁盘控制器其实都不是真的物理设备VMware Workstation里的那个“Intel e1000网卡”本质上是QEMU模拟出来的一个软件设备。全模拟方案最省事Hypervisor用纯软件模拟网卡声卡键盘鼠标Guest里的驱动直接使用这些设备的标准接口。兼容性无敌什么系统都能装但性能很差。因为每一次IO操作都要Guest陷入Hypervisor由模拟代码去做内存拷贝、状态转换网络包一多CPU就被这些翻译工作吃满了。半虚拟化方案的思路不是模拟真实设备而是在Guest驱动和Hypervisor之间约定好一套高效率的传输协议。最有名的就是virtio。Linux里创建KVM虚拟机时网卡和磁盘驱动几乎无脑选virtio模式不到万不得已不要选e1000那种模拟网卡。virtio的实质是Guest前端驱动和宿主机后端通过一块共享内存环形队列交换数据一次IO请求可以批量提交避免了大量VM Exit。我在实际压测里virtio网卡的吞吐可以接近物理网卡的九成而e1000模拟网卡能有六成就要烧高香了。再往上走一步是SR-IOV直通。物理网卡内部把自身能力拆分成一个PF和多个VFHypervisor直接把VF映射给GuestGuest驱动越过Hypervisor直接操作网卡硬件。这种模式的性能已经和物理机没区别缺点是灵活性差尤其是在线迁移基本做不了。因为Guest直接占用了物理设备VM搬到另一台宿主机就没有对应硬件了。所以生产环境里的取舍一般是核心数据库和高性能计算虚拟机用SR-IOV普通业务虚拟机用virtio。2. 主流虚拟化路线怎么选从Type 1、Type 2到容器2.1 Type 1和Type 2的差别以及你每天用的产品属于哪一类Hypervisor按部署方式分两类。Type 1是裸金属型Hypervisor直接装在物理硬件上不依赖宿主操作系统比如VMware ESXi、微软Hyper-V、KVM配合QEMU也算这一类。Type 2是宿主型Hypervisor作为普通应用程序跑在Windows、Linux或macOS之上比如VMware Workstation、VirtualBox。这里有一个容易混淆的点KVM严格来说只是Linux内核里的一个模块它自己不能独立成为一个Hypervisor真正跟它配合干活的是QEMU这个用户态进程。QEMU负责模拟设备、创建vcpu线程KVM负责把vcpu线程调度到物理CPU上执行。所以大家习惯把“KVM/QEMU”合在一起称为Type 1虚拟化。选择逻辑其实不复杂。做服务器、做云平台选Type 1性能好、资源开销低、稳定。个人开发调试在Windows上装VMware Workstation这种Type 2产品完全没问题图的是方便。但你要在Type 2环境里再模拟一个完整的企业级虚拟化平台那就得先确认嵌套虚拟化开关这也是我前面提过多次的坑。企业里很多人在Workstation里跑H3C CAS或者华为FusionCompute的测试环境一启动虚拟机就报“设备启动失败”十次里有八次是嵌套虚拟化没开甚至不知道需要开。2.2 KVMQEMU当前服务器虚拟化的绝对主力现在的服务器虚拟化市场KVM基本上是事实标准。OpenStack默认支持华为、H3C、深信服这些国内主流厂商的云平台底层基本都是KVM。原因有几个一是KVM免费二是基于Linux内核生态成熟三是社区活跃度极高。日常管理KVM环境大部分人不会直接敲QEMU命令而是用libvirt这一层管理工具。最简单的操作virsh list --all virsh start win10vm virsh shutdown win10vm virsh edit win10vmCPU信息和嵌套虚拟化状态可以这样查modprobe kvm_intel nested1 cat /sys/module/kvm_intel/parameters/nested如果输出是1说明嵌套虚拟化已经打开。如果要让虚拟机内部的系统也能开启VT还需要在虚拟机的CPU定义里把vmx标志透传进去cpu modehost-passthrough feature policyrequire namevmx/ /cpu这里有两个细节值得注意。第一host-passthrough模式几乎把宿主机的所有CPU特性直接放给Guest兼容性最好踩坑最少代价是热迁移时只能迁到相同型号的宿主机。第二如果你只是普通业务虚拟机不需要嵌套虚拟化最好不要开host-passthrough用host-model或者按需定义CPU型号就够否则会带来额外的生效风险。KVM的资源隔离靠的是cgroup和KVM的自身机制所以一台物理机上跑几十台虚拟机没有问题。我管过的环境中最常见的负载是2核4G的Web虚拟机一台32核128G内存的机器跑二十几台毫无压力只要内存别超分太多、磁盘IO别抢得太过分就行。2.3 容器到底算不算虚拟化共享内核与进程隔离很多人问过我怎么区分虚拟机和容器。一句话总结虚拟机里跑的是完整的、独立的操作系统包括自己的内核容器里跑的是进程这些进程共享宿主机内核只是通过Namespace和Cgroup做了隔离和资源限制。容器省去了Guest OS这层所以镜像小、启动快、密度高。同样一台机器虚拟机可能跑二十台容器可以跑上百个。缺点也很明显所有容器跟宿主机共用同一个内核不同容器之间隔离边界很弱。一个容器里执行了某些危险的内核操作理论上可能影响整个宿主机。而且你不能用容器跑一个Windows系统也不能跑一个跟宿主机内核不同版本的Linux发行版。Windows上的Docker之所以要依赖WSL2或Hyper-V本质上就是绕一层轻量虚拟机给Linux容器提供一个真正的Linux内核环境。选择准则其实很朴素业务适合跑容器就优先容器效率高业务确实需要独立内核、需要在虚拟机里再开虚拟化、或者跑老系统那就用虚拟机。不要盲目上容器也不要看到微服务就排斥虚拟机。很多传统企业的核心库和特殊外设系统虚拟机反而是最稳的。3. 虚拟化部署中最常见的三类报错与完整排查链路3.1 VMware Workstation“模块hv启动失败”嵌套虚拟化和Hyper-V打架VMware Workstation用户对这个报错应该不陌生完整提示类似“在此主机上不支持嵌套虚拟化。模块‘hv’启动失败。未能启”。我见过太多被这句话劝退的兄弟以为VMware坏了重装好几遍没用。这个报错的根因一般出在两个地方。第一你当前运行的虚拟机本身没有暴露VT-x给再内层的系统。解决方法是选中虚拟机右键“设置”进入“处理器”把“虚拟化Intel VT-x/EPT或AMD-V/RVI”勾上。前提是物理机的BIOS里已经开启了VT。第二你的Windows宿主机自己占用了VT-x最常见就是Hyper-V、Windows虚拟机监控程序、基于虚拟化的安全性这些功能在运行。Windows一旦开启Hyper-VVMware Workstation想直接操作VT-x就会冲突于是报hv相关错误。排查的顺序很重要不要一上来就乱关闭Windows功能。我建议按这个链路来打开任务管理器切到“性能”页选中CPU看右下角的“虚拟化”状态是“已启用”还是“已禁用”。如果显示禁用直接重启进BIOS把Intel Virtualization Technology或SVM Mode打开。如果虚拟化状态是“已启用”再到“启用或关闭Windows功能”里看有没有勾选Hyper-V、Windows虚拟机监控程序平台、Windows Hypervisor Platform这三个项。这三个和VMware Workstation共存时建议只保留Windows Hypervisor Platform如果VMware版本支持或者全部关闭。用管理员权限打开命令提示符输入bcdedit /set hypervisorlaunchtype off然后重启。这会把Windows的Hypervisor从启动链里移除VMware就能直接使用VT-x了。后面需要开回Hyper-V再执行bcdedit /set hypervisorlaunchtype auto如果你用的是Windows 11还要检查“内核隔离”里的“内存完整性”是不是开着。这个基于虚拟化的安全功能会显著拖慢甚至阻止VMware启动虚拟机。关掉内存完整性并重启很多诡异问题能直接消失。这里我给一个对比表排查的时候对照着看很直观现象虚拟化状态根因处理任务管理器显示虚拟化禁用已禁用BIOS未开VT重启进BIOS开启VT/SVMVMware报hv启动失败已启用Hyper-V或Windows Hypervisor占用VT-x关闭Hyper-V或设置hypervisorlaunchtype off嵌套虚拟化启动失败已启用虚拟机设置未勾选VT透传在虚拟机处理器设置中勾选VT-x/EPT虚拟机系统变慢已启用Windows 11内存完整性开启关闭内核隔离下的内存完整性并重启3.2 Docker Desktop“未检测到虚拟化支持”Windows平台的后端没准备好Windows上装Docker Desktop最常见的报错就是“Docker Desktop启动失败因为未检测到虚拟化支持。sign in to try restoring acc”。这句话的关键不在后面那个“sign in”而是“未检测到虚拟化支持”。Docker Desktop在Windows上有两种后端一个是WSL2一个是Hyper-V。WSL2本身依赖“虚拟机平台”这个Windows功能Hyper-V后端则依赖完整的Hyper-V虚拟机监控程序。无论用哪种底层都需要CPU的硬件虚拟化能力正常可用。排查时别急着重装Docker Desktop按顺序做先确认Windows功能是否完整。控制面板-程序-启用或关闭Windows功能里勾选“适用于Linux的Windows子系统”和“虚拟机平台”。在Windows 11里“虚拟机平台”可能显示为“虚拟机监控程序平台”别漏了。管理员权限运行PowerShell执行wsl --install或者手动安装内核更新包。如果WSL本身跑不起来Docker Desktop一定会报虚拟化相关的错。 3. 检查Hypervisor是否被显式关闭了。如果之前为了跑VMware Workstation执行过bcdedit /set hypervisorlaunchtype off现在忘了开回来Docker Desktop就会说检测不到虚拟化。此时先执行bcdedit /set hypervisorlaunchtype auto重启之后再启动Docker。 4. 在Docker Desktop的“Settings”里确认后端勾选的是WSL2而不是旧版Hyper-V除非你本来就打算整Hyper-V路线。还有一个Linux用户不需要关心的点Linux版Docker是直接跑在宿主机上的容器运行时不需要再虚拟化一层所以没有“未检测到虚拟化支持”这个说法。Windows平台的麻烦本质是微软把“虚拟化基础组件”和普通Linux容器功能捆在了一起。3.3 企业级虚拟化平台的“设备启动失败”与“固件虚拟化支持”先查BIOS再看嵌套H3C虚拟化软件、华为虚拟化平台、麒麟天逸终端虚拟化平台这几类产品的使用场景不尽相同但用户搜索最多的关键词高度一致设备启动失败、固件虚拟化支持。我在企业项目里被拉去救过很多次这类问题总结下来有一个通用排查思路。第一层是物理机固件。BIOS里必须开VT-x或SVM同时建议打开VT-d/AMD IOMMU因为很多企业平台的后端网络和存储直通功能依赖IOMMU。如果BIOS里没开虚拟机创建之后启动直接就失败报错内容往往含糊不清比如只说“设备启动失败”。第二层是CPU和虚拟机的兼容性。企业虚拟化平台对CPU型号有兼容列表新老CPU混在一个集群里虚拟机开了热迁移或CPU热添加就很容易启动失败。解决办法是给虚拟机设置一个全集群都能用的基础CPU模式关掉热迁移要求。另外如果虚拟机里配置了太多CPU核心超出了宿主机剩余物理资源也可能表现为启动失败。这时候看看宿主机负载把虚拟机的CPU和内存配置适度下调。第三层是嵌套虚拟化的场景。很多人为了省机器会在自己的VMware Workstation里跑一个H3C CAS的ISO镜像然后H3C里面再建虚拟机。这种情况下必须先确保Workstation虚拟机设置里勾选了VT-x透传还建议把“虚拟化IOMMU”也开上否则企业平台里创建的第一台虚拟机就启动不动。这个点很容易被忽略因为Workstation的默认设置不开IOMMU。还有一个跟终端虚拟化有关的常见坑屏幕、USB外设、打印机映射不上去。其实不是虚拟机起不来是VDI终端协议没把外设驱动传进去。排查时要先分清是“虚拟化平台起不来”还是“外设重定向失败”两者的解决路径完全不一样。前者查平台系统日志后者查终端代理程序和外设策略。3.4 被反复搜索的“去虚拟化”到底是怎么一回事“去虚拟化工具”“vmware workstation底层去虚拟化”“虚拟机去虚拟化”这些词在热搜里一直很有热度。我必须先说明这件事的合法边界。虚拟化环境中某些软件会主动检测自己是否运行在虚拟机里可能是因为驱动兼容、授权策略或安全防护需求导致它们在虚拟机里运行异常。去虚拟化的目标是修正这些检测特征让虚拟机环境更像物理机从而让软件正常工作。这个手段在软件兼容性测试、驱动开发、安全研究里都有合法用途但绝不能用来绕过授权验证或其他违法违规行为。那么在技术层面虚拟机的“马脚”通常暴露在几个地方。第一个是CPUID指令的Hypervisor位。系统执行CPUID的时候如果leaf在1的ECX寄存器里bit31是1说明当前运行环境存在Hypervisor。很多反虚拟机检测就是查这个位。第二个是SMBIOS/DMI信息比如主板制造商、产品型号。VMware的虚拟BIOS会在SMBIOS里填写“VMware, Inc.”等字样一查一个准。第三个是特殊的设备ID比如VMware SVGA显卡的PCI设备号、Hyper-V的VMBus设备。第四个是时间和时钟源特征虚拟机的定时器精确度跟物理机有明显差异。VMware Workstation里常见的去虚拟化参数大概是这样的hypervisor.cpuid.v0 FALSE monitor_control.vt32 TRUE board-id.reflectHost TRUE SMBIOS.reflectHost TRUE这些参数的本质是把VMware的CPUID信息暴露、主板信息、SMBIOS信息隐藏掉。实际效果因VMware版本和Guest系统不同而差异很大改了之后也可能带来不稳定。我的建议是只有当某种软件明确要求“必须在物理机环境运行”、并且你确实在做合规的兼容性测试时才考虑去修改这些特征。常规业务虚拟机千万别折腾性能稳定性优先。4. 虚拟化如何通向云计算资源池、GPU切分与运维技能树4.1 从单机虚拟化到资源池集群、热迁移与超分比虚拟化做到一定程度单台物理机的资源总会被用完。云计算的本质是把多台物理机的CPU、内存、存储和网络聚合成一个大的逻辑资源池再按需分配给业务。这里面的关键能力是热迁移。KVM或vSphere在线迁移虚拟机时Guest系统全程无感知网络和磁盘IO通过共享存储或内存预拷贝技术交给目标宿主机。热迁移对CPU兼容性要求极高两台宿主机CPU指令集不一致迁移过去之后虚拟机会直接出现非法指令错误。所以生产环境要么用同一批次的CPU要么在集群上开启EVC/CPU兼容基线强制所有主机使用同样的CPU特性集合。资源池还需要回答一个问题这些物理资源能超分多少超分比不是拍脑袋定的。比如一个集群有20台物理机每台2路32核总共1280个逻辑核。如果业务以Web服务为主CPU超分比可以放到3到4因为大部分Web进程的CPU使用率只有20%左右。但如果是数据库集群或计算密集业务超分比超过1.5就会导致CPU ready时间飙升虚拟机会越来越卡。内存超分更保守一般1.2到2之间因为内存不像CPU可以快速回收超分太多会导致宿主机触发swap直接拖垮所有虚拟机。做容量规划时还要留出N1冗余也就是至少能容忍一台宿主机宕机不造成业务中断。这些参数的评估比记几个命令重要得多它直接决定了你的云平台稳不稳。4.2 GPU虚拟化算力切分的三种思路普通虚拟机领域的话题聊得差不多了但云计算里还有一个绕不开的方向就是GPU虚拟化。GPU很贵AI训练和推理又不能每件事都独占一张卡于是必须把GPU的算力和显存切成好几份分给不同任务。主流的GPU切分方案可以分成三类。第一类是NVIDIA vGPU适合KVM和vSphere环境它通过专用驱动把物理GPU细分成多个虚拟GPU实例每个实例有自己独立的显存和计算单元。第二类是MIG这是A100、H100这些新款数据中心GPU的硬件级切分能力直接在物理GPU上划分出多个实例隔离强度比vGPU更硬。第三类是MPS和API转发前者是共享模式下的进程级调度显存大家共用隔离弱但利用率高后者比如rCUDA和Kubernetes环境里的HAMI本质上是把CUDA调用通过网络或共享内存转发给远端GPU执行。HAMI这个词经常出现在GPU虚拟化的搜索结果里它的全称是Heterogeneous AI Multi-accelerator Scheduler专门用于Kubernetes集群里的GPU共享调度。简单说它可以把一张GPU的显存和算力按比例分给多个Pod同时兼容整卡调度和MIG实例调度比起传统的一次申请一整张卡灵活很多。部署形态通常是一个DaemonSet加一个调度器扩展配置好Device Plugin之后Pod里声明显存大小调度器自动把任务分到合适的GPU和剩余显存上。运维AI平台的朋友可以留意一下这个项目能有效提高GPU利用率。选型时不能只看理论性能还要看授权限制。vGPU方案往往需要厂商许可MIG和MPS部分能力也需要硬件和驱动版本支持。实际项目里省钱又够用的路线往往是K8s加HAMI做显存切分重任务走MIG轻任务走MPS。4.3 云计算运维工程师的真正技能清单很多刚入行的朋友问我要学什么才能胜任云计算运维岗。我的回答不变平台千变万化底层原理绕不开。KVM也好vSphere也好华为FusionCompute也好它们解决的问题都一样只是API和界面不同。技能清单可以拉成五块。第一块是底层虚拟化原理包括CPU的VT-x、内存EPT、virtio和SR-IOV的差别这是排查一切虚拟机性能问题的底子。第二块是Linux和网络基础至少要把VLAN、VxLAN、网桥、路由搞清楚否则SDN虚拟网络一出问题就只能乱猜。第三块是存储技术分布式存储Ceph或者厂商的超融合方案至少要理解副本数、故障域、扩容原理。第四块是容器编排Docker和Kubernetes现在已经是云运维的标配不用再问要不要学。第五块是自动化脚本能力Shell是底线Python和Ansible二选一否则面对几十上百台宿主机运维效率等于零。运维思路比工具更重要。排障时我习惯按数据链路从底层往上层走物理机CPU超了没有、内存够不够、存储IO延迟高不高、网络丢包有没有这些都没问题再看虚拟机系统本身。很多人一遇到虚拟机卡顿就怪平台其实往往是过量超分或者存储磁盘故障导致的。日志要会看指标要会抓才能在用户抱怨之前把问题干掉。写到这里想起一次真实经历。有回半夜接到告警整套云平台所有虚拟机都出现了短时间网络抖动排查完虚拟化平台一无所获最后发现是核心交换机上有人贴了个标签纸堵了光模块散热口导致交换机端口频繁自动恢复。虚拟化和云计算运维就是这样既要有底层原理的深度也要有全局判断的宽度。如果你刚接触这个领域先别急着背厂商认证题库把CPU、内存、IO三个虚拟化核心吃透比什么都有用。
返回列表