A.3. ブロックデバイスキャッシュオプション
Ceph ブロックデバイスのユーザー空間実装 (librbd
) は Linux ページキャッシュを利用できないため、RBD キャッシュ
と呼ばれる独自のインメモリーキャッシュが含まれます。Ceph ブロックデバイスのキャッシュは、適切なハードディスクキャッシングと同様に動作します。オペレーティングシステムがバリアまたはフラッシュ要求を送信すると、ダーティーデータはすべて Ceph OSD に書き込まれます。つまり、フラッシュを適切に送信する仮想マシン (Linux カーネルバージョン 2.6.32 以上) とともに、ライトバックキャッシュを使用すると安全ではありません。キャッシュは Least Recently Used (LRU) アルゴリズムを使用し、ライトバックモードでは、スループット向上のために連続したリクエストを結合できます。
Ceph ブロックデバイスは、ライトバックキャッシュに対応します。ライトバックキャッシュを有効にするには、rbd_cache = true
を Ceph 設定ファイルの [client]
セクションに追加します。デフォルトでは、librbd
はキャッシュを実行しません。書き込みおよび読み取りはストレージクラスターに直接移動し、データがすべてのレプリカのディスクにある場合にのみ書き込みに戻ります。キャッシュを有効にすると、rbd_cache_max_dirty
の非フラッシュバイト数を超えない限り、書き込みは即座に返します。この場合、書き込みによって、十分なバイト数がフラッシュされるまでライトバックおよびブロックがトリガーされます。
Ceph ブロックデバイスはライトスルーキャッシュに対応します。キャッシュのサイズを設定し、ターゲットと制限を設定して、ライトバックキャッシュから write-through キャッシュに切り替えることができます。write-through モードを有効にするには、rbd_cache_max_dirty
を 0 に設定します。つまり、書き込みは、データがすべてのレプリカのディスクにある場合にのみ返されますが、読み取りはキャッシュから送られる可能性があります。このキャッシュはクライアントのメモリーにあり、各 Ceph ブロックデバイスイメージ自体があります。キャッシュはクライアントのローカルなので、イメージにアクセスする他の条件がある場合は、一貫性がありません。Ceph ブロックデバイスの上に他のファイルシステムまたは OCFS を実行すると、キャッシュが有効ではありません。
Ceph ブロックデバイスの Ceph 設定は、Ceph 設定ファイルの [client]
セクションで、デフォルトでは /etc/ceph/ceph.conf
で設定する必要があります。
設定には以下が含まれます。
- rbd_cache
- 説明
- RADOS Block Device (RBD) のキャッシュを有効にします。
- 型
- Boolean
- 必須
- いいえ
- デフォルト
-
true
- rbd_cache_size
- 説明
- RBD キャッシュサイズ (バイト単位)。
- 型
- 64 ビット整数
- 必須
- いいえ
- デフォルト
-
32 MiB
- rbd_cache_max_dirty
- 説明
-
キャッシュがライトバックをトリガーする
ダーティー
制限 (バイト単位)。0
の場合、ライトスルー (ライトスルー) キャッシュを使用します。 - 型
- 64 ビット整数
- 必須
- いいえ
- 制約
-
rbd cache size
より小さくなければなりません。 - デフォルト
-
24 MiB
- rbd_cache_target_dirty
- 説明
-
キャッシュがデータストレージにデータを書き込む前に
dirty target
。キャッシュへの書き込みをブロックしません。 - 型
- 64 ビット整数
- 必須
- いいえ
- 制約
-
rbd cache max dirty
未満である必要があります。 - デフォルト
-
16 MiB
- rbd_cache_max_dirty_age
- 説明
- ライトバックの開始前にダーティーデータがキャッシュ内にある秒数。
- 型
- 浮動小数点 (Float)
- 必須
- いいえ
- デフォルト
-
1.0
- rbd_cache_max_dirty_object
- 説明
-
オブジェクトのダーティー制限:
rbd_cache_size
からの自動計算の場合は0
に設定します。 - 型
- Integer
- デフォルト
-
0
- rbd_cache_block_writes_upfront
- 説明
-
true
の場合、aio_write
呼び出しが完了するまでキャッシュへの書き込みをブロックします。false
の場合、aio_completion
が呼び出される前にブロックされます。 - 型
- Boolean
- デフォルト
-
false
- rbd_cache_writethrough_until_flush
- 説明
- write-through モードで起動し、最初のフラッシュ要求が受信後に write-back に切り替えます。この有効化は Conservative ですが、rbd で実行している仮想マシンが、2.6.32 以前の Linux における virtio ドライバーと同様にフラッシュを送信することが古い場合は安全な設定です。
- 型
- Boolean
- 必須
- いいえ
- デフォルト
-
true