KEMBAR78
10分で分かるLinuxブロックレイヤ | PDF
10分で分かる
Linuxブロックレイヤ
星野  喬
サイボウズ・ラボ
2014-01-30
内容
•  Linux ブロックレイヤ俯瞰

–  IO スケジューラ
–  デバイスドライバインターフェース
–  IO インターフェース

•  ⾼高度度な機能

–  md, dm, DRBD, 他

•  最近の話題

2
Linux ブロックレイヤ俯瞰
VFS
ディスクキャッシュ
ディスク
ファイル
システム

ディスク
ファイル
システム

ブロック
デバイス
ファイル

マッピングレイヤ
汎⽤用ブロック層
IOスケジューラ層
ブロック型デバイスドライバ

ブロック型デバイスドライバ

HDD

HDD

出典:  詳解LINUXカーネル第3版7章

3
IO スケジューラ
•  IO リクエストを並べ変える
•  種類(kernel 3.13)
–  noop
–  cfq (プロセスに対して公平)
–  deadline (レイテンシ重視)

•  ⽣生 HDD に対しては効果が⼤大きい
•  むしろ邪魔になることもある
4
ブロックデバイスドライバのインターフェース

•  bio interface
–  全て⾃自分で⾯面倒を⾒見見なければならない

•  reqeust-queue (single) interface
–  IOスケジューラの恩恵を受けられる
–  システムで  1  つしかキューがないので
ボトルネックに

•  request-queue (multi) interface
–  昨今の⾼高速デバイス/マルチコアシステム⽤用
–  Kernel 3.13 or later
5
Single-queue vs Multi-queue
Single-queue

Multi-queue

出典: Linux Block IO: Introducing Multi-queue SSD Access on Multi-core Systems 6
IO インターフェース (投げる側)
void generic_make_request(struct bio *bio);

•  bio の中⾝身(抜粋)

–  データバッファ
–  read or write フラグ
–  その他フラグ

•  FLUSH: 直前までの全 write IO の永続化を保証
•  FUA:  当該 IO の永続化を保証
•  DISCARD: SSD などの trim/unmap ⽤用のフラグ

–  bi_end_io: IO 完了了時に呼ばれるコールバック
7
IO インターフェース  (投げられる側)
void make_request(struct request_queue *q,
struct bio *bio);

•  bio interface 使⽤用時のコールバック

–  q 内のデータを使ってデバイスを特定し,
IO に必要な処理理を実⾏行行
–  make_request() は並列列に呼ばれる可能性も
–  IO が完了了したら  bio_endio() を呼んでブロッ
クレイヤに伝える
8
md (multiple devices)
•  機能

–  Software RAID (0,1,4,5,6,10)
–  Multipath

•  mdadm ツールで操作

9
dm (device mapper)
•  機能

–  仮想化
–  Snapshot (dm-snap)
–  Thin-provisioning (dm-thinp)
–  Software RAID (dm-raid, md を流流⽤用)
–  暗号化(dm-crypt)

•  LVM2 ツール他から操作
10
DRBD
•  ブロックデバイスレプリケーション
ドライバ
–  同期/⾮非同期モードのバリエーション
–  Linbit 社が主に開発

•  DRBD Proxy
–  遠隔レプリケーションには事実上必須
–  有償
–  ⼤大容量量バッファリングを実現
11
最近の話題
•  Atomic IO
–  MySQL の double-write などが必要なくなる
–  まだ汎⽤用ではない

•  NVM (Non-volatile-memory)
–  Block layer を使わないインターフェースを提案
–  ⾼高速な  flash memory などのため

•  TPPS (Tiny Parallel Proportion Scheduler)
–  cgoup + ⾼高速デバイス向け
12
最近の話題 –cont.
•  dm-writeboost
–  Write IO を⾼高速化するキャッシュ機構
–  WAL 使⽤用
–  開発中

•  WalB (⼿手前味噌)
–  差分記録/取り出し⽤用のラッパーデバイス
–  WAL 使⽤用
–  ver 1.0
13
参考⽂文献
•  詳解LINUXカーネル第3版

–  Daniel P. Bovet, Marco Cesati

•  Linux Block IO: Introducing Multi-queue
SSD Access on Multi-core Systems
–  Matias Bjørling, Jens Axboe, David Nellans,
Philippe Bonnet

•  Linux Weekly News
–  http://lwn.net/
14

10分で分かるLinuxブロックレイヤ