Bug 1498042
Summary: | RFE: option to mark virtual block device as rotational/non-rotational | |||
---|---|---|---|---|
Product: | Red Hat Enterprise Linux 7 | Reporter: | Daniel Berrangé <berrange> | |
Component: | qemu-kvm-rhev | Assignee: | Daniel Berrangé <berrange> | |
Status: | CLOSED ERRATA | QA Contact: | CongLi <coli> | |
Severity: | low | Docs Contact: | ||
Priority: | low | |||
Version: | 7.5 | CC: | 376886780, aliang, berrange, chayang, coli, eblake, juzhang, kchamart, knoel, lolyu, mailinglists35, michen, mtessun, qzhang, thomas, virt-maint, xuwei | |
Target Milestone: | rc | Keywords: | FutureFeature | |
Target Release: | --- | |||
Hardware: | Unspecified | |||
OS: | Unspecified | |||
Whiteboard: | ||||
Fixed In Version: | qemu-kvm-rhev-2.10.0-10.el7 | Doc Type: | If docs needed, set a value | |
Doc Text: | Story Points: | --- | ||
Clone Of: | ||||
: | 1498955 1583807 (view as bug list) | Environment: | ||
Last Closed: | 2018-04-11 00:38:42 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: | ||||
Bug Depends On: | ||||
Bug Blocks: | 1498955 |
Description
Daniel Berrangé
2017-10-03 11:35:04 UTC
NBD also supports the advertisement of rotational or not (In reply to Eric Blake from comment #3) > NBD also supports the advertisement of rotational or not Interestingly/strangely the Linux NBD kernel client ignores this feature, and unconditionally sets the block dev as non-rotational. Posted some possible patches for IDE/SCSI https://lists.gnu.org/archive/html/qemu-devel/2017-10/msg00698.html Merged upstream in 3 patches commit 96f43c2b0a663f4789b51ed97297163321e7ba5e Author: Daniel P. Berrange <berrange> Date: Fri Oct 20 10:14:03 2017 +0100 ide: avoid referencing NULL dev in rotational rate setting The 'dev' variable can be NULL when the guest OS calls identify on an IDE unit that does not have a drive attached to it. Signed-off-by: Daniel P. Berrange <berrange> Reviewed-by: Stefan Hajnoczi <stefanha> Message-id: 20171020091403.1479-1-berrange Signed-off-by: John Snow <jsnow> commit 3b19f4506901ecce25ff36cf62353a2b4bfe4f2b Author: Daniel P. Berrange <berrange> Date: Wed Oct 4 12:40:08 2017 +0100 ide: support reporting of rotation rate The Linux kernel will query the ATA IDENTITY DEVICE data, word 217 to determine the rotations per minute of the disk. If this has the value 1, it is taken to be an SSD and so Linux sets the 'rotational' flag to 0 for the I/O queue and will stop using that disk as a source of random entropy. Other operating systems may also take into account rotation rate when setting up default behaviour. Mgmt apps should be able to set the rotation rate for virtualized block devices, based on characteristics of the host storage in use, so that the guest OS gets sensible behaviour out of the box. This patch thus adds a 'rotation-rate' parameter for 'ide-hd' device types. Signed-off-by: Daniel P. Berrange <berrange> Message-Id: <20171004114008.14849-3-berrange> Reviewed-by: John Snow <jsnow> Signed-off-by: Paolo Bonzini <pbonzini> commit 070f80095ad5b1143b50d2faffd2b1a84292e00d Author: Daniel P. Berrange <berrange> Date: Wed Oct 4 12:40:07 2017 +0100 scsi-disk: support reporting of rotation rate The Linux kernel will query the SCSI "Block device characteristics" VPD to determine the rotations per minute of the disk. If this has the value 1, it is taken to be an SSD and so Linux sets the 'rotational' flag to 0 for the I/O queue and will stop using that disk as a source of random entropy. Other operating systems may also take into account rotation rate when setting up default behaviour. Mgmt apps should be able to set the rotation rate for virtualized block devices, based on characteristics of the host storage in use, so that the guest OS gets sensible behaviour out of the box. This patch thus adds a 'rotation-rate' parameter for 'scsi-hd' and 'scsi-block' device types. For the latter, this parameter will be ignored unless the host device has TYPE_DISK. Signed-off-by: Daniel P. Berrange <berrange> Message-Id: <20171004114008.14849-2-berrange> Signed-off-by: Paolo Bonzini <pbonzini> Fix included in qemu-kvm-rhev-2.10.0-10.el7 Verified on: qemu-kvm-rhev-2.10.0-10.el7.x86_64 1. scsi-hd: 1.1 # /usr/libexec/qemu-kvm -device scsi-hd,\? scsi-hd.rotation_rate=uint16 1.2 rotation_rate=1 CML: -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \ -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=qcow2,file=/home/kvm_autotest_root/images/rhel75-64-virtio-scsi.qcow2 \ -device scsi-hd,id=image1,drive=drive_image1,rotation_rate=1 \ qtree info: rotation_rate = 1 (0x1) guest: # cat /sys/block/sda/queue/rotational 0 1.3 rotation_rate=0 CML: -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \ -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=qcow2,file=/home/kvm_autotest_root/images/rhel75-64-virtio-scsi.qcow2 \ -device scsi-hd,id=image1,drive=drive_image1,rotation_rate=0 \ qtree info: rotation_rate = 0 (0x0) guest: # cat /sys/block/sda/queue/rotational 1 2. scsi-block: 2.1 # /usr/libexec/qemu-kvm -device scsi-block,\? scsi-block.rotation_rate=uint16 2.2 rotation_rate=1 CML: -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \ -drive file=/dev/sdb,if=none,media=disk,format=raw,rerror=stop,werror=stop,cache=none,aio=native,id=scsi-disk0 \ -device scsi-block,drive=scsi-disk0,id=disk,rotation_rate=1 \ qtree info: dev: scsi-block, id "disk" drive = "scsi-disk0" rotation_rate = 1 (0x1) guest: # cat /sys/block/sdb/queue/rotational 0 2.3 rotation_rate=0 CML: -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \ -drive file=/dev/sdb,if=none,media=disk,format=raw,rerror=stop,werror=stop,cache=none,aio=native,id=scsi-disk0 \ -device scsi-block,drive=scsi-disk0,id=disk,rotation_rate=0 \ qtree info: dev: scsi-block, id "disk" drive = "scsi-disk0" rotation_rate = 0 (0x0) guest: # cat /sys/block/sda/queue/rotational 1 3. ide-hd: 3.1 # /usr/libexec/qemu-kvm -device ide-hd,\? ide-hd.rotation_rate=uint16 3.2 rotation_rate=1 CML: -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=qcow2,file=/home/kvm_autotest_root/images/rhel75-64-virtio.qcow2 \ -device ide-hd,id=image1,drive=drive_image1,bus=ide.0,unit=0,rotation_rate=1 \ qtree info: rotation_rate = 1 (0x1) guest: # cat /sys/block/sda/queue/rotational 0 3.3 rotation_rate=0 CML: -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=qcow2,file=/home/kvm_autotest_root/images/rhel75-64-virtio.qcow2 \ -device ide-hd,id=image1,drive=drive_image1,bus=ide.0,unit=0,rotation_rate=0 \ qtree info: rotation_rate = 0 (0x0) guest: # cat /sys/block/sda/queue/rotational 1 Hi Daniel, Could you please help confirm that ide-drive and scsi-generic will not add rotational flag, right ? Thanks. That is correct, only ide-hd, scsi-block and scsi-hd support this. BTW, as well as testing rotation_rate=1 (non rotational), and rotation_rate=0 (unspecified rotation rate), it is worth testing rotation_rate=15000 (a rotation rate of 15,000 RPM). The latter should result in rotational==1 in the guest, as with rotation_rate=0. Also, check $ smartctl -i /dev/NNN reports a "Rotation Rate" value, when using a rotation_rate != 0 in QEMU. 1. scsi-block: CML: -drive file=/dev/sdb,if=none,media=disk,format=raw,rerror=stop,werror=stop,cache=none,aio=native,id=scsi-disk0 \ -device scsi-block,drive=scsi-disk0,id=disk,rotation_rate=15000 \ qtree info: dev: scsi-block, id "disk" rotation_rate = 15000 (0x3a98) guest: # cat /sys/block/sdb/queue/rotational 1 # smartctl -i /dev/sdb smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-800.el7.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: NETAPP Product: LUN Revision: 7320 User Capacity: 42,858,446,848 bytes [42.8 GB] Logical block size: 512 bytes Rotation Rate: 15000 rpm Logical Unit id: 0x60a9800050334c33424a7856476258640x4a785647625864000a980050334c3342 Serial number: P3L3BJxVGbXd Device type: disk Transport protocol: Fibre channel (FCP-2) Local Time is: Wed Dec 6 13:16:42 2017 CST SMART support is: Available - device has SMART capability. SMART support is: Enabled Temperature Warning: Disabled or Not Supported 2. scsi-hd: CML: -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=qcow2,file=/home/kvm_autotest_root/images/rhel75-64-virtio-scsi.qcow2 \ -device scsi-hd,id=image1,drive=drive_image1,rotation_rate=15000 \ qtree info: dev: scsi-hd, id "image1" rotation_rate = 15000 (0x3a98) guest: # cat /sys/block/sda/queue/rotational 1 # smartctl -i /dev/sda smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-800.el7.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: QEMU Product: QEMU HARDDISK Revision: 2.5+ User Capacity: 21,474,836,480 bytes [21.4 GB] Logical block size: 512 bytes LU is thin provisioned, LBPRZ=0 Rotation Rate: 15000 rpm Device type: disk Local Time is: Wed Dec 6 13:19:10 2017 CST SMART support is: Unavailable - device lacks SMART capability. 3. ide-hd: CML: qtree info: dev: ide-hd, id "image1" rotation_rate = 15000 (0x3a98) guest: # cat /sys/block/sda/queue/rotational 1 # smartctl -i /dev/sda smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-789.el7.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Device Model: QEMU HARDDISK Serial Number: QM00001 Firmware Version: 2.5+ User Capacity: 21,474,836,480 bytes [21.4 GB] Sector Size: 512 bytes logical/physical Rotation Rate: 15000 rpm Device is: Not in smartctl database [for details use: -P showall] ATA Version is: ATA/ATAPI-7, ATA/ATAPI-5 published, ANSI NCITS 340-2000 Local Time is: Wed Dec 6 13:59:58 2017 CST SMART support is: Available - device has SMART capability. SMART support is: Enabled Hi Daniel, Could you please help confirm the following scenario works as expected? 1. host: #modprobe scsi_debug # lsscsi [0:0:0:0] storage HP P420i 7.02 - [0:1:0:0] disk HP LOGICAL VOLUME 7.02 /dev/sda [3:0:0:0] cd/dvd hp DVDRAM GT80N EA02 /dev/sr0 [14:0:0:0] disk Linux scsi_debug 0004 /dev/sdb 2. pass through /dev/sdb to guest. CML: -device virtio-scsi-pci,id=virtio_scsi_pci0,bus=pci.0,addr=0x3 \ -drive file=/dev/sdb,if=none,media=disk,format=raw,rerror=stop,werror=stop,cache=none,aio=native,id=scsi-disk0 \ -device scsi-block,drive=scsi-disk0,id=disk,rotation_rate=15000 \ qtree info: dev: scsi-block, id "disk" rotation_rate = 15000 (0x3a98) guest: # cat /sys/block/sda/queue/rotational 0 # smartctl -i /dev/sda smartctl 6.5 2016-05-07 r4318 [x86_64-linux-3.10.0-789.el7.x86_64] (local build) Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Vendor: Linux Product: scsi_debug Revision: 0004 User Capacity: 8,388,608 bytes [8.38 MB] Logical block size: 512 bytes Rotation Rate: Solid State Device Form Factor: < 1.8 inches Logical Unit id: 0x5333333000007530 Serial number: 30000 Device type: disk Transport protocol: SAS (SPL-3) Local Time is: Wed Dec 6 14:18:25 2017 CST SMART support is: Available - device has SMART capability. SMART support is: Disabled Temperature Warning: Disabled or Not Supported Thanks. That all looks like it is operating correctly. Note, however, that your very last test with virtio-scsi-pci is not required - that device model was not affected by this work. (In reply to Daniel Berrange from comment #17) > That all looks like it is operating correctly. Note, however, that your very > last test with virtio-scsi-pci is not required - that device model was not > affected by this work. Thanks Daniel. Based on comment 12, comment 15 and comment 17, set this bug to 'VERIFIED'. Hi, Daniel Test with 6.9 guest, no "Rotation Rate" displayed in "smartctl -i /dev/sda". qemu cmd: -drive id=drive_image1,if=none,snapshot=off,aio=native,cache=none,format=raw,file=/home/kvm_autotest_root/images/rhel69-64-virtio.raw \ -device ide-hd,id=image1,drive=drive_image1,bus=ide.0,unit=0,rotation_rate=15000 \ qtree info: rotation_rate = 15000 (0x3a98) guest info: # cat /sys/block/sda/queue/rotational 1 # smartctl -i /dev/sda smartctl 5.43 2016-09-28 r4347 [x86_64-linux-2.6.32-696.el6.x86_64] (local build) Copyright (C) 2002-12 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: QEMU HARDDISK Serial Number: QM00001 Firmware Version: 2.5+ User Capacity: 21,474,836,480 bytes [21.4 GB] Sector Size: 512 bytes logical/physical Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 5 ATA Standard is: ATA/ATAPI-5 published, ANSI NCITS 340-2000 Local Time is: Wed Dec 13 06:17:28 2017 CST SMART support is: Available - device has SMART capability. SMART support is: Enabled I expect that is simply due to RHEL-6 having an older version of smartctl which doesn't report this info. Got it, thank you, Daniel. 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://access.redhat.com/errata/RHSA-2018:1104 what is the corresponding domain xml file for this feature? i.e. I want to force a vm guest think the storage is ssd I mean... [root@gw2 vmstore]# virt-xml gwwin --edit --disk rotation_rate=0 ERROR Unknown options ['rotation_rate'] oh, libvirt does not know yet about this. filed #1595931 Hi Daniel, I noticed that "virtio-blk has no mechanism for this. One could be added, or just rely on a recommendation use of virtio-scsi instead." has been mentioned at last. Could you please give out an example about how to add a 'rotational' boolean flag when using 'virtio-blk', thx. (In reply to James Hu from comment #27) > Hi Daniel, > I noticed that "virtio-blk has no mechanism for this. One could be > added, or just rely on a recommendation use of virtio-scsi instead." has > been mentioned at last. > Could you please give out an example about how to add a 'rotational' > boolean flag when using 'virtio-blk', thx. It'll require many things - a virtio spec addition, then a QEMU driver code update, and then guest driver update for all OS that need it. I can't give further details beyond this - ask for the upstream qemu-devel mailing list if you to consider this further, though I suspect people will just recommend to use virtio-scsi instead. (In reply to Daniel Berrangé from comment #28) > (In reply to James Hu from comment #27) > > Hi Daniel, > > I noticed that "virtio-blk has no mechanism for this. One could be > > added, or just rely on a recommendation use of virtio-scsi instead." has > > been mentioned at last. > > Could you please give out an example about how to add a 'rotational' > > boolean flag when using 'virtio-blk', thx. > > It'll require many things - a virtio spec addition, then a QEMU driver code > update, and then guest driver update for all OS that need it. I can't give > further details beyond this - ask for the upstream qemu-devel mailing list > if you to consider this further, though I suspect people will just recommend > to use virtio-scsi instead. Thank you for your reply. We'll consider about switching into virtio-scsi. |