我想用C(语言)获取kvm / libvirt VM使用的总带宽 . libvirt中有功能吗?
所以,例如,如果一个VM超过1TB,那么我将暂停其网络 .
启动KVM来宾时,主机系统会为来宾中的每个单独网络接口创建 vnet 接口,例如 vnet3 vnet4 . 之后,您可以通过轮询主机上的文件来监控这些接口的发送/接收量:
cat /sys/class/net/vnet3/statistics/rx_bytes 173110677 cat /sys/class/net/vnet3/statistics/tx_bytes 1640468389
或者,您可以使用 fwmark 设置iptables规则,如本教程中所示:http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html用iptables测量统计数据,但我想这对C来说太麻烦了 .
在libvirt XML中,您需要查看元素以标识后端设备名称 . 例如
<interface type='network'> <mac address='52:54:00:b4:fc:f2'/> <source network='default' bridge='virbr0'/> <target dev='vnet2'/> <model type='virtio'/> <alias name='net0'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
这里的后端是'vnet2' . 完成后,您可以调用C API virDomainInterfaceStats(或通过您选择的语言绑定)来获取rx / tx统计信息 . 以使用virsh工具为例:
# virsh domifstat demo vnet2 vnet2 rx_bytes 5040490379 vnet2 rx_packets 3292604 vnet2 rx_errs 0 vnet2 rx_drop 0 vnet2 tx_bytes 167286952 vnet2 tx_packets 1859239 vnet2 tx_errs 0 vnet2 tx_drop 0
2 回答
启动KVM来宾时,主机系统会为来宾中的每个单独网络接口创建 vnet 接口,例如 vnet3 vnet4 . 之后,您可以通过轮询主机上的文件来监控这些接口的发送/接收量:
或者,您可以使用 fwmark 设置iptables规则,如本教程中所示:
http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.netfilter.html
用iptables测量统计数据,但我想这对C来说太麻烦了 .
在libvirt XML中,您需要查看元素以标识后端设备名称 . 例如
这里的后端是'vnet2' . 完成后,您可以调用C API virDomainInterfaceStats(或通过您选择的语言绑定)来获取rx / tx统计信息 . 以使用virsh工具为例: