我正在 KVM 上运行 32 位 Linux 虚拟机。主机是连接到 LAN 的 64 位 Linux 计算机。尝试使用 scp 将文件从 KVM 计算机传输到 LAN 上的服务器会产生糟糕的性能,通过千兆位以太网传输速度约为 500kB/s。约为预期的1%。有什么建议么?
答案1
考虑使用虚拟机。它允许虚拟机和主机之间的直接连接,无需模拟(慢速)硬件。我用它测量了网络性能的显着提高。
例如,可以通过kvm命令行参数“-net nic,model=virtio”来启用virtio网络设备。
如果您使用的是 virtio 块设备,请注意新设备名称为“vda1”等,但这应该不是问题,因为当前的 Linux 发行版根据 UUID 检测分区。
答案2
这可能是客户机内部磁盘 I/O 性能的问题。如果您使用磁盘映像,请执行以下步骤以获得更好的性能:
首先,您必须尝试使用cache
来宾的磁盘配置选项。
默认情况下,直写式缓存用于所有块设备。这意味着主机页缓存将用于读取和写入数据,但仅当存储子系统报告数据已写入时,才会向客户机发送写入通知。
一旦数据出现在主机页面缓存中,写回缓存就会报告数据写入已完成。只要您信任您的主机,这就是安全的。如果您的主机崩溃或断电,则来宾可能会遇到数据损坏。使用 -snapshot 选项时,默认使用写回缓存。
使用cache=none 可以完全避免主机页面。这将尝试直接对来宾内存进行磁盘 IO。 QEMU 仍可以执行数据的内部副本。
一些块驱动程序在使用cache=writethrough时表现不佳,最明显的是qcow2。如果性能比正确性更重要,则应将cache=writeback与qcow2一起使用。默认情况下,如果没有为 qcow2 磁盘映像指定显式缓存,则将使用cache=writeback。对于所有其他磁盘类型,cache=writethrough 是默认值。
然后,您还必须使用内核的电梯选项:您必须elevator=noop
在 grub linux 命令行中添加如下内容:
# Edit your /etc/default/grub.conf (on Debian-based distribution)
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"
对此的更好解释可以在:http://lonesysadmin.net/2008/02/21/elevatornoop/;但简而言之,主机 Linux 内核和来宾 Linux 内核都尝试优化 I/O,但对于来宾来说,这往往比任何事情都更糟糕(来宾应该将此任务留给主机)。