Linux Multi-Queue Block IO Queueing Mechanism (blk-mq)
blk-mq (Multi-Queue Block IO Queueing Mechanism) ist ein neues Framework für den Linux Block Layer, das mit Linux Kernel 3.13 eingeführt, und mit Linux Kernel 3.16 vervollständigt wurde.[1] Blk-mq ermöglicht für High-Performance Flash-Devices (z.B. PCIe-SSDs) über 15 Millionen IOPS auf 8-Socket Servern, es profitieren aber auch Single- und Dual-Socket Server deutlich von blk-mq.[2] Ein Gerät wird dann über blk-mq angesteuert, wenn dessen Gerätetreiber auf blk-mq basiert.
In diesem Artikel erfahren Sie, wie sich blk-mq in den Linux Storage Stack einfügt und für welche Geräte bereits blk-mq kompatible Treiber in den Linux Kernel eingeflossen sind.
blk-mq im Linux Storage Stack
Blk-mq fügt sich nahtlos in den Linux Storage Stack ein. Es stellt Gerätetreibern Grundfunktionen zur Verteilung der I/O Anfragen auf mehrere Warteschlangen bereit. Die Aufgaben verteilen sich so auf mehrere Threads und damit auf mehrere CPU-Kerne (per-core software queues). Blk-mq kompatible Treiber teilen ihrerseits blk-mq mit, wie viele parallele Hardware Queues ein Gerät unterstützt (number of submission queues im Zuge der HW dispatch queue registration).
Blk-mq basierende Gerätetreiber umgehen die bisherigen Linux I/O Scheduler. In der Vergangenheit haben das bereits einige Treiber ohne blk-mq gemacht (iomemory-vsl, nvme, mtip32xx), diese mussten als bio-based (block-I/O-based) Treiber aber viele generische Funktionen selbst bereitstellen ("stacked" approach).
Alle Gerätetreiber, die den bisherigen Block I/O Layer verwenden, arbeiten unabhängig von blk-mq als request-based Treiber weiterhin nach dem Linux I/O Scheduler (request_fn based approach, siehe Linux Storage Stack Diagramm).[3] Wie lange es diesen request_fn based approach im Linux Kernel noch geben wird, ist derzeit (Juli 2014) noch nicht klar.[4][5]
Gerätetreiber
Treiber | Devicename | unterstützte Geräte | blk-mq seit Kernel Version |
---|---|---|---|
null_blk | /dev/nullb*[6] | keine (Test-Treiber) | 3.13 (git commit) |
virtio_blk | /dev/vd* | virtueller Gast-Treiber (z.B. unter KVM[7][8]) | 3.13 (git commit) |
mtip32xx | /dev/rssd* | Micron RealSSD PCIe | 3.16 (git commit) |
scsi (scsi_mq) | /dev/sd* | z.B. SAS und SATA SSDs/HDDs | 3.17 (git commit) |
NVMe | /dev/nvme* | z.B. Intel SSD DC P3600 DC P3700 Series[9] | 3.19 (git commit) |
rbd | /dev/rdb* | RADOS Block Device (Ceph) | 4.0 (git commit) |
ubi | /dev/ubiblock* | 4.0 (git commit) | |
loop | /dev/loop* | Loopback-Device | 4.0 (git commit) |
dm / dm-mpath | request-based device mapper targets (derzeit ist dies ausschließlich dm-multipath) | 4.1 (git commit) | |
nbd | /dev/nb* | Network Block Device (siehe auch nbd.txt) | 4.9 (git commit) |
Weitere Informationen
- Kernel-Log – Was 3.13 bringt (1): Dateisysteme und Storage (heise.de, 10.12.2013)
- The multiqueue block layer (lwn.net, 05.06.2013)
- Linux & NVM File and Storage System Challenges (snia.org, Slides von Ric Wheeler, Senior Engineering Manager Kernel File Systems, Red Hat, Inc.)
Einzelnachweise
- ↑ Blk-mq Is Almost Feature Complete & Fast With Linux 3.16 (phoronix.com, 02.06.2014)
- ↑ 2,0 2,1 Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems (Matias Bjørling, Jens Axboe, David Nellans, Philippe Bonnet at SYSTOR 2013 - 6th Annual International Systems and Storage Conference)
- ↑ blk-mq: new multi-queue block IO queueing mechanism (git commit von Jens Axboe vom 25.10.2013)
- ↑ Re: (PATCH RFC - TAKE TWO - 00/12) New version of the BFQ I/O Scheduler ... yes, we're likely going to maintain that code for a long time, so it's not going anywhere anytime soon... (Jens Axboe, 02.06.2014)
- ↑ Re: (PATCH RFC - TAKE TWO - 00/12) New version of the BFQ I/O Scheduler I'd really planning on not maintaining the old request based SCSI code for a long time once we get positive reports in from users of various kinds of older hardware. (Christoph Hellwig, 04.06.2014)
- ↑ Null block device driver (kernel.org/doc/Documentation)
- ↑ Virtio (www.linux-kvm.org)
- ↑ Boot from virtio block device (www.linux-kvm.org)
- ↑ Intel Solid-State Drive Data Center Family for PCIe (www.intel.com)
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro.
|