From 5cf9b990b779e279cd5d78fdd94f2935aa8b553b Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Wed, 8 May 2019 11:33:41 -0400 Subject: [PATCH 1/6] use virtio for windows platform emulator --- .../kvm/resource/LibvirtComputingResource.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index c07b2d93435b..e67236c59898 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -3198,12 +3198,15 @@ private DiskDef.DiskBus getGuestDiskModel(final String platformEmulator) { return DiskDef.DiskBus.IDE; } else if (platformEmulator.startsWith("Other PV Virtio-SCSI")) { return DiskDef.DiskBus.SCSI; - } else if (platformEmulator.startsWith("Ubuntu") || platformEmulator.startsWith("Fedora 13") || platformEmulator.startsWith("Fedora 12") || platformEmulator.startsWith("Fedora 11") || - platformEmulator.startsWith("Fedora 10") || platformEmulator.startsWith("Fedora 9") || platformEmulator.startsWith("CentOS 5.3") || platformEmulator.startsWith("CentOS 5.4") || - platformEmulator.startsWith("CentOS 5.5") || platformEmulator.startsWith("CentOS") || platformEmulator.startsWith("Fedora") || - platformEmulator.startsWith("Red Hat Enterprise Linux 5.3") || platformEmulator.startsWith("Red Hat Enterprise Linux 5.4") || - platformEmulator.startsWith("Red Hat Enterprise Linux 5.5") || platformEmulator.startsWith("Red Hat Enterprise Linux 6") || platformEmulator.startsWith("Debian GNU/Linux") || - platformEmulator.startsWith("FreeBSD 10") || platformEmulator.startsWith("Oracle") || platformEmulator.startsWith("Other PV")) { + } else if (platformEmulator.startsWith("Ubuntu") || + platformEmulator.startsWith("Fedora") || + platformEmulator.startsWith("CentOS") || + platformEmulator.startsWith("Red Hat Enterprise Linux") || + platformEmulator.startsWith("Debian GNU/Linux") || + platformEmulator.startsWith("FreeBSD") || + platformEmulator.startsWith("Oracle") || + platformEmulator.startsWith("Windows") || + platformEmulator.startsWith("Other PV")) { return DiskDef.DiskBus.VIRTIO; } else { return DiskDef.DiskBus.IDE; From 35feaa3bf9d9f8694c4395ef1efa1a733cefb664 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Fri, 10 May 2019 10:46:54 -0400 Subject: [PATCH 2/6] set root disk to ide for windows unless overwritten by vm spec params or platform emulator string --- .../kvm/resource/LibvirtComputingResource.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index e67236c59898..06744a626cd0 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2330,9 +2330,13 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { // if params contains a rootDiskController key, use its value (this is what other HVs are doing) DiskDef.DiskBus diskBusType = getDiskModelFromVMDetail(vmSpec); - if (diskBusType == null) { - diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); + // always use bus type ide for windows root volumes unless specified in vmspec + if (volume.getType() == Volume.Type.ROOT && vmSpec.getPlatformEmulator().startsWith("Windows")){ + diskBusType = DiskDef.DiskBus.IDE; + } else { + diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); + } } // I'm not sure why previously certain DATADISKs were hard-coded VIRTIO and others not, however this @@ -3205,7 +3209,7 @@ private DiskDef.DiskBus getGuestDiskModel(final String platformEmulator) { platformEmulator.startsWith("Debian GNU/Linux") || platformEmulator.startsWith("FreeBSD") || platformEmulator.startsWith("Oracle") || - platformEmulator.startsWith("Windows") || + platformEmulator.startsWith("Windows PV") || platformEmulator.startsWith("Other PV")) { return DiskDef.DiskBus.VIRTIO; } else { From 10c0c7aa3dee1298adf05bd23c4e5e0b42fdc589 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Mon, 13 May 2019 10:59:15 -0400 Subject: [PATCH 3/6] use ide for root disk in windows vm except if wndows pv --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 06744a626cd0..6ec626d8e6a6 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2331,8 +2331,8 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { // if params contains a rootDiskController key, use its value (this is what other HVs are doing) DiskDef.DiskBus diskBusType = getDiskModelFromVMDetail(vmSpec); if (diskBusType == null) { - // always use bus type ide for windows root volumes unless specified in vmspec - if (volume.getType() == Volume.Type.ROOT && vmSpec.getPlatformEmulator().startsWith("Windows")){ + // always use bus type ide for windows root volumes unless specified in vm details or windows pv is selected + if (volume.getType() == Volume.Type.ROOT && vmSpec.getPlatformEmulator().startsWith("Windows") && !vmSpec.getPlatformEmulator().startsWith("Windows PV")){ diskBusType = DiskDef.DiskBus.IDE; } else { diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); From fcf5804e6022839c67edb9f0cf9579e77d342109 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Mon, 13 May 2019 16:22:46 -0400 Subject: [PATCH 4/6] use ide for root disk and virtio for datadisks for windows* unless windows pv --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 6ec626d8e6a6..4d514fcc3f61 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2331,9 +2331,11 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { // if params contains a rootDiskController key, use its value (this is what other HVs are doing) DiskDef.DiskBus diskBusType = getDiskModelFromVMDetail(vmSpec); if (diskBusType == null) { - // always use bus type ide for windows root volumes unless specified in vm details or windows pv is selected + // always use bus type ide for windows root volumes and virtio for data volumes unless specified in vm details or windows pv is selected if (volume.getType() == Volume.Type.ROOT && vmSpec.getPlatformEmulator().startsWith("Windows") && !vmSpec.getPlatformEmulator().startsWith("Windows PV")){ diskBusType = DiskDef.DiskBus.IDE; + } else if (volume.getType() == Volume.Type.DATADISK && vmSpec.getPlatformEmulator().startsWith("Windows")) { + diskBusType = DiskDef.DiskBus.VIRTIO; } else { diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); } From 91274afc7644212177c872ef6fa907e165a95ba8 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Mon, 8 Jul 2019 16:39:48 -0400 Subject: [PATCH 5/6] replaced windows specific logic and modified logic for raw physical disks so that data disks are always virtio (or iscsi) like with nfs (or file based disks) --- .../kvm/resource/LibvirtComputingResource.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 4d514fcc3f61..aa0f35eb8195 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -2331,14 +2331,7 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { // if params contains a rootDiskController key, use its value (this is what other HVs are doing) DiskDef.DiskBus diskBusType = getDiskModelFromVMDetail(vmSpec); if (diskBusType == null) { - // always use bus type ide for windows root volumes and virtio for data volumes unless specified in vm details or windows pv is selected - if (volume.getType() == Volume.Type.ROOT && vmSpec.getPlatformEmulator().startsWith("Windows") && !vmSpec.getPlatformEmulator().startsWith("Windows PV")){ - diskBusType = DiskDef.DiskBus.IDE; - } else if (volume.getType() == Volume.Type.DATADISK && vmSpec.getPlatformEmulator().startsWith("Windows")) { - diskBusType = DiskDef.DiskBus.VIRTIO; - } else { - diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); - } + diskBusType = getGuestDiskModel(vmSpec.getPlatformEmulator()); } // I'm not sure why previously certain DATADISKs were hard-coded VIRTIO and others not, however this @@ -2375,7 +2368,12 @@ public int compare(final DiskTO arg0, final DiskTO arg1) { disk.defNetworkBasedDisk(glusterVolume + path.replace(mountpoint, ""), pool.getSourceHost(), pool.getSourcePort(), null, null, devId, diskBusType, DiskProtocol.GLUSTER, DiskDef.DiskFmtType.QCOW2); } else if (pool.getType() == StoragePoolType.CLVM || physicalDisk.getFormat() == PhysicalDiskFormat.RAW) { - disk.defBlockBasedDisk(physicalDisk.getPath(), devId, diskBusType); + if (volume.getType() == Volume.Type.DATADISK) { + disk.defBlockBasedDisk(physicalDisk.getPath(), devId, diskBusTypeData); + } + else { + disk.defBlockBasedDisk(physicalDisk.getPath(), devId, diskBusType); + } } else { if (volume.getType() == Volume.Type.DATADISK) { disk.defFileBasedDisk(physicalDisk.getPath(), devId, diskBusTypeData, DiskDef.DiskFmtType.QCOW2); From fb40eedce175504cfb3ccb408601e9e1a3a8c920 Mon Sep 17 00:00:00 2001 From: Sid Kattoju Date: Tue, 9 Jul 2019 10:43:58 -0400 Subject: [PATCH 6/6] use virtio when selecting 'Other Ubuntu', remove extraneous check for 'Windows PV' --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index aa0f35eb8195..01c15320ab25 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -3202,14 +3202,13 @@ private DiskDef.DiskBus getGuestDiskModel(final String platformEmulator) { return DiskDef.DiskBus.IDE; } else if (platformEmulator.startsWith("Other PV Virtio-SCSI")) { return DiskDef.DiskBus.SCSI; - } else if (platformEmulator.startsWith("Ubuntu") || + } else if (platformEmulator.contains("Ubuntu") || platformEmulator.startsWith("Fedora") || platformEmulator.startsWith("CentOS") || platformEmulator.startsWith("Red Hat Enterprise Linux") || platformEmulator.startsWith("Debian GNU/Linux") || platformEmulator.startsWith("FreeBSD") || platformEmulator.startsWith("Oracle") || - platformEmulator.startsWith("Windows PV") || platformEmulator.startsWith("Other PV")) { return DiskDef.DiskBus.VIRTIO; } else {