searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

spdk查看io的rpc指令介绍

2024-09-27 09:20:41
84
0

1、spdk通过bdev块设备的连接存储设备,支持但不限于rbd、malloc、nvme等,通过调用rpc命令bdev_get_iostat可以获取bdev设备创建以来的io统计信息,主要包括如下信息:读请求字节数、req读取数、写请求的字节数、写请求数量, tick_rate为当前cpu的下每秒tick的数量,ticks为当前bdev tick数量。通过read_latency_ticks读请求tick计数换算成读IO请求秒耗时方法为为read_latency_ticks/tick_rate=479655402684/3000000000=159.885s

# spdk_rpc.py bdev_get_iostat -b bdev0
{
  "tick_rate": 3000000000,
  "ticks": 14982772193835262,
  "bdevs": [
    {
      "name": "bdev0",
      "bytes_read": 6073028608,
      "num_read_ops": 47214,
      "bytes_written": 2677080064,
      "num_write_ops": 20835,
      "bytes_unmapped": 0,
      "num_unmap_ops": 0,
      "read_latency_ticks": 479655402684,
      "write_latency_ticks": 257575188258,
      "unmap_latency_ticks": 0
    }
  ]
}

2、针对inflight IO spdk没有直接观察的命令,需要通过rpc指令bdev_set_qd_sampling_period命令周期取样观察比如:采用周期5000us

spdk_rpc.py bdev_set_qd_sampling_period bdev0 5000

此时再次调用1中的bdev_get_iostat命令获取该bdev设备的io统计信息,会增加queue_depth字段,若有inflight IO,对应值为未完成IO的数量.

# spdk_rpc.py bdev_get_iostat -b bdev0
{
  "tick_rate": 3000000000,
  "ticks": 14982772193835262,
  "bdevs": [
    {
      "name": "bdev0",
      "bytes_read": 6073028608,
      "num_read_ops": 47214,
      "bytes_written": 2677080064,
      "num_write_ops": 20835,
      "bytes_unmapped": 0,
      "num_unmap_ops": 0,
      "read_latency_ticks": 479655402684,
      "write_latency_ticks": 257575188258,
      "unmap_latency_ticks": 0,
      "queue_depth_polling_period": 5000,
      "queue_depth": 0,
      "io_time": 0,
      "weighted_io_time": 0
    }
  ]

注:rpc指令bdev_set_qd_sampling_period将采样周期改0即可关闭周期性取样。

3、基于NVMeOF场景,通过2中打开观察源端和nvmf端的io统计取样,通过queue_depth值对比,即可初步判断IO是哪一段路径IO没回。

0条评论
作者已关闭评论
l****n
5文章数
0粉丝数
l****n
5 文章 | 0 粉丝
原创

spdk查看io的rpc指令介绍

2024-09-27 09:20:41
84
0

1、spdk通过bdev块设备的连接存储设备,支持但不限于rbd、malloc、nvme等,通过调用rpc命令bdev_get_iostat可以获取bdev设备创建以来的io统计信息,主要包括如下信息:读请求字节数、req读取数、写请求的字节数、写请求数量, tick_rate为当前cpu的下每秒tick的数量,ticks为当前bdev tick数量。通过read_latency_ticks读请求tick计数换算成读IO请求秒耗时方法为为read_latency_ticks/tick_rate=479655402684/3000000000=159.885s

# spdk_rpc.py bdev_get_iostat -b bdev0
{
  "tick_rate": 3000000000,
  "ticks": 14982772193835262,
  "bdevs": [
    {
      "name": "bdev0",
      "bytes_read": 6073028608,
      "num_read_ops": 47214,
      "bytes_written": 2677080064,
      "num_write_ops": 20835,
      "bytes_unmapped": 0,
      "num_unmap_ops": 0,
      "read_latency_ticks": 479655402684,
      "write_latency_ticks": 257575188258,
      "unmap_latency_ticks": 0
    }
  ]
}

2、针对inflight IO spdk没有直接观察的命令,需要通过rpc指令bdev_set_qd_sampling_period命令周期取样观察比如:采用周期5000us

spdk_rpc.py bdev_set_qd_sampling_period bdev0 5000

此时再次调用1中的bdev_get_iostat命令获取该bdev设备的io统计信息,会增加queue_depth字段,若有inflight IO,对应值为未完成IO的数量.

# spdk_rpc.py bdev_get_iostat -b bdev0
{
  "tick_rate": 3000000000,
  "ticks": 14982772193835262,
  "bdevs": [
    {
      "name": "bdev0",
      "bytes_read": 6073028608,
      "num_read_ops": 47214,
      "bytes_written": 2677080064,
      "num_write_ops": 20835,
      "bytes_unmapped": 0,
      "num_unmap_ops": 0,
      "read_latency_ticks": 479655402684,
      "write_latency_ticks": 257575188258,
      "unmap_latency_ticks": 0,
      "queue_depth_polling_period": 5000,
      "queue_depth": 0,
      "io_time": 0,
      "weighted_io_time": 0
    }
  ]

注:rpc指令bdev_set_qd_sampling_period将采样周期改0即可关闭周期性取样。

3、基于NVMeOF场景,通过2中打开观察源端和nvmf端的io统计取样,通过queue_depth值对比,即可初步判断IO是哪一段路径IO没回。

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0