第14章 ストレージ

DM がバージョン 4.2 にリベース

デバイスマッパー (DM) がアップストリームバージョン 4.2 にアップグレードされ、DM 暗号化パフォーマンスの大幅な更新、Multi-Queue Block I/O Queueing Mechanism (blk-mq) に対応するための DM コアの更新など、旧バージョンに対するバグ修正や機能強化が行われています。

blk-mq を使ったマルチキュー I/O スケジューリング

Red Hat Enterprise Linux 7.2 には blk-mq と呼ばれるブロックデバイス用の新しい複数キュー I/O スケジューリングのメカニズムが収納されています。特定のデバイスドライバーに複数のハードウェアやソフトウェアキューに対する I/O 要求のマッピングを許可することでパフォーマンスを改善します。複数の実行スレッドがひとつのデバイスに対して I/O を行うとロックの競合が軽減するためパフォーマンスが改善されます。NVMe (Non-Volatile Memory Express) など新しいデバイスの場合は、複数のハードウェアのキューに対するビルトインのサポートを備え、また待ち時間が少なくパフォーマンスに優れている特性のためこの機能を十分に活用することができます。実際のパフォーマンス性についてはハードウェアと作業負荷により左右されます。
現在、blk-mq の機能は virtio-blk、mtip32xx、nvme、rbd のドライバーにデフォルトで実装され有効になっています。
関連する機能 scsi-mq を利用すると SCSI (Small Computer System Interface) デバイスドライバーで blk-mq インフラストラクチャーを使用できるようになります。scsi-mq 機能は Red Hat Enterprise Linux 7.2 ではテクノロジープレビューとして提供されます。scsi-mq を有効にするにはカーネルコマンドラインで scsi_mod.use_blk_mq=y を指定します。デフォルト値は n (無効) です。
dm_mod.use_blk_mq=y カーネルオプションを指定すると、要求ベースのデバイスマッパー (DM) を使用する DM マルチパスターゲットでも blk-mq インフラストラクチャーを使用するよう設定できます。デフォルト値は n (無効) です。
ベースの SCSI デバイスで blk-mq を使用している場合は dm_mod.use_blk_mq=y も設定した方が DM 層でのロックによるオーバーヘッドの軽減に役立ちます。
DM マルチパスで blk-mq を使用しているかどうか確認するには cat /sys/block/dm-X/dm/use_blk_mq を実行します。dm-X には対象となる DM マルチパスデバイスを入力します。このファイルは読み取り専用であり、要求ベースの DM マルチパスデバイスが作成された時点の /sys/module/dm_mod/parameters/use_blk_mq のグローバル値を反映しています。

multipath.conf ファイルの新しいオプション delay_watch_checks と delay_wait_checks

パスが不安定な状態であっても (接続が頻繁にドロップと回復を繰り返すなど) multipathd はそのパスを継続して使用しようとします。一方、パスがアクセス不能になったことを認識するまでのタイムアウトは 300 秒のため、multipathd が停止してしまったように見えます。
これを修正するため 2 種類の新しい設定オプション delay_watch_checks と delay_wait_checks が追加されています。delay_watch_checks を使用してまずパスがオンラインになったら監視を開始するサイクル数を設定します。設定された値内でパスが使用できなくなった場合、そのパスは使用されなくなります。次に、delay_wait_checks を使用して連続して使用できなければならないサイクル数を設定します。このチェックに成功してはじめてパスは再び有効となります。このオプションにより、不安定なパスがオンラインになっても直ぐには使用されないよう防止することができます。

multipath.conf ファイルの新しいオプション config_dir

以前は設定情報を /etc/multipath.conf と他の設定ファイルに分割できなかったため、全マシン用のメイン設定ファイルをひとつ作成、マシンごとの固有設定情報を持たせたファイルは別途に作成するという方法がとれませんでした。
これに対応するため、新しいオプション config_dir が multipath.conf ファイルに追加されました。ユーザーは config_dir オプションを空の文字列か完全修飾ディレクトリーパス名のいずれかに変更する必要があります。空の文字列以外を設定すると、マルチパスはすべての .conf ファイルをアルファベット順に読み込み、そのファイルが /etc/multipath.conf に追加されたかのように設定を適用します。変更をしなかった場合は config_dir のデフォルト設定は /etc/multipath/conf.d になります。

新しい dmstats コマンド: デバイスマッパードライバーを使用するデバイス領域の I/O 統計値を表示および管理

dmstats コマンドはデバイスマッパー I/O 統計値のユーザー空間サポートを備えています。I/O のカウンター、測定基準、デバイスマッパーデバイスのユーザー定義の任意領域の待ち時間柱状データなどの管理ができるようになります。dmsetup レポートで統計フィールドが利用できるようになり、dmstats コマンドには統計情報を使って使用する目的で設計された特殊なレポートモードが新たに追加されています。dmstats コマンドに関する詳細は dmstats(8) の man ページを参照してください。

LVM キャッシュ

LVM キャッシュは Red Hat Enterprise Linux 7.1 以降は完全対応になっています。この機能を使用すると容量が小さい高速なデバイスで論理ボリュームを作成し容量が大きく低速なデバイスのキャッシュとして動作させることができるようになります。キャッシュ論理ボリュームの作り方については lvmcache(7) の man ページをご覧ください。
キャッシュ論理ボリュームの使用に際して次のような制約があるので注意してください。
* キャッシュ論理ボリュームは最上位レベルのデバイスにしてください。シンプールの論理ボリューム、RAID 論理ボリュームのイメージ、その他サブ論理ボリュームタイプなどには使用できません。
* キャッシュ論理ボリュームのサブ論理ボリューム (大元の論理ボリューム、メタデータ論理ボリューム、データ論理ボリューム) はリニアタイプ、ストライプタイプまたは RAID タイプにしかできません。
* キャッシュ論理ボリュームのプロパティの作成後の変更はできません。キャッシュのプロパティを変更する場合は、lvmcache(7) で説明されているようにまずキャッシュを削除してから目的のプロパティでキャッシュを作成し直します。

LVM/DM の新しいキャッシュポリシー

新しい smq DM キャッシュポリシーはほとんどの使用例でメモリーの消費を低減しパフォーマンスを改善することを目的として記述されています。新しい LVM キャッシュ論理ボリュームに対してはこれがデフォルトキャッシュポリシーになります。レガシーな mq キャッシュポリシーを使用したい場合はキャッシュ論理ボリュームを作成する際に —cachepolicy 引数を与えるとレガシーなポリシーを使用することができます。

LVM システム ID

LVM ボリュームグループに所有者を割り当てることができるようになります。ボリュームグループの所有者はホストのシステム ID になります。特定のシステム ID を持つホストのみがボリュームグループを使用することができます。共有デバイス上に存在し、複数ホストから可視となるため複数のホストによる同時使用を防ぐ保護がされていないボリュームグループに便利です。割り当てシステム ID を持つ共有デバイス上の LVM ボリュームグループは任意のホストが所有しているため、他のホストからは保護されます。

新たな lvmpolld デーモン

lvmpolld デーモンは、長時間にわたって実行する LVM コマンド用にポーリング方法を提供します。これを有効にすると、長時間実行の LVM コマンドの制御が元の LVM コマンドから lvmpolld デーモンに移されます。これにより、操作は元の LVM から独立した形で継続可能になります。lvmpolld デーモンはデフォルトで有効になります。
lvmpolld デーモンの導入前は、systemd サービスの cgroup 内で開始された lvm2 コマンドから発生しているバックグラウンドポーリングプロセスは、cgroup でメインプロセス (メインサービス) が終了したら強制終了される可能性がありました。この場合、lvm2 ポーリングプロセスが未完了で強制終了となる場合がありました。また、lvmpolld は進行中のポーリングタスクすべてについて追跡するので、同一タスクの進行状況について複数回のクエリを実行する lvm2 ポーリングプロセスの生成防止に役立ちます。
lvmpolld デーモンの詳細情報については、lvm.conf 設定ファイルを参照してください。

LVM 選択基準の機能強化

Red Hat Enterprise Linux 7.2 リリースでは、LVM 選択基準の機能強化をサポートしています。これまでは、選択基準はレポーティングコマンドにしか使えませんでした。今回の更新では、LVM は複数の LVM 処理コマンドでも選択基準をサポートするようになりました。また、タイムレポーティングフィールドや選択に関するサポートが改善するようにいくつか変更がされています。
これら新機能の実装に関する情報は、Logical Volume Administration マニュアル内の LVM Selection Criteria 別表を参照してください。

SCSI LUNs のデフォルトの最大数の増大

max_report_luns パラメーターのデフォルト値が 511 から 16393 に増大されました。このパラメーターは、Report LUNs メカニズムを使ってシステムが SCSI 相互接続をスキャンする際に設定可能な論理ユニットの最大数を指定します。