我的设置的性能非常好(geekbench,感觉如何,...)甚至磁盘吞吐量(原始 lvm 分区上的 libvirt)也非常接近服务器上的原始性能)但IOP/s 低至100-200 来宾端(与 ~1000 主机端相比)在 linux 和 Windows 来宾上。
这是一件可以忍受的事情(kvm 不能做得更好)还是我做错了什么?
有趣的是,我能够通过更改设置(qcow2 vs raw-image vs raw-partition)或配置(缓存或 io-scheduling)和变化来影响吞吐量,但 IOP 保持在所有这些相同的低点组合。
• supermicro dual xeon E5520 with 24GB RAM
• 2x seagate constellation 1TB(RAID1 on Adaptec 3405)
• 2x seagate cheetah(RAID1 on Adaptec 6405)。
• ubuntu 11.10 3.0.0-13-server
• kvm/QEMU 模拟器版本 0.14.1 (qemu-kvm-0.14.1)
• 对来自主机和来宾的磁盘(bonnie++、hdparm)进行基准测试(windows 上的 bonnie++、hdparm、hdtune) )
我测试了几种光盘配置,当前设置是:
(他们只是“不需要”高 IO 性能,所以我保留了更舒适的
磁盘文件)• 我星座上 lvm 上的 qcow2 磁盘文件
• qemu/ide
<disk type='file' …Run Code Online (Sandbox Code Playgroud) 我正在使用 libvirt 在运行 Debian Squeeze amd64 的相当新的(核心 i3)主机上控制 kvm。主机和 Linux 来宾工作并且感觉快速且响应迅速。简单地使用适用于 windows7 的 virt-manager 标准配置文件安装 Win7 需要永远。我主要归咎于磁盘 io,但 Windows 通常似乎不像 linux 来宾那样响应。
您对 kvm 上的 Win7 客户机的性能优化设置有一些提示吗?
(抱歉有很多转储,但我认为它们可以作为参考。)
主机配置:
kvm: Version: 1:0.12.5+dfsg-5+squeeze8
libvirt-bin: Version: 0.8.3-5+squeeze2
Run Code Online (Sandbox Code Playgroud)
虚拟转储xml:
<domain type='kvm' id='27'>
<name>win7-template</name>
<uuid>a4eb05fa-0d4e-5ced-2ff1-e15507795d1b</uuid>
<memory>2097152</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
<os>
<type arch='x86_64' machine='pc-0.12'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<clock offset='localtime'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/var/lib/libvirt/images/win7-template.img'/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' …Run Code Online (Sandbox Code Playgroud) 注意:这是我在堆栈交换网络上的第一个问题,所以请宽恕并在需要时提供指导。
我已经安装了 CentOS 6.2 KVM 来宾,但在使用 yum 时遇到问题。这是我第一次使用 CentOS,所以我觉得这是一个我缺少但无法使用谷歌找到的设置。
这是我的步骤;
vi /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
Run Code Online (Sandbox Code Playgroud)
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
HWADDR="52:54:00:42:1B:4A"
#NM_CONTROLLED="yes"
BOOTPROTO=none
ONBOOT="yes"
NETMASK=255.255.255.0
IPADDR=192.168.122.151
TYPE=Ethernet
Run Code Online (Sandbox Code Playgroud)
vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=server3.example.com
GATEWAY=192.168.122.1
Run Code Online (Sandbox Code Playgroud)
ping google.com
PING google.com (173.194.70.139) 56(84) bytes of data.
64 bytes from fa-in-f139.1e100.net (173.194.70.139): icmp_seq=1 ttl=50 time=5.88 ms
64 bytes from fa-in-f139.1e100.net (173.194.70.139): icmp_seq=2 ttl=50 time=5.77 ms
Run Code Online (Sandbox Code Playgroud)
百胜更新
Loaded plugins: fastestmirror, presto
Loading mirror speeds …Run Code Online (Sandbox Code Playgroud) 今天我们在两个相同的 kvm 和 qemu 主机(戴尔 R910)上遇到了一个非常奇怪的行为。每个主机系统都有 4 x 10 个内核,这意味着 40 个物理内核在操作系统(Ubuntu Linux 10.04 64 位,内核 3.0)中显示为 80。
我们在其中一个节点上启动了一个 Windows 2003 32 位 VM(1 个 CPU,1 GB RAM,我们多次更改了这些值),并注意到启动过程开始需要 15 分钟。在这 15 分钟内,会显示黑屏,但没有任何反应。libvirt 和主机系统显示,guest 虚拟机的 qemu-kvm 进程几乎处于空闲状态。stracing 这个过程只显示了一些 FUTEX 条目,但没有什么特别的。
15 分钟后,Windows VM 突然开始启动并出现 Windows 徽标。几秒钟后,VM 就可以使用了。VM 本身的性能非常好,所以这不是性能问题。
我们尝试使用 virsh 和 taskset 工具固定 CPU,但这只会让事情变得更糟。
当我们使用 Linux Live CD 启动 Windows VM 时,也会出现几分钟的黑屏,但不会长达 15 分钟。在此主机(Ubuntu 10.04)上启动另一个 VM 时,它也有黑屏问题,这里也是黑屏只显示 2-3 分钟(而不是 15 分钟)。
因此,总结一下:每个相同节点上的每个来宾在启动后几分钟都会空闲。几分钟后,启动过程突然开始。我们观察到空闲时间发生在客户机的 bios 初始化之后。
我们的一位员工想在 Grub(内核参数)中限制 CPU 数量,maxcpus=40(因为存在 40 个物理内核),突然“黑屏空闲”行为消失了。
搜索 …
我使用带有命令的 kickstart 文件clearpart --all --initlabel来确保 anaconda 在尝试创建和格式化新分区之前清除所有磁盘。
这在过去对我有用,在物理机器上。但是,在使用底层 LVM 卷作为存储的 KVM 来宾上执行此操作时,Anaconda 会在出现以下警告时等待用户输入:

我自己来回答这个问题。我错误地认为我的问题和解决方案与ServerFault 上的这个问题有关。由于它们不是,我正在创建并回答一个新问题。
现在我正在尝试使用 CentOS 创建 KVM 模板,但我不确定是否应该在来宾操作系统上创建交换分区。将来会有很多带有 256-1024Mb RAM 的小型 VPS,如果交换分区是个好主意,那么 256Mb 的交换是否足以使它们更稳定?
我发现了一个 Mumble 服务器的性能问题,我在上一个问题中描述了它是由未知来源的 I/O 延迟问题引起的。由于我不知道是什么导致了这种情况以及如何进一步调试它,因此我在询问您对这个主题的想法。
我正在运行Hetzner EX4S 根服务器作为 KVM 管理程序。该服务器运行 Debian Wheezy Beta 4,并通过 LibVirt 使用 KVM 虚拟化。
服务器有两个不同的 3TB 硬盘,因为在报告 SMART 错误后更换了其中一个硬盘。第一个硬盘是 Seagate Barracuda XT ST33000651AS(512 字节逻辑,4096 字节物理扇区大小),另一个是 Seagate Barracuda 7200.14 (AF) ST3000DM001-9YN166(512 字节逻辑和物理扇区大小)。有两个 Linux 软件 RAID1 设备。一个用于未加密的引导分区,另一个用作加密其余部分的容器,使用两个硬盘驱动器。
后一个 RAID 设备内部有一个 AES 加密的 LUKS 容器。在 LUKS 容器内有一个 LVM 物理卷。虚拟机管理程序的 VFS 在描述的 LVM 物理卷上分为三个逻辑卷:一个用于 /,一个用于 /home,一个用于交换。
下面是块设备配置栈的示意图:
sda (Physical HDD)
- md0 (RAID1)
- md1 (RAID1)
sdb (Physical HDD)
- md0 (RAID1)
- md1 …Run Code Online (Sandbox Code Playgroud) 类似这样的Bugzilla的旧请求的Fedora 8,我希望事情已经从那以后改变或有人知道的另一种方式。
我想手动管理 iptables 规则——一刀切的自动规则根本不适合我。这些规则似乎是在网络启动和销毁时添加和删除的。有没有办法完全阻止添加这些规则,或者将脚本挂接到网络启动中,然后恢复默认规则。
现在,我正在使用一种非常粗糙的方法cron,但我希望有更好的方法:
* * * * * root iptables-restore < /etc/sysconfig/iptables
Run Code Online (Sandbox Code Playgroud) 我有一台在 Intel i5 上使用 OpenStack Folsom 运行 Ubuntu Quantal 的桌面,具有 32 GB RAM 和 2 GB 交换。我正在运行 7 个虚拟机,每个虚拟机的大小都类似于 EC2 m1.small,因此每个虚拟机有 1.7 GB RAM。我正在使用 KVM。
当我开始同时运行 5 或 6 个时,主机开始将它们换掉:
top - 23:45:42 up 3 days, 1:51, 10 users, load average: 0.37, 0.75, 1.15
Tasks: 418 total, 2 running, 413 sleeping, 3 stopped, 0 zombie
%Cpu(s): 8.8 us, 2.1 sy, 0.0 ni, 88.8 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
KiB Mem: 32864580 total, 32586956 used, 277624 free, …Run Code Online (Sandbox Code Playgroud) 之前使用过 RDP,我对从 VNC 到 KVM 虚拟机的性能并不十分满意。KVM 主机是 Ubuntu 12.04 服务器 x64。我读过 Spice 速度更快,所以经过大量的折腾之后,我通过 virt-manager(例如 virt-viewer)和一个独立的 spice 客户端让它工作。
我没有任何硬性和快速的数字在这里引用,但 VNC 远程处理似乎比 spice 快 2 到 4 倍!例如,在 VNC 中我可以轻松地观看 Flash 视频,但在 Spice 中它非常不稳定。一般来说,Unity 在 VNC 上运行良好,但在 Spice 上运行缓慢。
这可能吗?是不是配置错误?
在这两种情况下,我都从 LAN 上的笔记本电脑(运行 Ubuntu 12.10)连接到虚拟主机管理器,以查看主机上的 Ubuntu 12.04 桌面来宾 VM。来宾上的 VNC 配置使用了vga显示类型,而 spice 配置使用了qxl显示类型。在任何一种情况下,我都没有使用默认的视频 RAM 量。