Bug 1422450

Summary: [virtio-scsi dataplane] viritio scsi disks are bound to the first controller
Product: [oVirt] ovirt-engine Reporter: Israel Pinto <ipinto>
Component: BLL.VirtAssignee: Tomas Jelinek <tjelinek>
Status: CLOSED CURRENTRELEASE QA Contact: Israel Pinto <ipinto>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 4.1.1CC: bugs, lveyde, tjelinek
Target Milestone: ovirt-4.1.2Flags: tjelinek: ovirt-4.1?
ipinto: planning_ack?
rule-engine: devel_ack+
rule-engine: testing_ack+
Target Release: 4.1.2   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2017-05-23 08:14:45 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: Virt RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1366507    
Attachments:
Description Flags
vdsm.log
none
vm xml none

Description Israel Pinto 2017-02-15 11:24:32 UTC
Description of problem:
While verify RFE https://bugzilla.redhat.com/show_bug.cgi?id=1366507
The viritio scsi disks are bound to the first controller 
and not round robin around them.


Version-Release number of selected component (if applicable):
4.1.1-0.1.el7

Steps to Reproduce:
1. Create VM with 4 iscsi disks 
2. Set IO thread to 4
3. Run VM
4. Check VM XML with virsh -r dumpxml <vm is in virsh -r list>
5. Check that controller and driver should get the same thread number 
   and each disk is allocate to diff thread 
 
Actual results:
The viritio scsi disks are bound to the first controller 
and not round robin around them.


Additional info:
See attached vm xml and vdsm log

Comment 1 Israel Pinto 2017-02-15 11:28:06 UTC
Created attachment 1250548 [details]
vdsm.log

Comment 2 Israel Pinto 2017-02-15 11:28:35 UTC
Created attachment 1250549 [details]
vm xml

Comment 3 Israel Pinto 2017-05-09 08:38:36 UTC
Verify with:
Red Hat Virtualization Manager Version: 4.1.2.1-0.1.el7
OS Version:RHEL - 7.3 - 7.el7
Kernel Version:3.10.0 - 514.16.1.el7.x86_64
KVM Version:2.6.0 - 28.el7_3.9
LIBVIRT Version:libvirt-2.0.0-10.el7_3.5
VDSM Version:vdsm-4.19.12-1.el7ev
Cases:
CASE 1:
VM configuration: VM with 1 disk ISCSI and 1 io threads
<domain xmlns:ovirt="http://ovirt.org/vm/tune/1.0" type="kvm">
    <name>data_plan_1_disk_1_iothread</name>
    <uuid>23678104-0188-4387-a596-65d26b7b4c92</uuid>
    <iothreads>1</iothreads>
    <devices>
        <controller index="0" model="virtio-scsi" type="scsi">
            <driver iothread="1" />
        </controller>
        <controller index="0" ports="16" type="virtio-serial" />
        <disk device="disk" snapshot="no" type="block">
            <source dev="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/5449c95e-b387-4d19-8f58-a22000608f3c/images/bdaf8d6a-b7ac-4c93-897f-c2e9536a0bba/3f91ac02-37f7-4763-8790-be3514a1c8f8" />
            <target bus="virtio" dev="vda" />
            <serial>bdaf8d6a-b7ac-4c93-897f-c2e9536a0bba</serial>
            <driver cache="none" error_policy="stop" io="native" iothread="1" name="qemu" type="qcow2" />
        </disk>
    </devices>
</domain>
Result : PASS
1 controller with 1 thread 
on Disk 1 iothread is set
---------------
CASE 2:
VM configuration: VM with 2 disk on ISCSI and 2 iothreads
<domain xmlns:ovirt="http://ovirt.org/vm/tune/1.0" type="kvm">
    <name>data_plane_2_disk_2_io</name>
    <uuid>ddd98f4a-a42f-4151-b47e-ff8c5a025d8c</uuid>
    <iothreads>2</iothreads>
    <devices>
        <controller index="0" model="virtio-scsi" type="scsi">
            <driver iothread="1" />
        </controller>
        <controller index="1" model="virtio-scsi" type="scsi">
            <driver iothread="2" />
        </controller>
        <controller index="0" ports="16" type="virtio-serial">
            <address bus="0x00" domain="0x0000" function="0x0" slot="0x06" type="pci" />
        </controller>
        <disk device="disk" snapshot="no" type="block">
            <address bus="0" controller="0" target="0" type="drive" unit="0" />
            <source dev="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/5449c95e-b387-4d19-8f58-a22000608f3c/images/17ace1a2-3e35-42d0-bf65-fdc8ef67c50c/2f9c699a-6805-4305-a25f-ba2f79b50261" />
            <target bus="scsi" dev="sda" />
            <serial>17ace1a2-3e35-42d0-bf65-fdc8ef67c50c</serial>
            <boot order="1" />
            <driver cache="none" error_policy="stop" io="native" name="qemu" type="raw" />
        </disk>
        <disk device="disk" snapshot="no" type="block">
            <address bus="0x00" domain="0x0000" function="0x0" slot="0x07" type="pci" />
            <source dev="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/5449c95e-b387-4d19-8f58-a22000608f3c/images/9630a53a-8d1c-4ba5-ab65-10864959b0ad/0c15e4ee-7d33-4d17-8375-7607bb5a083d" />
            <target bus="virtio" dev="vda" />
            <serial>9630a53a-8d1c-4ba5-ab65-10864959b0ad</serial>
            <driver cache="none" error_policy="stop" io="native" iothread="1" name="qemu" type="qcow2" />
        </disk>
    </devices>
</domain>
Result: PASS
2 controllers each on with one thread
---------------------------
CASE 3:
VM configuration: Vm with 2 disk: 1 ISCSI and 1 NFS, 2 IO Threads
<domain xmlns:ovirt="http://ovirt.org/vm/tune/1.0" type="kvm">
    <name>data_plan_1_iscsi_1_nfs_1_thread</name>
    <uuid>8792f143-5da0-4406-9eb9-90a243c524d6</uuid>
    <iothreads>2</iothreads>
    <devices>
        <controller index="0" model="virtio-scsi" type="scsi">
            <driver iothread="1" />
        </controller>
        <controller index="1" model="virtio-scsi" type="scsi">
            <driver iothread="2" />
        </controller>
        <controller index="0" ports="16" type="virtio-serial" />
        <video>
            <model heads="1" ram="65536" type="qxl" vgamem="16384" vram="32768" />
        </video>
        <disk device="disk" snapshot="no" type="block">
            <source dev="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/5449c95e-b387-4d19-8f58-a22000608f3c/images/59384f5e-c457-446b-ad0a-f07ba93c5a0b/59b86c89-e319-4c92-a991-346434595efe" />
            <target bus="virtio" dev="vda" />
            <serial>59384f5e-c457-446b-ad0a-f07ba93c5a0b</serial>
            <boot order="1" />
            <driver cache="none" error_policy="stop" io="native" iothread="1" name="qemu" type="qcow2" />
        </disk>
        <disk device="disk" snapshot="no" type="file">
            <address bus="0" controller="0" target="0" type="drive" unit="0" />
            <source file="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/87e7d023-7452-44a4-be54-9ff029292a83/images/54ac6602-89ca-40d9-8053-550ff932cdf8/ee6f0b21-5fc9-4c43-9844-1dd4e305ba0f" />
            <target bus="scsi" dev="sda" />
            <serial>54ac6602-89ca-40d9-8053-550ff932cdf8</serial>
            <driver cache="none" error_policy="stop" io="threads" name="qemu" type="raw" />
        </disk>        
    </devices>
</domain>
Result: PASS
2 controllers each on with one thread
On the disks i see diff behavior:
-------------------------
CASE 4 (regression): 
VM with 2 NFS disks and 2 IO Threads
<domain xmlns:ovirt="http://ovirt.org/vm/tune/1.0" type="kvm">
    <name>data_2_NFS_2_iothread</name>
    <uuid>843c9e5b-fdcb-4947-a8e5-8f0123e30d43</uuid>
    <iothreads>2</iothreads>
    <devices>
        <controller index="0" model="virtio-scsi" type="scsi">
            <driver iothread="1" />
        </controller>
        <controller index="1" model="virtio-scsi" type="scsi">
            <driver iothread="2" />
        </controller>
        <disk device="disk" snapshot="no" type="file">
            <address bus="0" controller="0" target="0" type="drive" unit="0" />
            <source file="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/87e7d023-7452-44a4-be54-9ff029292a83/images/186f357a-67a2-4259-983a-9664f9d0ffa8/9eb384f2-169a-44d2-af67-ff96156b80c5" />
            <target bus="scsi" dev="sda" />
            <serial>186f357a-67a2-4259-983a-9664f9d0ffa8</serial>
            <boot order="1" />
            <driver cache="none" error_policy="stop" io="threads" name="qemu" type="raw" />
        </disk>
        <disk device="disk" snapshot="no" type="file">
            <address bus="0" controller="0" target="0" type="drive" unit="1" />
            <source file="/rhev/data-center/7550d189-d97d-43d6-929f-611db2ae4e17/87e7d023-7452-44a4-be54-9ff029292a83/images/9cf246d2-152f-4adf-8878-bcb9d233ad9b/4392c52d-faaa-431d-9150-661e75ecc99f" />
            <target bus="scsi" dev="sdb" />
            <serial>9cf246d2-152f-4adf-8878-bcb9d233ad9b</serial>
            <driver cache="none" error_policy="stop" io="threads" name="qemu" type="raw" />
        </disk>
    </devices>    
</domain> 

Result: PASS
2 controllers each on with one thread