[qemu][io]虚拟化IO latency监控

前言: Linux的很多监控组件,主要针对IOPS和IO带宽进行监控。很多业务场景下,希望对IO的延迟做监控。单纯的await并不能反映出来IO的延迟具体情况。 例如,ETCD的QPS偏高的时候,latency发生了抖动,长尾效应比较明显。第一反映是IO抖动?还是GC导致? 如果有监控组件,这段时间内,IO latency的抖动和QPS的抖动基本一致,那就比较容易判断是不是IO导致的问题。 分析: 1,QEMU IO 图片选自前文《[linux][storage]Linux存储栈 》

nvme设备的栈没有画出,但是和最左侧的virtio blk设备的栈类似。/dev/nvme0n1设备是直接从PCI/PCI-e上block layer注册的,性能比较好的设备,需要的软件路径越短。 从层次上看,QEMU能够给Guest提供的后端存储的访问大约有几种类型: a,用户态文件,例如常用的raw和qcow2格式文件。 b,用户态直接使用裸块设备,包括/dev/sdx设备和lvm的logic volume。 c,用户态的网络协议,包括http,iscsi,rbd等。 d,透传scsi generic设备,通过bypass scsi command实现。 e,通过pci passthrough实现。 那么,对于经过QEMU用户态处理的场景,由于所有的Guest的IO请求都需要经过QEMU,就很容易实现对每个IO的latency统计。d场景并非常用场景,e场景目前作者没有想到好办法。 2,block latency histogram QEMU-2.12开始,实现了对于块设备的latency统计,可以生成对应的数据。 实现逻辑在qemu-2.12/block/accounting.c 大致逻辑: a,默认没有打开block latency histogram。可以通过qmp动态配置或者关闭。 b,对于Guest的IO请求,如果打开了latency统计,就进行统计。 c,关闭latency统计的化,则清空数据。 3,example virsh qemu-monitor-command INSTANCEID '{"execute":"x-block-latency-histogram-set","arguments":{"device":"drive-virtio-disk1","boundaries":[10000000,20000000,40000000]}}' 示例中,对virtio disk1进行设置,boundaries 的单位是纳秒(ns)。其中统计的阈值的范围是小于 10000000ns, 10000000ns~ 20000000ns之间, 20000000ns~ 40000000ns之间的IO数量。 virsh qemu-monitor-command INSTANCEID '{"execute":"query-blockstats"}' 通过query-blockstats查询结果。

例如ETCD的长尾效应发生的时候,作者统计到的数据通过json如图,可见写延迟超过80ms的请求占用了一定的比例。虽不能排除GO的GC问题,但是起码说明后端的IO已经是问题了。 4,注意事项 前后两次设置不同的参数,就会清空上一次统计的数据。例如先设置virsh qemu-monitor-command INSTANCEID '{"execute":"x-block-latency-histogram-set","arguments":{"device":"drive-virtio-disk1","boundaries":[10000000,20000000,40000000]}}' 再设置virsh qemu-monitor-command INSTANCEID '{"execute":"x-block-latency-histogram-set","arguments":{"device":"drive-virtio-disk1","boundaries":[10000000,20000000,40000000,80000000]}}' 虽然数据重合,但是QEMU的代码逻辑中没有判断,直接做了清空处理。 另外,设置的 boundaries必须是从小到大的顺序。如果不是按照顺序,QEMU内部实际上设置失败,但是QEMU返回的qmp命令是成功的。就会以为设置成功了,但是没有数据。。。 修复的patch(http://lists.gnu.org/archive/html/qemu-devel/2018-10/msg03868.html)已经mail给maintainer,需要等待maintainer回复。

原文发布于微信公众号 - AlwaysGeek(gh_d0972b1eeb60)

原文发表时间:2018-10-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漫漫全栈路

IIS中实现HTTPS的自动跳转

还是上次使用的Derwer.com,因为腾讯云提供了一年免费的TrustAsia DV SSL证书,由赛门铁克(Symantec)顶级根证书签发,亚洲诚信(T...

87680
来自专栏刺客博客

CentOS 7 一键安装桌面环境(可远程RDP连接)

为您的Linux系统运行Windows应用程序。脚本自动帮你安装Wine X64和X86,现在可以在Linux上运行Windows应用程序。例如:Tele...

2.4K50
来自专栏Venyo 的专栏

LocalDB 在 ASP.NET 程序中找不到数据库

LocalDB 在 ASP.NET 程序中找不到数据库:有时候错误信息是:无法找到数据库,请确认数据库名称是否正确;而有时候会变成:Cannot open da...

34780
来自专栏Rainbond开源「容器云平台」

【Docker】Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程

24360
来自专栏自由而无用的灵魂的碎碎念

最近几天玩freebsd奋斗成果总结

http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/

12720
来自专栏kl的专栏

spring batch精选,一文吃透spring batch

批处理是企业级业务系统不可或缺的一部分,spring batch是一个轻量级的综合性批处理框架,可用于开发企业信息系统中那些至关重要的数据批量处理业务.Spri...

1.2K80
来自专栏漏斗社区

工具| PowerShell的内网渗透之旅(二)

50560
来自专栏liulun

基于QT的webkit与ExtJs开发CB/S结构的企业应用管理系统

一:源起 1.何为CB/S的应用程序     C/S结构的应用程序,是客户端/服务端形式的应用程序,这种应用程序要在客户电脑上安装一个程序,客户使用这个程序与...

43780
来自专栏DeveWork

简单代码实现“网站维护中”“coming soon” 效果

一般网站要改版或者临时维护一下可能要给访客一个友好的“网站维护中”“coming soon” 提示,之前本站DeveWork.com 也分享了《WordPres...

60250
来自专栏生信技能树

R包终极解决方案

写在前面: 在如何通过Google来使用ggplot2可视化这篇文章中,我们曾经介绍过R语言在生物信息学中的重要性。 这篇文章也激发了很多小伙伴学习的热情。学习...

64670

扫码关注云+社区

领取腾讯云代金券