- 只测试了大文件IO,未测试小文件
- 测试方法比较简陋,仅供参考
- 请关注最后修改时间,本文内容可能年久失修
配置
- Sys: Win10 1909
- CPU: i5-7300HQ
- MEM: DDR4 2400 16G
- NVME:C2000 pro 1T (C, D, T)
- SATA:东芝 256G (E)
直接拷贝 E -> D
一般提高网络IO的方法
- 使用巨型帧(Jumbo Frame),调大
MTU
(Up to 9000 bytes) - 修改 Windows 注册表,调大 Windows 滑动窗口大小
VMware
适配器信息
速度
CPU 占用 +50% (直接拉满 100%)
适配器未出现大幅IO变化
已知信息
VMware workstation
不支持巨型帧VMware workstation
使用samba
来进行虚拟机和主机的文件访问,CPU资源占用较高
QA
- 为什么只有VMnat只有 100 Mbps?不能更快了吗?
- 这个只是表面速度,实际甚至可以上 10Gbps
HyperV
适配器信息
速度
CPU 占用 +20%
适配器出现大型IO变化,基本等同于下载速度
已知信息
HyperV
和VMware
都属于通过硬件辅助虚拟化实现的完全虚拟化。HyperV
属于第一类管理程序,VMware workstation
属于第二类管理程序。两者不兼容- 现在有基于
HyperV
的VMware预览版 Vbox
也早也加入了对于HyperV
的支持(但是未声明,可能还不稳定)Google
基于HyperV
的安卓模拟器目前也在有序开发中
Docker
- Docker 采取 cgroup 进行资源的管控,在访问挂载分区的时候使用 iptables 向本机发送数据,理论上性能损耗是很小的,故不考虑测试
- 题外话:如果使用 -p 或 -P 参数,docker会直接向 iptables 添加规则,直接将端口暴露出去而不受防火墙的控制。
- 解决方法:
- 采取硬件防火墙,不使用软件
- 修改
/etc/docker/daemon.json
添加或修改{ "iptables": false }
, 然后sudo systemctl daemon-reload && sudo systemctl restart docker.service
Docker for windows (Linux container)
适配器是使用上面的 HyperV vSwitch
速度(访问挂载卷)
CPU +50% (直接拉满)
1 GB/s左右及以上的是 docker内 IO 测试, 只有最后两条是挂载卷访问速度
已知信息
- Docker for windows 采取 samba 来实现主机和 container 的文件共享,速度较慢
- Windows2004 通过了一个基于 HyperV 的 WSL2,实现了类原生访问。对于挂载卷的访问速度提升很大,基本接近于直接访问。
参见
- https://en.wikipedia.org/wiki/Virtual_machine#Hardware-assisted_virtualization
- https://en.wikipedia.org/wiki/Hyper-V#Architecture
- https://www.quora.com/What-is-the-difference-between-VMware-and-Hyper-V