前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[linux][bcc]使用virtiostat查看virtio设备的IOPS和吞吐

[linux][bcc]使用virtiostat查看virtio设备的IOPS和吞吐

作者头像
皮振伟
发布2021-03-18 15:18:48
3.4K0
发布2021-03-18 15:18:48
举报
文章被收录于专栏:皮振伟的专栏

前言 在linux平台上,我们经常需要使用各种各样的工具查看设备的使用情况。例如使用iostat查看块设备的IO情况,使用iftop查看网卡设备的流量情况。 但是virtio family的设备这种越来越多,virtiofs、virtio gpu、virtio console等设备却缺少相应的工具。基于以上原因,作者开发了virtiostat工具,作为bcc工具集的一部分,提供了virtio设备的stat监控能力。 分析 原理 在Linux上,virtio设备进行IO的时候,会先生成scatterlist这样的数据结构,然后使用如下几个API,把数据加入到virt queue中:

代码语言:javascript
复制
virtqueue_add_sgs
virtqueue_add_outbuf
virtqueue_add_inbuf
virtqueue_add_inbuf_ctx

那么,我们可以使用probe监控这几个函数的参数,对其进行解析,就可以分析出来Guest OS对于这个virtio设备的IO情况。另外,需要我们解析出来是哪些virtqueue进行的IO,这些virtqueue分别属于哪个device,数据进行排序、聚合,即可得到想要的数据。 和iostat、iftop看到的结果的差异 对于块设备,我们通常关注它的IOPS和Throughput指标。但是,blk layer的一次IO操作,把请求下发到virtio层的时候,除了IO request和数据之外,在virtio blk中还要加入额外的协议的部分,也就导致了virtiostat看到的SG(scatter)操作的多于实际的IOPS。但是它们是一个正相关的关系。 对于Throughput,virtiostat看到的会略高于iostat,同样也是因为有header的关系。但是考虑到header的大小远小于IO的数据大小,这个数值就可以忽略不计了。 几个重要的场景 在virtio blk、virtio scsi以及virtio net场景下,已经有足够的工具来支持了。但是对于virtiofs的场景,就需要virtiostat来观察guest的IO情况了。我们在fs layer上很难观察出来具体的IO情况,一个分区上可能有很多文件同时被IO访问,还有page cache和异步刷盘,其他的工具很难知道真实的IO情况。 另外一个场景,我们如果在host上执行过balloon操作,可能会默认就是一个很快的操作就完成了。但是使用virtiostat观察,其实是一个较高频次的IO操作。发送Guest的PFN的过程效率似乎没有那么高。 效果

效果上来看,如上文描述,有In/Out的SGs操作,表示正相关的IOPS。In/Out BW表示设备的Throughput。 根据Brendan Gregg的建议,增加一下-x模式,来支持一下延迟的监控。这个会稍后支持。也许还会支持device/driver的filter过滤能力。 如果希望使用一下这个工具,需要升级bcc到最新的版本,因为在开发工具的过程中,踩中了一个bcc的Bug,以及还遇到了一个LLVM的Bug。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档