On 01/18/21 18:03, Stefan Hajnoczi wrote: > On Thu, Jan 14, 2021 at 09:17:55PM +0100, Laszlo Ersek wrote: >> On 01/05/21 11:49, Stefan Hajnoczi wrote: >>> The second post in the storage series covers virtio-blk and virtio-scsi. >>> It compares the two and offers recommendations that users and tools >>> using QEMU can use as a starting point. Graphs are included comparing >>> the performance of various options. >>> >>> Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com> >>> --- >>> v2: >>> * Mention default storage controllers for non-x86 [danpb] >>> * Remove statement about read-only ISO virtio-blk devices, both Rich >>> Jones and Daniel Berrange commented about this at different times so >>> I decided to drop it completely [danpb] >>> * Clarify PCI slot limits and multi-function discussion for virtio-blk >>> [danpb] >>> * Mention multiple virtio-scsi devices for NUMA tuning and that >>> emulated LUNs can be HDDs or CD-ROMs [danpb] >>> --- >>> ...020-12-17-virtio-blk-scsi-configuration.md | 115 ++++++++++++++++++ >>> screenshots/2020-09-15-scsi-devices.svg | 1 + >>> screenshots/2020-09-15-virtio-blk-vs-scsi.svg | 1 + >>> 3 files changed, 117 insertions(+) >>> create mode 100644 _posts/2020-12-17-virtio-blk-scsi-configuration.md >>> create mode 100644 screenshots/2020-09-15-scsi-devices.svg >>> create mode 100644 screenshots/2020-09-15-virtio-blk-vs-scsi.svg >>> >>> diff --git a/_posts/2020-12-17-virtio-blk-scsi-configuration.md >>> b/_posts/2020-12-17-virtio-blk-scsi-configuration.md >>> new file mode 100644 >>> index 0000000..b4361f5 >>> --- /dev/null >>> +++ b/_posts/2020-12-17-virtio-blk-scsi-configuration.md >>> @@ -0,0 +1,115 @@ >>> +--- >>> +layout: post >>> +title: "Configuring virtio-blk and virtio-scsi Devices" >>> +date: 2021-01-05 07:00:00 +0000 >>> +author: Stefan Hajnoczi and Sergio Lopez >>> +categories: [storage] >>> +--- >>> +The [previous >>> article](https://www.qemu.org/2020/09/14/qemu-storage-overview/) >>> +in this series introduced QEMU storage concepts. Now we move on to look at >>> the >>> +two most popular emulated storage controllers for virtualization: >>> virtio-blk >>> +and virtio-scsi. >>> + >>> +This post provides recommendations for configuring virtio-blk and >>> virtio-scsi >>> +and how to choose between the two devices. The recommendations provide good >>> +performance in a wide range of use cases and are suitable as default >>> settings >>> +in tools that use QEMU. >>> + >>> +## Virtio storage devices >>> +### Key points >>> +* Prefer virtio storage devices over other emulated storage controllers. >>> +* Use the latest virtio drivers. >>> + >>> +Virtio devices are recommended over other emulated storage controllers as >>> they >>> +are generally the most performant and fully-featured storage controllers in >>> +QEMU. >>> + >>> +Unlike emulations of hardware storage controllers, virtio-blk and >>> virtio-scsi >>> +are specifically designed and optimized for virtualization. The details of >>> how >>> +they work are published for driver and device implementors in the [VIRTIO >>> +specification](https://docs.oasis-open.org/virtio/virtio/v1.1/virtio-v1.1.html). >>> + >>> +Virtio drivers are available for both Linux and Windows virtual machines. >>> +Installing the latest version is recommended for the latest bug fixes and >>> +performance enhancements. >>> + >>> +If virtio drivers are not available, the AHCI (SATA) device is widely >>> supported >>> +by modern x86 operating systems and can be used as a fallback. On non-x86 >>> +guests the default storage controller can be used as a fallback. >>> + >>> +## Comparing virtio-blk and virtio-scsi >>> +### Key points >>> +* Prefer virtio-scsi for attaching more than 28 disks or for full SCSI >>> support. >>> +* Prefer virtio-blk in performance-critical use cases. >>> +* With virtio-scsi, use scsi-block for SCSI passthrough and otherwise use >>> scsi-hd. >>> + >>> +Two virtio storage controllers are available: virtio-blk and virtio-scsi. >>> + >>> +### virtio-blk >>> +The virtio-blk device presents a block device to the virtual machine. Each >>> +virtio-blk device appears as a disk inside the guest. virtio-blk was >>> available >>> +before virtio-scsi and is the most widely deployed virtio storage >>> controller. >>> + >>> +The virtio-blk device offers high performance thanks to a thin software >>> stack >>> +and is therefore a good choice when performance is a priority. >>> + >>> +Applications that send SCSI commands are better served by the virtio-scsi >>> +device, which has full SCSI support. SCSI passthrough was removed from the >>> +Linux virtio-blk driver in v5.6 in favor of using virtio-scsi. >> >> Is "discard=unmap" worth mentioning specifically? For me, that was the >> reason for switching practically all my domains to virtio-scsi from >> virtio-blk. ("Delete files in the guest, recover space on the host.") > > virtio-blk supports discard since Linux commit > 1f23816b8eb8fdc39990abe166c10a18c16f6b21 ("virtio_blk: add discard and > write zeroes support"). The feature was added in 2018 so you now have > the choice between virtio-blk or virtio-scsi again :).
Ah, thanks! (I wonder now if my understanding has been muddled by Windows guest support... But even the Windows guest driver has commit 335d13682a56 ("[viostor] add preliminary support for discard (unmap) command", 2019-06-04), apparently!) Thanks! Laszlo