bcache (ブロックキャッシュの略)は、Linuxカーネルのブロック層におけるキャッシュ機構であり、二次記憶装置へのアクセスに使用されます。これにより、フラッシュベースのソリッドステートドライブ(SSD)などの高速記憶装置を、ハードディスクドライブ(HDD)などの低速記憶装置のキャッシュとして機能させることができます。これは、ハイブリッドボリュームを効果的に作成し、パフォーマンスを向上させます。
SSDの特性と性能に合わせて設計されたbcacheは、ランダム書き込みを回避し、シーケンシャル書き込みに変換することで、書き込み増幅を最小限に抑えます。このI/O操作の統合は、キャッシュとプライマリストレージの両方で実行され、キャッシュとして使用されるフラッシュベースデバイスの寿命を延ばし、 RAID 5セットなどの書き込みに敏感なプライマリストレージのパフォーマンスを向上させます。
bcache はGNU General Public License (GPL) の下でライセンスされており、ケント・オーバーストリートが主な開発者です。オーバーストリートは、bcache を、bcache を大幅に改良したファイルシステムであるbcachefsの開発のための「プロトタイプ」と考えています。[ 1 ]
bcache を使用すると、SSD をデータ ストレージ アクセス パス内の別の間接レベルとして使用することが可能になり、回転磁気メディアを使用した低速な機械式ハードディスク ドライブ (HDD) のキャッシュとして高速フラッシュベースの SSD を使用することで、全体的なパフォーマンスが向上します。このようにして、SSD と HDD の間のギャップを埋めることができ、 SSD の高コストな速度と従来の HDD の安価なストレージ容量を組み合わせることができます。[ 2 ]
キャッシングは、 SSD の最も顕著な特徴であるほぼゼロのシーク時間を利用して、実行されたランダム読み取りとランダム書き込みに関連付けられたデータを保存するために SSD を使用することで実現されます。シーケンシャル I/Oはキャッシュされません。これは、すでに HDD で十分である操作で SSDキャッシュがすぐに無効化されるのを避けるためです。大きなシーケンシャル書き込みでキャッシュを迂回することは、ライトアラウンドポリシーとして知られています。シーケンシャルI/Oをキャッシュしないことは、キャッシュとして使用される SSD の寿命を延ばすことにも役立ちます。[ 3 ]書き込み増幅は、SSD へのランダム書き込みを行わないことで回避されます。代わりに、SSD キャッシュへのすべてのランダム書き込みは常にブロック レベルの書き込みに結合され、SSD 上の完全な消去ブロックのみが書き換えられます。[ 4 ] [ 5 ]
書き込み操作のキャッシュには、ライトバックとライトスルー(デフォルト)の両方のポリシーがサポートされています。ライトバック ポリシーの場合、書き込まれたデータは最初に SSD キャッシュに格納され、シークフレンドリーな操作を実行しながらバッチ処理で後で HDD に伝播されます。これにより、bcache はI/O スケジューラとしても機能します。書き込み要求されたデータが SSD と HDD の両方に到達するまで書き込み操作が完了としてマークされないことを保証するライトスルー ポリシーの場合、書き込まれたデータのキャッシュのみを実質的に実行することでパフォーマンスの向上は減少します。[ 4 ] [ 5 ]
HDD へのバッチ書き込みによるライトバック ポリシーは、RAID 5やRAID 6などの書き込みに敏感な冗長アレイ独立ディスク(RAID) レイアウトに追加の利点をもたらします。これらのレイアウトでは、実際の書き込み操作はアトミックな読み取り-変更-書き込みシーケンスとして実行されます。このようにして、小さなランダム書き込みをグループ化してバッチシーケンシャル書き込みとして実行することで、このような RAID レイアウトのパフォーマンス ペナルティ[ 6 ]が軽減または回避されます。[ 4 ] [ 5 ]
bcache によるキャッシングはブロック デバイスレベルで動作するため、ファイルシステムが埋め込み型の普遍的に一意な識別子(UUID)を提供している限り、ファイルシステムに依存しません。この要件は、ほぼすべての標準的なLinux ファイルシステムとスワップ パーティションで満たされています。bcache が内部的にキャッシング エクステントとして使用する論理ブロックのサイズは、単一の HDD セクターのサイズまで小さくすることができます。[ 7 ]
bcacheは、2010年7月にケント・オーバーストリートによって、初期ベータ版ではあったものの、完全に動作するLinuxカーネルモジュールとして初めて発表されました。[ 8 ]開発は2年近く続き、2012年5月にbcacheは実用段階に達しました。[ 5 ]
bcachefsは、2013年6月30日にリリースされたカーネルバージョン3.10でLinuxカーネルのメインラインに統合されました。 [ 9 ] [ 10 ] Overstreetはその後、bcacheで最初に開発されたアイデアに基づいてファイルシステム bcachefsを開発しており、bcachefsは「本格的な汎用POSIXファイルシステムへと進化し始めた」と述べています。[ 11 ]彼はbcacheをbcachefsとなったアイデアの「プロトタイプ」と表現し、bcachefsがbcacheに取って代わることを意図しています。[ 12 ]彼は2015年にbcachefsを正式に発表し、2023年10月にLinuxカーネルのメインラインに統合されましたが、[ 13 ] 2025年6月、Linus Torvaldsは、TorvaldsとOverstreetの間の緊張関係を受けて、bcachefsがバージョン6.17でLinuxカーネルのメインラインから削除されることを発表しました。[ 14 ] [ 15 ]
Linuxカーネルのバージョン3.10以降、bcacheによって以下の機能が提供されています。[ 4 ]
2014年2月現在 bcache の今後のリリースでは、以下の新機能が予定されています。[ 10 ]