裸金属服务器与虚拟机的区别:性能、隔离与许可证六维对比
裸金属服务器是整台物理机归你独占,只是像云主机一样在线下单、分钟级交付;虚拟机是 hypervisor 从一台宿主机上切出来的一份。没有这层 hypervisor,裸金属没有虚拟化损耗、没有邻居争抢、能按真实物理核买许可证、能自己再装虚拟化,代价是弹性差、起步规格大。
裸金属服务器与虚拟机的区别,核心在一层软件:hypervisor。虚拟机(云主机、VPS)是 hypervisor 在一台宿主机上切出的一份资源,CPU、内存、磁盘、网卡都经过虚拟化层转发;裸金属服务器(Bare Metal)是整台物理机交给你一个人用,操作系统直接跑在硬件上,只是像云主机一样在控制台下单、自动开通、按小时或按月计费。有没有这层 hypervisor,决定了下面六个维度的全部差别,先用一张表总览,再逐项展开。
| 维度 | 裸金属服务器 | 虚拟机 |
|---|---|---|
| 性能损耗 | 无虚拟化层,IO 延迟与内存访问接近硬件本身 | 计算型负载损耗小,磁盘、网络 IO 和内存密集型负载损耗明显 |
| 资源争抢 | 单租户,整机资源独占 | 多租户共享宿主机,CPU、缓存、内存带宽、磁盘 IO 都可能被邻居影响 |
| 许可证 | 按真实物理核授权,核数自己选 | 按 vCPU 授权,或被要求按整台宿主机甚至集群的物理核授权 |
| 嵌套虚拟化 | 可以直接装 KVM、ESXi、Hyper-V 做自己的虚拟化平台 | 需要云厂商开放嵌套虚拟化,性能损失大 |
| 弹性 | 开通分钟级到小时级,规格固定,不能热迁移 | 秒级到分钟级创建,可改规格、快照、热迁移、自动伸缩 |
| 价格 | 单位算力更便宜,但按整机起步 | 可以买很小的规格,单位算力更贵 |
性能损耗:CPU 差得少,IO 和内存差得多
有了 Intel VT-x、AMD-V 这类硬件辅助虚拟化之后,纯计算负载在虚拟机里的损耗通常只有几个百分点,跑编译、转码一类任务时两者差别不大。差别集中在三处:
- 磁盘与网络 IO:虚拟机的每次 IO 都要经过 virtio 这类半虚拟化驱动或模拟设备,再由宿主机转发;云盘还要再过一层网络。表现为单次 IO 延迟更高、小块随机读写的 IOPS 上限更低。SR-IOV 直通网卡能缓解网络部分,但不是所有规格都提供。
- 内存访问:虚拟机用两级页表(Intel EPT / AMD NPT)把客户机物理地址再映射一次,TLB 未命中时的代价比物理机高;虚拟机看到的 NUMA 拓扑也可能和真实硬件不一致,数据库按 NUMA 节点绑内存的优化会失效。裸金属能开大页、绑 NUMA、关闭超线程,这些对数据库、内存数据库和搜索引擎的效果直接可见。
- 时延抖动:宿主机调度、中断转发会给虚拟机带来微秒级的不确定延迟。网页应用感觉不到,撮合交易、实时音视频、高频写入的时序数据库会在尾延迟(P99)上看到差别。
一个判断方法:业务瓶颈在 CPU 算力,虚拟机够用;瓶颈在磁盘随机 IO、内存带宽或尾延迟,裸金属的收益才明显。
资源争抢:邻居问题只有裸金属能彻底解决
虚拟机的 vCPU 一般对应宿主机的一个超线程,而不是一个物理核。云厂商把一台宿主机上的 vCPU 卖给多个租户,只要总量不超过物理线程数就不算超售;但即使不超售,同一个物理核的两个超线程、同一颗 CPU 的 L3 缓存和内存带宽、同一块本地盘的 IO 队列,仍然是大家共用的。邻居跑满了内存带宽,你的 vCPU 使用率看起来不高,程序却变慢了,监控里什么都看不出来。
cgroup 和 hypervisor 能限制的是 CPU 时间片、内存容量和磁盘带宽上限;L3 缓存和内存带宽虽然有 Intel RDT 这类划分技术,但公有云一般不会为每个租户单独划分。裸金属是单租户,这些资源全是你的,性能可以复现:今天压测的结果,下个月不会因为换了邻居而变化。
另一个和隔离相关的点是安全缓解:Spectre、Meltdown、MDS 这类 CPU 侧信道漏洞的缓解措施在多租户宿主机上通常全部开启,会让系统调用密集的负载付出可观的性能代价;裸金属是单租户,可以根据自身的风险评估决定缓解开到什么程度。
许可证:按物理核计费的软件为什么偏好裸金属
很多商业软件按物理核授权,而不是按 vCPU。这类软件放在共享虚拟化平台上,账会算得很难看。以下按公开的许可规则概述,具体以厂商当前条款为准:
- Oracle Database:按 Processor 授权,Processor 数 = 物理核数 × 核心系数(主流 x86 为 0.5)。Oracle 的分区策略把 VMware 等多数虚拟化方式归为“软分区”,不承认按虚拟机的 vCPU 数授权,要求按这台虚拟机可能运行到的所有物理主机的全部核心计算。部分公有云被 Oracle 列为认可的云环境,可以按 vCPU 折算,名单与折算规则以 Oracle 当前政策为准。
- Microsoft SQL Server(按核授权):物理机要为全部物理核授权,每颗 CPU 至少 4 核;虚拟机按 vCPU 授权,每台虚拟机至少 4 核。要在一台物理机上跑任意数量的 SQL Server 虚拟机,需要给全部物理核买 Enterprise 版并附带软件保障。
- Windows Server:按物理核授权,每台服务器至少 16 核;Standard 版允许运行 2 个虚拟机,Datacenter 版不限数量。
算一笔假设的账:数据库需要 8 个物理核。
| 部署方式 | 需要授权的核数 | 说明 |
|---|---|---|
| 共享虚拟化集群,3 台双路 16 核宿主机 | 96 核 | 软分区规则下按虚拟机可能迁移到的全部宿主机计 |
| 单台双路 16 核裸金属 | 32 核 | 只为这一台机器授权,但多买了 24 核 |
| 单路 8 核高主频裸金属 | 8 核 | 核数刚好,主频高,许可证开销少 |
所以按物理核授权的软件选裸金属时,要点不是核数多,而是核数刚好够、主频尽量高,再把省下的许可费换成更快的 NVMe 和更大的内存。裸金属上 lscpu 和 dmidecode 能看到真实的 CPU 型号与核数,审计时也拿得出证据。
嵌套虚拟化:想自己做虚拟化平台,只能选裸金属
在裸金属上装 KVM、Proxmox VE、VMware ESXi 或 Hyper-V,就得到一台自己的虚拟化宿主机,性能与自建机房里的物理机一致。常见用途:自建私有云、给每个客户或每个环境切虚拟机、用 Kata Containers 或 Firecracker 这类轻量虚拟机做容器沙箱、在 CI 里跑 Android 模拟器、桌面虚拟化。
在虚拟机里再跑虚拟机叫嵌套虚拟化。它要求云厂商把 VT-x / AMD-V 指令集暴露给虚拟机,很多云规格默认不开;即使开了,两层地址转换叠加,内层虚拟机的性能损失明显,只适合开发测试。登录机器后可以这样确认:
# 输出不为 0,说明 CPU 虚拟化扩展对这台机器可见,能装 KVM
grep -cE 'vmx|svm' /proc/cpuinfo
# 如果你拿到的是裸金属、想让里面的虚拟机再做一层虚拟化,
# 检查 KVM 模块的嵌套开关(Intel 看 kvm_intel,AMD 看 kvm_amd),Y 或 1 表示允许
cat /sys/module/kvm_intel/parameters/nested 2>/dev/null
cat /sys/module/kvm_amd/parameters/nested 2>/dev/null
第一条命令在虚拟机里输出 0,说明这台虚拟机装不了 KVM,只能换规格或换裸金属。
弹性:虚拟机秒级,裸金属分钟级
虚拟机的强项:创建以秒到分钟计,可以在线改规格、加磁盘、做快照、热迁移到另一台宿主机,配合自动伸缩按负载增减机器,关机后不再为算力付费。
裸金属的弹性要弱一截:开通需要真机上电、装系统,分钟级到小时级;规格由物理配置决定,加内存就是换机器;没有热迁移,硬件故障就是你的故障,要靠自己的高可用架构兜底;用本地盘的裸金属一般没有快照,备份得自己做。云厂商的裸金属把系统盘放到云盘、加入 VPC 以后,可以做到硬件坏了把云盘挂到另一台裸金属上快速恢复,这已经比传统独立服务器好很多,但仍不是虚拟机那种随手复制一百台的弹性。
负载一天内波动大、机器数量需要跟着流量变、经常建环境又销毁,选虚拟机;负载稳定、机器长期开着、规模固定,弹性对你没有价值,裸金属更划算。
价格:单位算力裸金属便宜,起步规格虚拟机便宜
同一代 CPU,按每个物理核算,裸金属比虚拟机便宜,原因是整机算力被切成小份出售时,每一份都要分摊虚拟化平台、调度与运维的成本,小规格的单价本来就定得更高。但裸金属按整机卖,起步就是几十核、上百 GB 内存;虚拟机可以买 1 核 1 GB。
用一组假设数字说明(不代表任何服务商报价):裸金属 32 核 128 GB 每月 ¥3,200,相当于每核 ¥100;虚拟机 8 vCPU 32 GB 每月 ¥1,200,相当于每 vCPU ¥150。
| 需求 | 虚拟机方案 | 裸金属方案 | 更省的一方 |
|---|---|---|---|
| 8 核 32 GB 的小应用 | 1 台,¥1,200 | 1 台,¥3,200,剩 24 核闲置 | 虚拟机 |
| 24 核 96 GB 的数据库 | 3 台拼接,¥3,600,且跨机器 | 1 台,¥3,200,还多 8 核 | 裸金属 |
| 需求跑满 32 核 | 4 台,¥4,800 | 1 台,¥3,200 | 裸金属 |
规律是:你能把一台裸金属用满六七成以上,它就比等量的虚拟机便宜;只用得到一小部分,虚拟机便宜。再加上许可证那一节的差异,数据库、中间件这类按核授权又吃 IO 的负载,往往是裸金属最先回本的地方。
怎么选,以及怎么确认拿到的真是裸金属
按业务选
| 业务 | 建议 | 原因 |
|---|---|---|
| Oracle、SQL Server 等按核授权的数据库 | 裸金属 | 许可证按真实物理核,IO 延迟低 |
| MySQL、PostgreSQL 大实例,Redis、Elasticsearch | 裸金属 | 本地 NVMe、大页内存、NUMA 绑定收益明显 |
| 撮合、实时竞价、音视频转发等尾延迟敏感业务 | 裸金属 | 没有调度抖动和邻居干扰 |
| 自建虚拟化、容器沙箱、云游戏、模拟器集群 | 裸金属 | 需要完整的虚拟化扩展 |
| GPU 训练与推理 | 裸金属 | 整卡独占,PCIe 直连 |
| 合规要求物理隔离 | 裸金属 | 单租户,能出具硬件信息 |
| Web 前端、API、微服务 | 虚拟机 | 无状态、横向扩展,弹性有价值 |
| 开发测试、CI 节点、临时环境 | 虚拟机 | 用完即删 |
| 负载波动大的业务 | 虚拟机 | 自动伸缩,按量付费 |
| 一两个核就够的小应用 | 虚拟机 | 裸金属起步规格浪费 |
验收:确认拿到的是物理机
付了裸金属的钱,拿到的应该是物理机。登录后用几条命令核对:
# 物理机输出 none;虚拟机会输出 kvm、vmware、microsoft 等
systemd-detect-virt
# 虚拟机的 CPU 标志里有 hypervisor,物理机没有,输出应为 0
grep -c hypervisor /proc/cpuinfo
# 物理机显示 Dell Inc.、Supermicro 等主板或整机厂商;虚拟机显示 QEMU、VMware, Inc. 等
cat /sys/class/dmi/id/sys_vendor
cat /sys/class/dmi/id/product_name
# 核对 CPU 型号、插槽数、物理核数与超线程是否与订单一致
lscpu | grep -E 'Model name|Socket|Core|Thread'
再看两件事:一是有没有带外管理能力,真正的物理机应该能提供电源控制、启动项设置、挂载 ISO 和看到 BIOS 画面的控制台,哪怕是通过服务商面板转一道(IPMI 远程管理指南解释了这些能力从哪来);二是磁盘,nvme list 或 lsblk -d -o NAME,MODEL,SIZE 应该能看到真实的盘型号(Samsung、Intel、Micron 等厂商型号),虚拟机里看到的通常是 QEMU HARDDISK、Virtual Disk 这类虚拟设备名,virtio 磁盘的型号栏甚至是空的。两项都对得上,这台机器才是你独占的物理机。
常见问题
裸金属和云主机的区别是什么?
云主机是虚拟机,裸金属是物理机,二者都由云平台在线开通,多数云厂商的裸金属也能接 VPC 和云盘。区别在于裸金属没有 hypervisor,独占整机的 CPU、内存和本地盘,不能像云主机那样秒级创建、热迁移或随意改规格。
裸金属服务器就是独立服务器吗?
硬件形态一样,都是一台物理机。差别在交付方式:传统独立服务器由机房人工上架、按月出租;裸金属由云平台自动化交付,常见按小时计费,可以加入 VPC、挂云盘。市面上两个词经常混用,看合同里的具体条款比看名称更可靠。
裸金属上能跑 Docker 吗?
可以,而且是常见用法。容器不需要虚拟化扩展,裸金属上跑 Kubernetes 节点省去了一层 hypervisor 损耗,也更容易用上大页内存、NUMA 绑定等优化。
虚拟机 8 vCPU 和裸金属 8 核一样快吗?
通常不一样。vCPU 多数对应一个超线程而不是一个物理核,8 vCPU 可能只是 4 个物理核的 8 个线程;是否超售、宿主机负载也会影响。裸金属的 8 核是 8 个真实物理核,还可以按需关闭超线程。