次期 Linux 6.5 カーネル マージ ウィンドウで導入予定のもう 1 つの機能は、デバイス マッパー (DM) コードを使用したシン プロビジョニング ストレージのプロビジョニング プリミティブのサポートを導入することです。
週末に作成されたブランチは linux-dm.git の dm-6.5-provision-support。現在「6.5」とマークされたブランチ上にあり、Linus Torvalds や他のカーネル開発者によって問題が提起されない限り、次期 Linux 6.5 マージ ウィンドウに送られるようになっています。
これらのプロビジョニング プリミティブは、Google の Chrome OS チームによって開発されました。 Google の Sarthak Kukreti は、以前のメール配信の RFC パッチでこの取り組みについて説明しました。リスト:
「このパッチ シリーズは、スタックされたシン プロビジョニング ストレージ デバイス/ファイル システム上でプロビジョニング リクエストをパススルーするメカニズムの RFC です。
Linux カーネルは、シン プロビジョニング ブロック ストレージの抽象化をセットアップするためのいくつかのメカニズムを提供します (例: dm-thin、スパース ファイル上のループ デバイス)、ブロック デバイスまたはファイル システムのバッキング ストレージとして直接使用 現在、デバイスまたはファイル システムにデータを書き込む以外に、ユーザーが使用するスペースを事前に割り当てる方法はありません。このようなストレージ設定では、次の使用例を検討してください:
1) ディスクへのサスペンドと dm-thin デバイスからの再開: 基礎となるシンプールのメタデータがサスペンド メカニズム中に変更されないようにするには、dm-thin デバイスを完全にプロビジョニングする必要があります。
2) ファイルシステムがスパースファイル上でループデバイスを使用する場合、ファイルシステム上の fallocate() はファイルにブロックを割り当てますが、基礎となるスパースファイルはそのまま残ります。
3) 別の例は、スパース ファイル/dm-thin をストレージ デバイスとして使用する仮想マシンです。デフォルトでは、VM 境界内の割り当てはホストに影響しません。
4) いくつかのストレージ規格は、実際のハードウェア デバイスでのシン プロビジョニングのメカニズムをサポートしています。例:
a. NVMe 仕様 1.0b セクション 2.1.1 では、シン プロビジョニングについて大まかに説明しています。「Identify Namespace データ構造の NSFEAT フィールドの THINP ビットが’1’に設定されている場合、コントローラーは… で割り当てられたブロックの数を追跡します。 「名前空間使用率」フィールド
b. SCSi ブロック コマンド リファレンス-4 セクションでは、「シン プロビジョニング論理ユニット」について参照しています。
c. UFS 3.0 仕様セクション 13.3.3 では、「シン プロビジョニング」について言及しています。上記のすべての状況において、現在、スペースを事前に割り当てる唯一の方法は、書き込みを発行する (または WRITE_ZEROES/WRITE_SAME を使用する) ことです。ただし、事前割り当てサイズが大きくなると、これはうまく拡張できません。
このパッチセットは、ファイル システムとブロック デバイスにわたるブロック レベルのプロビジョニング (注: 「プロビジョニング」という用語は、「割り当て/事前割り当て」という用語の過負荷を防ぐために使用されます) リクエストをサポートするためのプリミティブを導入します。これにより、fallocate() およびファイル作成リクエストで、ブロック デバイスとファイル システムのスタック レイヤー全体にスペースを予約できるようになります。現在、パッチセットはデバイス マッパー ターゲット、ループ デバイス、および ext4 のプロトタイプをカバーしていますが、同じメカニズムを他のファイルシステム/ブロック デバイスに拡張したり、4 a ~ c のデバイスで使用するために拡張したりすることもできます。」
REQ_OP_PROVISION リクエストを導入するパッチは、このプロビジョニングを単に次のように要約しています。
「ブロック リクエスト REQ_OP_PROVISION を導入します。このリクエストの目的は、基礎となるストレージに、指定されたブロック範囲にディスク領域を事前に割り当てるようリクエストすることです。この機能をサポートするブロック デバイスは、リクエスト キュー内のプロビジョニング制限をエクスポートします。
このパッチは、ブロック デバイスのモード 0 で fallocate() を呼び出す機能も追加します。これにより、指定された範囲のブロック デバイスに REQ_OP_PROVISION が送信されます。」
このブロック プロビジョニング プリミティブ作業は数か月間行われ、Chrome OS およびアップストリームの Linux カーネルに対するテストに成功しました。REQ_OP_PROVISION に関するブロックと DM の変更と、それに対するループバック デバイスのサポートは、現在 Linux 6.5 で導入される予定です。
Linux 6.4 安定版のリリースがさらに 1 週間延期されなければ、Linux 6.5 のマージ ウィンドウは来週始まる予定です。Linux 6.5 安定版も 8 月末頃にデビューする予定です。