我正在配置服务,该服务将 nginx 上传的大量文件存储在主机系统的 /srv/storage 目录中。这些文件由工作 KVM 来宾处理,它们可能会创建新文件或为现有文件分配扩展属性。文件永远不会被覆盖,但最终会被其中一名工作人员删除。
因此主机服务器的文件写入速度约为 177MB/s。KVM 映像是存储在主机文件系统上的 QCOW2 文件,由于此 virtio 设置,映像在 KVM 实例内达到了约 155MB/s:
<driver name='qemu' type='raw' cache='none' io='native'/>
Run Code Online (Sandbox Code Playgroud)
但是我无法为共享文件夹获得这样的结果。我使用virtfs aka virtio 9p获得了最大 40MB/s 的速度。似乎没有挂载的 AIO 等效项:
mount -t 9p -o trans=virtio,version=9p2000.L uploads /srv/storage
Run Code Online (Sandbox Code Playgroud)
我也在想:
那么如何使用扩展属性有效地与 KVM 来宾共享主机的文件夹)。
在我的一个 KVM 来宾中,当我输入以下命令时,我得到以下信息
/sbin/lsmod | grep vi
virtio_balloon 3692 0
Run Code Online (Sandbox Code Playgroud)
那么这是否意味着我正在使用 virtio?
更新:
当我打字
cat "/boot/config-`uname -r`" | grep -i vir
Run Code Online (Sandbox Code Playgroud)
我可以看到
CONFIG_PARAVIRT_GUEST=y
CONFIG_PARAVIRT=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_PARAVIRT_CLOCK=y
# CONFIG_PARAVIRT_DEBUG is not set
CONFIG_VIRT_TO_BUS=y
CONFIG_NET_9P_VIRTIO=m
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_CONSOLE=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
# CONFIG_FB_VIRTUAL is not set
CONFIG_SND_VIRMIDI=m
CONFIG_SND_VIRTUOSO=m
# CONFIG_DEBUG_VIRTUAL is not set
CONFIG_VIRTUALIZATION=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_RING=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_BALLOON=m
Run Code Online (Sandbox Code Playgroud)
听起来我已经在使用 virtio 了吗?
virtualization linux linux-networking kvm-virtualization virtio
我正在尝试通过 linux KVM 虚拟化安装 Windows Server 2012 R2。
安装过程停止并需要驱动程序继续。
我正在尝试使用来自 Fedora 的 virtio 驱动程序,但不起作用。安装过程没有显示要安装的存储设备。
我正在尝试不同的存储选项:SATA、IDE、Virtio、Virtio SCSI。
Diskpart(列表磁盘)向我显示磁盘,但安装程序无法使用它。
我使用了不同版本的 virtio 驱动程序: virtio-win-0.1.105.iso 、 virtio-win-0.1.96.iso 和 virtio-win-0.1.101.iso 具有相同的结果。
我的安装盘是:SW_DVD9_Windows_Svr_Std_and_DataCtr_2012_R2_64Bit_Spanish_-4_MLF_X19-82897.ISO
virtualization kvm-virtualization virtio windows-server-2012-r2
我正在尝试使用 kvm 作为虚拟机管理程序在主机与其客户虚拟机之一之间建立通信通道。为此,我使用virtio-serial。
为了创建虚拟机,我发出了以下命令:
qemu-system-x86_64 \
-m 2048 -name ubuntu \
-hda ubuntu_image \
-device virtio-serial \
-chardev socket,path=/tmp/foo,server,nowait,id=foo \
-device virtconsole,name=jobsfoo,chardev=foo,name=org.ubuntu.foo \
Run Code Online (Sandbox Code Playgroud)
然后为了在客人上进行交流,我使用:
socat /dev/hvc0 -
Run Code Online (Sandbox Code Playgroud)
在主机上:
socat /tmp/foo -
Run Code Online (Sandbox Code Playgroud)
我开始明白这/tmp/foo是一个套接字和/dev/hvc0一个字符设备。
为什么有一个对称的通信接口:主机上的套接字和客户机上的字符设备?
我之前已经设置了几个基于 KVM 的网络,但从未遇到过这个问题,我一生都无法想象我以前会设置什么不同的网络。
设置
基本上,我已经完全拥有戴尔堆栈:
所有机器都运行 CentOS6.5,hypervisor,基本上是标准安装,有一些 sysctl 调整。
目前,我有一些测试 VM 的设置,它们的设置与它们的主机相似(CentOS 6.X,基本安装带有基本的 puppet 驱动配置)。所有虚拟机都是:
所有 VM 都使用 virtio 来处理网络、块设备(基本上是运行 virt-install 命令的标准结果)——例如(例如 libvirt 配置)
Run Code Online (Sandbox Code Playgroud)<interface type='bridge'> <mac address='52:54:00:11:a7:f0'/> <source bridge='dmzbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
并且所有 VM 都可以访问 2 到 8 个 VCPU 以及 8 到 64GB 的 RAM,并且它们的驱动器是主机上的 LVM 卷
VM 中的一些简单文件副本和 dd 测试产生了完全可以接受的结果(在这些小规模综合测试中为 300MB/s - 800MB/s)
物理机之间的网络性能
我现在已经离开了 Jumbo …
有没有办法透明地回收或防止使用 qemu-kvm 来宾的内存?
场景A:
来宾在高峰时段使用 8GB 的 RAM,它在晚上返回到 4GB 的使用量,但来宾仍然要求主机提供 8GB 的 RAM。
场景B:
来宾使用 2GB 的 RAM,但页面缓存中有 6GB 的 RAM。来宾要求主机提供 8GB 的 RAM,但其中最多 6GB 可能是在另一个来宾系统中可能更重要的 RAM。
我对气球的第一个想法是客人不会“看到”气球效果,但是当发送“气球2048”时,客人内部的内存实际上减少到~2GB。
我有一个使用 virtio-net 在 kvm 上运行的 linux vm,我想检查链接速度。我怎样才能做到这一点?
到目前为止我尝试过的:
# ethtool eth0
Settings for eth0:
Link detected: yes
Run Code Online (Sandbox Code Playgroud)
似乎 ethtool 不支持 virtio-net(还没有?)我有来自 debian jessie 的 3.16-1 版本,ethtool 是否在较新版本中支持它?它接缝版本 6 是最新版本。
# cat /sys/class/net/eth0/speed
cat: /sys/class/net/eth0/speed: Invalid argument
# lspci | grep -iE --color 'network|ethernet'
00:12.0 Ethernet controller: Red Hat, Inc Virtio network device
# lshw -class network
*-network
description: Ethernet interface
product: Virtio network device
vendor: Red Hat, Inc
physical id: 12
bus info: pci@0000:00:12.0
logical name: eth0
version: 00
serial: …Run Code Online (Sandbox Code Playgroud) 我有一个 virtio 磁盘安装到 KVM 来宾,由 LVM 逻辑卷支持。lvresize我增加了KVM 主机上逻辑卷的大小。
然后我必须virsh pool-refresh让 KVM 主机知道卷大小的变化。现在,如果我检查 中的卷virt-manager,我会看到正确的磁盘大小。但无论如何,来宾操作系统仍然会按照旧的大小看到磁盘。
如何强制 Linux 内核重新扫描 virtio 磁盘而不重新启动 guest 虚拟机?
我发现的其他解决方案并非特定于 virtio,而且它们不起作用。类似echo "- - -" > /sys/class/scsi_host/host0/scan应该适用于 SCSI 磁盘,但不适用于 virtio。另一个提示echo 1 > /sys/block/vda/device/rescan不起作用,因为该rescan文件不存在。
那么您知道有关重新扫描 virtio 磁盘的 virtio 特定技巧吗?