请教虚拟机网络 nat 和桥接的区别

2021-08-27 12:07:07 +08:00
 plko345

环境:win10,vmware workstation

使用 nat, 传大文件宿主机到虚拟机(或反向传),速率 100MB/s 左右,cpu 占用 90 左右。

使用桥接情况类似。

明显桥接下 cpu 也干了网卡的活,想问下大致原理。

有什么办法能减轻 cpu 负载,同时提升速度。

4913 次点击
所在节点    程序员
26 条回复
pupboss
2021-08-27 12:12:18 +08:00
NAT 是在你的本机上再虚拟一个子网,虚拟机之间平级,你的电脑充当路由器

桥接是从你的网卡上虚拟一个新的网卡,虚拟机和你电脑平级,共用家里的路由器

虚拟机传文件负载本身就大,可能跟网卡没关系,等后面大佬回答吧
noe132
2021-08-27 12:31:35 +08:00
无论是 nat 还是桥接都有一个虚拟交换机,主机和虚拟机都接在这个虚拟交换机上面。这个交换机是软件实现的,所以包多当然占 cpu 。
Tink
2021-08-27 12:44:55 +08:00
桥接就是跟你主机一个 IP 段,nat 是主机的下级
littlewey
2021-08-27 13:46:24 +08:00
- NAT 时候,Host 里好像有一个家用路由器,WAN 是 Host 的网卡,LAN 插向你的 VM,VMware 搞了一个 L3 设备

- Bridged 的时候,Host 里好像有一个交换机,Host 的网卡和你 VM 网卡 都插在上边,VMware 搞了一个 L2 设备

https://superuser.com/questions/227505/what-is-the-difference-between-nat-bridged-host-only-networking
ryd994
2021-08-27 13:55:16 +08:00
nat: 虚拟机之间组成内网,而且使用私有地址,无法直接对外通信。宿主机会提供虚拟 nat 网关的功能,不仅转发包,还提供地址转换服务。NAT 是有状态的,所以开销很大。而且 NAT 工作在 4 层,需要了解每一个 TCP 连接的状态。

桥接:虚拟机之间组成内网,但使用“公网”地址。因为你家只有路由器有真正的公网 IP (甚至路由器也没有,这也是论坛上讨论关于开公网 IP 的问题),家里的所有机器其实只有内网 IP 。这时,宿主机仍然需要提供私有网关服务,但不需要提供 NAT,所以开销较小。这时只是提供路由器或交换机的功能。工作在 3 层或 2 层。

然而计算开销较小并不代表性能就会好很多。肯定是更好的。但是实际在网络处理中,难点是对大量的包进行处理,单个包的处理很简单,但包的数量很大,需要迅速处理完。CPU 并不适合这种工作。这种工作适合硬件。所以软路由的性能的极限比起硬件来说低很多。而且加钱买更好的 CPU 也没用。

硬件加速是网络处理很重要的一部分。非虚拟机的连接,其实大部分工作依赖硬件加速。比如 RSS,TSO,LSO,LRO 。这都不是新技术,几乎所有的网卡都支持。

虚拟化网络硬件加速则是商业应用的重要课题。宿主机可以直接下放路由功能或者交换机功能给硬件。低端的,硬件可以执行简单的筛选分类,把虚拟机的包放到独立的缓冲队列里。CPU 只需要简单的处理就可以把数据转发给虚拟机。而且可以提供虚拟 RSS 功能,让虚拟机也可以多线程处理网络。
高级的就是 SRIOV,虚拟机网络数据完全不经过宿主机软件。PCIE 直通给虚拟机。PCIE 直通由主板 /CPU 硬件加速,使用中开销几乎为零。虚拟机直接控制硬件吗,也就可以享受到和非虚拟机一样的硬件加速功能。性能也完全不损失。没有 SRIOV 也能用 PCIE 直通,但是只能物理硬件一一对应,无法在虚拟机之间共享。
各大云厂商的高性能网络大部分就是 SRIOV 再加上 SoC 或 FPGA 来处理虚拟网络流量。

如果你的 CPU 有 VT-d,而且有富余的 pcie 槽,那最简单的就是再买一块网卡做直通。组 NAS 时这个方法很常用,直通网卡和 HBA 。不然的话,配置开启 VMQ 其实性能也还行。从你的描述来看你应该已经在用类似的功能了,否则所有的虚拟机负载都会打在一个核上,不会做到 CPU 占用 90%

如果没有 pcie 直通的条件,但你的目标只是内网性能。那么也可以在全部设备上启用 jumbo frame 。之前说了,网络的难点在于包的数量。LSO LRO 技术实际上就是通过硬件切割组合包,CPU 实际上只看到硬件处理后的大包。jumbo frame 启用之后,线路上传输的就是更大但更少的包。自然也就不用耗费那么多 CPU 资源了。但是问题在于网络上的每一个节点都要有 jumbo frame 的支持,所以实质上仅限内网使用。
jim9606
2021-08-27 14:07:55 +08:00
100MB/s 相当于 800Mbps,算是个比较高吞吐量的需求了。

vmware workstation 默认使用的虚拟网络都是纯软件实现,桥接的工作量相对于 NAT 少些依然有。另外虚拟机的网卡也是在 cpu 实现的。

你可以试试更改 vmx 文件,将虚拟网卡型号由 e1000 改为 vmxnet3,可能可以减少虚拟网卡的开销。

还不够估计就得换支持 PCI 直通的虚拟机方案和支持 SR-IOV 的网卡了,例如 Hyper-V/VMware ESXi/LinuxKVM 和 Intel I350 。
wccc
2021-08-27 14:16:13 +08:00
网卡直通 或者 virtio-net window 需要额外驱动
chenjies
2021-08-27 15:09:51 +08:00
100MB/s 是不是千兆网卡的速度?提升传输速度只有不走网卡,文件共享可以试试。
newmlp
2021-08-27 16:46:51 +08:00
nat=路由器,桥接=交换机
haikouwang
2021-08-27 16:59:16 +08:00
hyperv 可以明显降低 cpu 占用,降低很多
plko345
2021-08-27 18:20:18 +08:00
@ryd994 谢谢大佬的分享,内容我得消化下
littlewey
2021-08-27 19:12:09 +08:00
网络虚拟化比 PCI Passthrough/SR-IOV / Smart NIC 更轻量级的有高性能的方案是用基于 user space /PMD 的软件交换机。

在 KVM 虚拟化的情况下通常是 OpenVSwitch + DPDK 。

在 ESXi/VSphere 的情况下也可以用 VMWare 的等价于 OpenVSwitch 的技术 + DPDK 。

在 VMware Workstation 这样的场景下就不需要了吧,本身就不是生产服务器级别的虚拟环境,有要求就多一个网卡直通给 VM 另外插线,交换路由都不在 Host OS 上。
qiangmin
2021-08-27 19:22:28 +08:00
@ryd994 大佬一下子透漏了云计算的主流技术。
qiangmin
2021-08-27 19:29:52 +08:00
@littlewey 感觉应该是 PCI Passthrough/SR-IOV + Smart NIC 这种关系,不是或者。
plko345
2021-08-27 20:59:15 +08:00
@haikouwang 谢谢推荐, 使用 hyperv 网络设置有什么注意点吗, 之前用过一次, 虚拟交换机配置挺麻烦的, 体验不太友好, 但性能确实比 vmware workstation 要强大很多
desdouble
2021-08-27 21:30:32 +08:00
你确定虚拟机和宿主机这样拷贝文件是通过 nat 或桥的网络传输的?

即使通过网络传输,也不太可能出现网络传输让 cpu 满负荷吧。cpu 满负荷可能是因为虚拟机的磁盘管理机制是文件拆分,自动扩容。大文件需要临时分配更大的磁盘空间,对磁盘的操作和程序本身的读写操作占用了大量 cpu 。同时,如果你物理内存不够大,开虚拟机很容易要用磁盘做虚拟内存,前面大量的磁盘操作还在继续,会让虚拟内存的效率急剧恶化,累及整个操作系统的运行。
littlewey
2021-08-27 22:34:44 +08:00
@plko345 我们用过非 smart nic 的 SR-IOV 的哈。
aru
2021-08-27 23:26:41 +08:00
是不是加密传输了?
用 iperf 测试下
flynaj
2021-08-28 01:46:27 +08:00
理论上桥接比 nat 更节省资源,不过要看虚拟机软件的实现,vbox 网卡配置成 virt 是非常快的。
cassyfar
2021-08-28 02:24:52 +08:00
@ryd994 nat 在 osi 3 层因为是修改 packet 的 IP header 。。并不负责 routing

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798316

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX