Bug 1224053

Summary: blkdeviotune unable to get block I/O throttle parameters
Product: Red Hat Enterprise Linux 7 Reporter: Jason <jianxun.weng>
Component: libvirtAssignee: Martin Kletzander <mkletzan>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 7.1CC: chayang, dyuan, jianxun.weng, juzhang, michen, mkenneth, mkletzan, pzhang, qzhang, rbalakri, rpacheco, virt-maint, xuzhang, yisun
Target Milestone: rcKeywords: Upstream
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-1.2.17-4.el7 Doc Type: Bug Fix
Doc Text:
Cause: QEMU started supporting new tuning options at one point and even though libvirt was probing for that capability, it did not consult the capability when getting those options back from running QEMU. Consequence: Users with new enough libvirt, but old enough QEMU couldn't get any information about per-block device settings using virDomainGetBlockIoTune() API (virsh blkdeviotune). Fix: Libvirt was taught to correctly consult the capability when checking whether QEMU responded with all options when getting them. Result: Users are now able to use the virDomainGetBlockIoTune() API even with older QEMU versions.
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-11-19 06:36:14 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Jason 2015-05-22 06:22:55 UTC
Description of problem:

virsh # blkdeviotune 1 vda
error: Unable to get block I/O throttle parameters
error: Operation not supported: block_io_throttle field 'total_bytes_sec' missing in qemu's output


Version-Release number of selected component (if applicable):

        # virsh --version=long
	    Virsh command line tool of libvirt 0.10.2
	    Compiled with support for:
	    Hypervisors: QEMU/KVM LXC ESX Test
	    Networking: Remote Network Bridging Interface netcf Nwfilter  
	    Storage: Dir Disk Filesystem SCSI Multipath iSCSI LVM
	    Miscellaneous: Daemon Nodedev SELinux Secrets Debug DTrace Readline

        # virsh -c qemu:///system version --daemon
	    Compiled against library: libvirt 0.10.2
	    Using library: libvirt 0.10.2
	    Using API: QEMU 0.10.2
	    Running hypervisor: QEMU 0.12.1
	    Running against daemon: 0.10.2	
	
        # /usr/libexec/qemu-kvm -version
	   QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1.2) 
	
        # libvirtd --version
	   libvirtd (libvirt) 0.10.2

How reproducible:


Steps to Reproduce:
    1. virsh blkdeviotune <domainname> <block device name> 

Actual results:

    error: Unable to get block I/O throttle parameters
    error: Operation not supported: block_io_throttle field 'total_bytes_sec'  missing in qemu's output

Expected results:

    The command shall return disk I/O parameters such as block throttling

Additional info:
    Similar bugs have been reported many times but appears there's no formal patches provided and clear instructions on fixes, if any.

Comment 2 Ademar Reis 2015-05-22 17:29:02 UTC
Jason, thanks for taking the time to enter a bug report with us. We use reports like yours to keep improving the quality of our products and releases. That said, we're not able to guarantee the timeliness or suitability of a resolution for issues entered here because this is not a mechanism for requesting support.

If this issue is critical or in any way time sensitive, please raise a ticket through your regular Red Hat support channels to make certain it receives the proper attention and prioritization that will result in a timely resolution.

For information on how to contact the Red Hat production support team, please visit: https://www.redhat.com/support/process/production/#howto

That said, this is because I/O throtling is not supported in the QEMU binary shipped with RHEL6, so this is somehow expected. I/O throthling is a feature we support only in the RHEL Advanced Hypervisor, which is shipped with RHEV and OpenStack.

I'm reassigning this BZ to libvirt as they might want to improve the error message, but I wouldn't be surprised if they close it as NOTABUG or WONTFIX.

Again, I recommend you open a customer case with our support department to get this issue properly prioritized and escalated. Thanks.

Comment 3 Ademar Reis 2015-05-26 14:20:55 UTC
(In reply to Ademar Reis from comment #2)
> 
> That said, this is because I/O throtling is not supported in the QEMU binary
> shipped with RHEL6, so this is somehow expected. I/O throthling is a feature
> we support only in the RHEL Advanced Hypervisor, which is shipped with RHEV
> and OpenStack.

For more details about the difference between the packages available in RHEL and in the RHEL Advanced Hypervisor, please see this customer portal article:
https://access.redhat.com/solutions/629513

I'm currently checking the status of our documentation to make sure everything is consistent. The bug will remain open while we clarify that.

Comment 4 Jaroslav Suchanek 2015-05-28 13:53:36 UTC
Libvirt is going to improve the error message as was suggested by Ademar in
comment 2. It will be addressed in RHEL7 releases though as this has no or very
little impact on functionality.

Comment 5 Martin Kletzander 2015-06-04 09:32:34 UTC
Fixed upstream with v1.2.16-81-gf833c70b8599:
commit f833c70b85993f024be4afc4dfbfc2fb9c2d6cd9
Author: Martin Kletzander <mkletzan>
Date:   Thu May 28 11:38:43 2015 +0200

    qemu: Check for qemu capability when calling virDomainGetBlockIoTune()

Comment 11 Martin Kletzander 2015-07-27 06:32:07 UTC
One tiny additional patch proposed upstream:

https://www.redhat.com/archives/libvir-list/2015-July/msg01039.html

Comment 12 Martin Kletzander 2015-07-27 07:33:51 UTC
Fixed upstream by v1.2.18-rc1-2-gba167186cf77:

commit ba167186cf7753cf662697ab67a4b10e9b3d4096
Author: Martin Kletzander <mkletzan>
Date:   Mon Jul 27 08:04:06 2015 +0200

    qemu: Check for iotune_max support properly

Comment 18 Pei Zhang 2015-08-17 05:28:10 UTC
Verified version :
libvirt-1.2.17-5.el7.x86_64
qemu-kvm-1.5.3-101.el7.x86_64

Verify steps:
1.get blkdeviotune 
#virsh blkdeviotune r720 vdb
total_bytes_sec: 0
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0

2. set /get blkdeviotune with basic parameters

#virsh blkdeviotune r720 vdb --total-bytes-sec 10000000
#virsh blkdeviotune r720 vdb
total_bytes_sec: 10000000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 0
read_iops_sec  : 0
write_iops_sec : 0

#virsh blkdeviotune r720 vdb --total-iops-sec 123456
#virsh blkdeviotune r720 vdb
total_bytes_sec: 10000000
read_bytes_sec : 0
write_bytes_sec: 0
total_iops_sec : 123456
read_iops_sec  : 0
write_iops_sec : 0

3. set blkdeviotune without and with *-max and set with options.

#virsh blkdeviotune r720 vdb --total-iops-sec-max 12345
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

#virsh blkdeviotune r720 vdb --read-iops-sec-max 100000 --current
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

#virsh blkdeviotune r720 vdb --read-bytes-sec-max 100000 --live 
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

# virsh blkdeviotune r720 vdb --read-bytes-sec-max 1000000 --live  --config
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

3.1 set with --config, reboot guest 

#virsh blkdeviotune r720 vdb --read-bytes-sec-max 100000 --config 
#virsh destroy r720 ; virsh start r720
error: Failed to start domain r720
error: unsupported configuration: there are some block I/O throttling parameters that are not supported with this QEMU binary


4.set blkdeviotune with iops_size parameter with options  
#virsh start r720

#virsh blkdeviotune r720 vdb --size-iops-sec 100000
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary
 
#virsh blkdeviotune r720 vdb --size-iops-sec 100000 --live
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

#virsh blkdeviotune r720 vdb --size-iops-sec 100000 --current
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

# virsh blkdeviotune r720 vdb --size-iops-sec 100000 --live --config
error: Unable to change block I/O throttle
error: unsupported configuration: a block I/O throttling parameter is not supported with this QEMU binary

4.1 set iops-size with --config reboot guest .

#virsh blkdeviotune r720 vdb --size-iops-sec 100000 --config 
#virsh destroy r720 ; virsh start r720 
Domain r720 destroyed

error: Failed to start domain r720
error: unsupported configuration: there are some block I/O throttling parameters that are not supported with this QEMU binary

It has a clear error message, move to verified.

Comment 20 errata-xmlrpc 2015-11-19 06:36:14 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHBA-2015-2202.html