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

Libvirt XML之Block IO Tuning

2023-08-15 08:43:04
35
0

Block I/O Tuning

可选的blkiotune元素通过设置参数,调控本虚机的Blkio cgroup参数设置,通过此设置可管控块io的读写速率。如果省略此项,则默认为操作系统提供的默认值。从libvirt0.8.8版本开始支持。

使用举例:

<domain>

  ...

  <blkiotune>

    <weight>800</weight>

    <device>

      <path>/dev/sda</path>

      <weight>1000</weight>

    </device>

    <device>

      <path>/dev/sdb</path>

      <weight>500</weight>

      <read_bytes_sec>10000</read_bytes_sec>

      <write_bytes_sec>10000</write_bytes_sec>

      <read_iops_sec>20000</read_iops_sec>

      <write_iops_sec>20000</write_iops_sec>

    </device>

  </blkiotune>

  ...

</domain>
各元素详解:
1.weight
    可选weight元素是虚机的总体IO调度权重。该值应在[100-1000]范围内。在内核2.6.39之后,该值可能在[10-1000]范围内。
    IO调度权重:通过设置资源组IO的权重比例实现IO限制,该策略基于CFQ调度算法(Linux内核磁盘IO调度算法)通过分配其IO处理的时间片来实现,因此需要确认磁盘对应的调度算法为CFQ(Linux默认值)。——此种说法是对于老内核的单队列调度而言,目前ctyun2112使用的都是多队列调度。
    查看ctyun2112,io调度算法为:
    # cat /sys/block/sda/queue/scheduler 
    [mq-deadline] kyber bfq none
    对于ctyun2112的内核版本,必须将host上的对应磁盘调度算法改为bfq,weight设置才生效。vm中的io调度算法可以随便设置对此无影响。
    weight值的设置是设置的cgroup blkio子系统的blkio.bfq.weight接口,接口默认值为100。该接口只对cgroup控制下的各个进程起作用,如两个虚机,一个设置为200,一个设置为800,则设为800的虚机io调度时间是另一个虚机的4倍,io速率也就是另一个虚机的4倍;blkio.bfq.weight接口的设置对host上的进程不起作用,如若虚机设置为200,和host上的进程进行io争用,此时设置不生效,仍然是公平分配io时间。


2.device
    可以具有多个device元素,这些device元素进一步调整每个块设备的weight。需要注意,多个虚机可以共享同一块主机块设备,如果它们由同一主机文件系统中的文件支持,这就是为什么此调优参数位于全局域级别,而不是与每个虚机磁盘设备关联(与可应用于单个<disk>的<iotune>元素相比)。
    每个device元素都有两个必需的子元素:
    path:描述设备的绝对路径
    weight:给出设备的相对weight
   Since 0.9.8 Additionally, 可使用以下可选子元素:
     read_bytes_sec:读取吞吐量限制(以字节/秒为单位)。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.read_bps_device参数中。
     write_bytes_sec:写入吞吐量限制(以字节/秒为单位)。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.write_bps_device参数中。
     read_iops_sec:读iops限制。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.read_iops_device参数中。
     write_iops_sec:写iops限制。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.write_iops_device参数中。

此外,可以使用以下可选子元素:

read_bytes_sec

读吞吐量限制,以每秒字节为单位从libvirt 1.2.2开始支持

write_bytes_sec

写吞吐量限制,以每秒字节数为单位从libvirt 1.2.2开始支持

read_iops_sec

每秒读I / O操作限制。从libvirt 1.2.2开始支持

write_iops_sec

每秒写I / O操作限制。从libvirt 1.2.2开始支持

 

0条评论
0 / 1000
林****龙
4文章数
0粉丝数
林****龙
4 文章 | 0 粉丝
原创

Libvirt XML之Block IO Tuning

2023-08-15 08:43:04
35
0

Block I/O Tuning

可选的blkiotune元素通过设置参数,调控本虚机的Blkio cgroup参数设置,通过此设置可管控块io的读写速率。如果省略此项,则默认为操作系统提供的默认值。从libvirt0.8.8版本开始支持。

使用举例:

<domain>

  ...

  <blkiotune>

    <weight>800</weight>

    <device>

      <path>/dev/sda</path>

      <weight>1000</weight>

    </device>

    <device>

      <path>/dev/sdb</path>

      <weight>500</weight>

      <read_bytes_sec>10000</read_bytes_sec>

      <write_bytes_sec>10000</write_bytes_sec>

      <read_iops_sec>20000</read_iops_sec>

      <write_iops_sec>20000</write_iops_sec>

    </device>

  </blkiotune>

  ...

</domain>
各元素详解:
1.weight
    可选weight元素是虚机的总体IO调度权重。该值应在[100-1000]范围内。在内核2.6.39之后,该值可能在[10-1000]范围内。
    IO调度权重:通过设置资源组IO的权重比例实现IO限制,该策略基于CFQ调度算法(Linux内核磁盘IO调度算法)通过分配其IO处理的时间片来实现,因此需要确认磁盘对应的调度算法为CFQ(Linux默认值)。——此种说法是对于老内核的单队列调度而言,目前ctyun2112使用的都是多队列调度。
    查看ctyun2112,io调度算法为:
    # cat /sys/block/sda/queue/scheduler 
    [mq-deadline] kyber bfq none
    对于ctyun2112的内核版本,必须将host上的对应磁盘调度算法改为bfq,weight设置才生效。vm中的io调度算法可以随便设置对此无影响。
    weight值的设置是设置的cgroup blkio子系统的blkio.bfq.weight接口,接口默认值为100。该接口只对cgroup控制下的各个进程起作用,如两个虚机,一个设置为200,一个设置为800,则设为800的虚机io调度时间是另一个虚机的4倍,io速率也就是另一个虚机的4倍;blkio.bfq.weight接口的设置对host上的进程不起作用,如若虚机设置为200,和host上的进程进行io争用,此时设置不生效,仍然是公平分配io时间。


2.device
    可以具有多个device元素,这些device元素进一步调整每个块设备的weight。需要注意,多个虚机可以共享同一块主机块设备,如果它们由同一主机文件系统中的文件支持,这就是为什么此调优参数位于全局域级别,而不是与每个虚机磁盘设备关联(与可应用于单个<disk>的<iotune>元素相比)。
    每个device元素都有两个必需的子元素:
    path:描述设备的绝对路径
    weight:给出设备的相对weight
   Since 0.9.8 Additionally, 可使用以下可选子元素:
     read_bytes_sec:读取吞吐量限制(以字节/秒为单位)。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.read_bps_device参数中。
     write_bytes_sec:写入吞吐量限制(以字节/秒为单位)。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.write_bps_device参数中。
     read_iops_sec:读iops限制。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.read_iops_device参数中。
     write_iops_sec:写iops限制。Since 1.2.2。此参数会写入到Cgroup blkio的blkio.throttle.write_iops_device参数中。

此外,可以使用以下可选子元素:

read_bytes_sec

读吞吐量限制,以每秒字节为单位从libvirt 1.2.2开始支持

write_bytes_sec

写吞吐量限制,以每秒字节数为单位从libvirt 1.2.2开始支持

read_iops_sec

每秒读I / O操作限制。从libvirt 1.2.2开始支持

write_iops_sec

每秒写I / O操作限制。从libvirt 1.2.2开始支持

 

文章来自个人专栏
软硬结合测试
4 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
1
0