Linux Multi-Queue Block IO Queueing Mechanism (blk-mq)

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

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

Two level Linux block layer design von blk-mq.[2]

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

Einzelnachweise

  1. Blk-mq Is Almost Feature Complete & Fast With Linux 3.16 (phoronix.com, 02.06.2014)
  2. 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)
  3. blk-mq: new multi-queue block IO queueing mechanism (git commit von Jens Axboe vom 25.10.2013)
  4. 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)
  5. 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)
  6. Null block device driver (kernel.org/doc/Documentation)
  7. Virtio (www.linux-kvm.org)
  8. Boot from virtio block device (www.linux-kvm.org)
  9. Intel Solid-State Drive Data Center Family for PCIe (www.intel.com)


Foto Werner Fischer.jpg

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.


Das könnte Sie auch interessieren

Festplatteneinschub an HBA blinken lassen unter Linux
LEDs am Festplatteneinschub ohne HBA unter Linux zum Blinken bringen