+ All Categories
Home > Documents > Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM...

Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM...

Date post: 27-Mar-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
26
Asias He, Red Hat Inc. 1 Virtio-blk Performance Improvement Asias He <[email protected]>, Red Hat Nov 8, 2012, Barcelona, Spain KVM FORUM 2012
Transcript
Page 1: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.1

Virtio-blk Performance Improvement

Asias He <[email protected]>, Red HatNov 8, 2012, Barcelona, SpainKVM FORUM 2012

Page 2: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.2

Storage transport choices in KVM

● Full virtualization : IDE, SATA, SCSI● Good guest compatibility● Lots of trap-and-emulate, bad performance

● Para virtualization: virtio-blk, virtio-scsi ● Virtio ring buffer provides efficient transport for guest-host

communication● Provide more virtualization friendly interface, higher

performance

● Device assignment● Pass hardware to guest, high-end usage, high performance ● Exclusive access, limited number of slot in a server, hard to

do live migration

Page 3: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.3

Why improve virtio-blk

● I/O intensive applications● Need high storage performance

● Virtio-blk● Simple, Just simple read/write/flush command, no scsi

overhead, Fast SSD -> PCIE interface instead of SCSI or SATA interface

● Available for a while, benefits existing users● virtio-blk is about ~3 times faster than virtio-scsi in my

setup

● virtio-scsi● Rich features: True scsi device, Thousands of disks per

virtio-scsi device, Effective SCSI passthrough

Page 4: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.4

Lifecycle of a I/O request in virtio-blk APP

VFS / Filesystem

Generic Block Layer

IO Scheduler

virtio-blk.ko

VFS / Filesystem

QEMU/LKVM

Generic Block Layer

IO Scheduler

Hardware Disks

VFS / Filesystem

Block Device Driver

Guest

Host

Struct bio

Struct request

Virito-blk req

Read() Write() AIO: io_submit()

Page 5: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.5

How to improve virtio-blk performance APP

VFS / Filesystem

Generic Block Layer

IO Scheduler

virtio-blk.ko

QEMU/LKVM

Generic Block Layer

IO Scheduler

Hardware Disks

VFS / Filesystem

Block Device Driver

Guest

Host

APP

Generic Block Layer

virtio-blk.ko

VFS / Filesystem

vhost-blk.ko

Generic Block Layer

IO Scheduler

Harware Disks

Block Device Driver

1) Bio based virtio-blk

2) vhost-blk

Page 6: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.6

Bio-based virtio-blk: What is it (1/2)

● Two types of block device dirvers● struct request based

● Takes the advantages of I/O scheduler● Most drivers

● struct bio based● Skips the I/O scheduler● Few drivers, e.g. Ramdisk driver

Page 7: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.7

Bio-based virtio-blk: What is it (2/2)

● Vrito-blk block device driver● Reqeust-based virtio-blk (original)

● Bio-based virtio-blk (new)● Adds bio based I/O path to virtio-blk● Shorten the I/O path in Guest● Less lock contention (q->queue_lock), lower cpu utilization● Higher IOPS● Lower Latency

Do we really need the I/O scheduling twice in both guest and host? (esp. with high speed SSD device)

Page 8: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.8

generic_make_request()

Bio-based virtio-blk: Architecture

q->make_request_fn()

blk_queue_bio()

virtblk_make_request()

q->request_fn()

virtblk_request()

virtqueue_add_buf()

virtqueue_kick()

Req-basedI/O Path

Bio-basedI/O PathI/O scheduler

Bio

Virtio-blk req

Page 9: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.9

Bio-based virtio-blk: Performance evaluation 1

● 1) On Ramdisk device (fio test 8 vcpu, direct = 1)

IOPS boost : 28%, 24%, 21%, 16%

Latency improvement : 32%, 17%, 21%, 16%

seq-read seq-write rand-read rand-write0

5

10

15

20

25

30

35

IOPS

Latency

Page 10: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.10

Bio-based virtio-blk: Performance evaluation 2

● 2) On Fusion-io device (fio test 8 vcpu, direct = 1)

IOPS boost : 11%, 11%, 13%, 10%

Latency improvement : 10%, 10%, 12%, 10%

seq-read seq-write rand-read rand-write0

2

4

6

8

10

12

14

IOPS

Latency

Page 11: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.11

Bio-based virtio-blk: Performance evaluation 3

● 3) On Normal SATA device (fio test 8 vcpu, direct = 1)

IOPS boost : -10%, -10%, 4.4%, 0.5%

Latency improvement : -12%, -15%, 2.5%, 0.8%

seq-read seq-write rand-read rand-write

-20

-15

-10

-5

0

5

10

IOPS

Latency

Page 12: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.12

Bio-based virtio-blk: How to use

● In mainline kernel already● Merged in v3.7 merge window

● No changes in host side are needed

● kernel module parameter to turn on/off bio-base path● Add 'virtio_blk.use_bio=1' to kernel cmdline ● modprobe virtio_blk use_bio=1● Disabled by default

Page 13: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.13

Bio-based virtio-blk: Limitations

● Doesn't help with slow device on seq read/write● Merge is very helpful for spin disks

● Guest+Host scheduling make the merge more aggressive

● Merge in guest reduces the total number of request to host and reduces number of VMexit

● The benefit of scheduling is larger than bio path gives● Features provided by I/O Schedule is not available

● e.g. CFQ based blkio (Proportional BW Limit)● Block layer based blkio (Max BW Limit) works

Page 14: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.14

Bio-based virtio-blk: Future work

● Make it a feature bit in virtio-blk● Host can set the feature on/off● No need to configure inside the guest

● Make the decision of using bio-base I/O path or not automatically

● Detect the underlay device● Choose the best I/O path● Zero configuration in both side

Page 15: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.15

Vhost-blk: Overview

Host side virtio-blk implementations● 1) QEMU current

● QEMU global mutex: only one thread can submit I/O

● In AIO case, io_submit() is under the global mutex

● 2) QEMU data-plane (prototype)● Developed by Stefan Hajnoczi

● 1) Each virtio-blk device has a thread dedicated to handle request

● 2) Requests are processed without going through the QEMU block layer using Linux AIO directly.

● 3) Completion interrupts are injected via ioctl from the dedicated thread.

● 3) LKVM (aka kvm tool)● Using data-plane similar architecture from the very beginning

● 4) Vhost-blk (prototype)● vhost-blk is an in-kernel virtio-blk device accelerator, similar to vhost-net

Page 16: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.16

vda

virtio-blk

vhostVhost-blk

virito req -> bio

Generic Block Layer

IO Scheduler

Hardware Disks

Block Device Driver

vring

Host Kernel

Guest

Vhost-blk: Architecture

ioeventfd irqfd

Page 17: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.17

Vhost-blk: Implementation

● Using vhost infrastructure

● Send request

● vhost-<pid> kernel thread to send request

● created by vhost infrastructure● Convert guest's virtio-blk requests to bio

● get_user_pages_fast() to convert iov based request to page● bio_add_page() to prepare the bio● set bio->bi_end_io = vhost_blk_req_done as bio completion callback

● Use submit_bio() to submit the bio to host kernel block layer

● Complete request

● vhost-blk-<pid> kernel thread to complete request

● Do request and complete in parallel ● Uses irqfd to inject interrupt to guest

Page 18: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.18

Vhost-blk: Performance evaluation 1

● LKVM-userspace v.s LKVM-vhost-blk

Fio with libaio ioengine on Fusion IO device using LKVM

seq-read seq-write rnd-read rnd-write0

50

100

150

200

250

LKVM-userspace

LKVM-vhost-blk

Native

IOPS(K) userspace vhost-blk Improvement Native

seq-read 107 121 +13.0% 127

seq-write 130 179 +37.6% 196

rnd-read 102 122 +19.6% 122

rnd-write 125 159 +27.0% 175

Page 19: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.19

Vhost-blk: Performance evaluation 2

● QEMU-userspace v.s QEMU-vhost-blk

Fio with libaio ioengine on Fusion IO device using QEMU

seq-read seq-write rnd-read rnd-write0

50

100

150

200

250

QEMU-userspace

QEMU-vhost-blk

Native

IOPS(K) userspace vhost-blk Improvement Native

seq-read 76 123 +61.0% 127

seq-write 139 173 +24.4% 196

rnd-read 73 120 +64.3% 122

rnd-write 75 156 +108.0% 175

Page 20: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.20

rand-read rand-write0

20

40

60

80

100

120

140

160

63.8 63.7

145.8 145.8

IOPS (K)fio test on 8 ramdisk based device with 4KB rand read and wrtie

QEMU-userspace

QEMU-vhost-blk

Vhost-blk: Performance evaluation 3

2.285x

● QEMU-userspace v.s QEMU-vhost-blk

2.288x

Page 21: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.21

Vhost-blk: Performance evaluation 4

rand-read rand-write0

2000

4000

6000

8000

10000

12000

14000

16000

1800016761.56

15316.45

6981.79 6974.55

Latency(usec)fio test on 8 ramdisk based device with 4KB rand read and wrtie

QEMU-userspace

QEMU-vhost-blk

2.400x

● QEMU-userspace v.s QEMU-vhost-blk● QEMU-userspace v.s QEMU-vhost-blk

2.196x

Page 22: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.22

Vhost-blk: Why

● No QEMU userspace, No QEMU global mutex

● Code path is shorter● Guest talks to host kernel directly● Host kernel BIO interface

● Save a bunch of system calls● epoll_wait() & read(): wait for the eventfd which guest notifies us

● io_submit(): submit the aio

● read(): read the aio complete eventfd

● io_getevents(): reap the aio complete result

● ioctl(): trigger the interrupt

● Benefits to all KVM implementation● e.g. Both QEMU and LKVM

Page 23: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.23

Vhost-blk: How to use

● Source Code ● KERNEL

[email protected]:asias/linux.git blk.vhost-blk

● LKVM ● [email protected]:asias/linux-kvm.git blk.vhost-blk

● QEMU ● [email protected]:asias/qemu.git blk.vhost-blk

● Cmdline$ sudo modprobe vhost-blk$ sudo lkvm run -d /dev/sdb,vhost $ sudo qemu -drive \ file=/dev/sdb,if=virtio,cache=none,aio=native,vhost=on

Page 24: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.24

Vhost-blk: Limitations & Future work

● Only support raw image format● No other image format support, e.g. Qcow2

● No file based image support currently● Lack of proper in-kernel aio interface

● bio interface is used in current version● Raw block device only ● /dev/sda, /dev/VolGroup/LogicalVolume

● Once the work-in-progress in-kernel aio interface goes to mainline (Zach Brown and Dave Kleikamp)

● it's easy to support raw file based image

● No migration support

Page 25: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.25

Future work

● Multiqueue virtio-blk support● Jens' multiqueue linux block layer <-> multiqueue virtio

● More performance test and analysis● Different storage configurations / workload

Page 26: Virtio-blk Performance Improvement - KVM2 Asias He, Red Hat Inc. Storage transport choices in KVM Full virtualization : IDE, SATA, SCSI Good guest compatibility Lots of trap-and-emulate,

Asias He, Red Hat Inc.26

Thanks for listening!

Comments / Questions ?


Recommended