書き込みキャッシュのプロパティのクエリ
ストレージ デバイスは、多くの場合、ディスク プラッタなどの不揮発性メディアにデータを書き込む前に、書き込みキャッシュ内のデータをバッファーに格納します。 この種類のバッファーにより、デバイスのパフォーマンスは向上しますが、データの整合性も低下します。 書き込みキャッシュにバッテリ バックアップがない場合は、電源障害によってキャッシュされたデータが失われる可能性があります。
データ損失の問題の解決策の 1 つは、書き込みキャッシュをフラッシュすることです (SCSI デバイスで SCSI SYNCHRONIZE CACHE コマンドを使用)。 ただし、書き込みキャッシュをフラッシュすることはコストのかかる操作であり、頻繁に実行するとパフォーマンスが大幅に低下する可能性があります。 書き込みキャッシュをフラッシュする代わりに、多くのストレージ デバイスでライトスルー要求が許可されます。 ライトスルー要求は書き込みキャッシュをバイパスし、データをメディアに直接送信します。
たとえば、データベース アプリケーションは、ライトスルー要求を使用してトランザクション ログがメディアに到達するようにし、ファイル システム ドライバーは、ライトスルー要求を使用してファイル システム メタデータがメディアに到達するようにすることができます。
ただし、書き込みキャッシュを持つすべてのストレージ デバイスがライトスルー要求または SYNCHRONIZE CACHE をサポートしているわけではありません。また、一部のデバイスでは、電源障害時のデータ破損を防ぐバッテリ バックアップ システムがあるため、キャッシュされたデータを予防措置としてバイパスまたはフラッシュする必要はありません。 アプリケーションとドライバーは、デバイスの書き込みキャッシュを有効的に使用できるように、書き込みキャッシュのプロパティに関する情報を把握する必要があります。
Windows Vista では、StorageDeviceWriteCacheProperty プロパティ識別子で IOCTL_STORAGE_QUERY_PROPERTY 要求を使用して、デバイスの書き込みキャッシュの特性を指定する書き込みキャッシュ プロパティについてストレージ クラス ドライバーに対してクエリを実行できます。 書き込みキャッシュ プロパティには、デバイスのキャッシュ機能に関する次の情報が含まれます。
書き込みキャッシュの存在。 書き込みキャッシュ プロパティは、デバイスに書き込みキャッシュがあるかどうかを指定します。
書き込みキャッシュの種類。 書き込みキャッシュには、主に次の 2 種類 (ライトバックとライトスルー) があります。 ライトバック キャッシュを使用すると、デバイスは絶対に必要になるまでキャッシュ データを不揮発性メディアにコピーしません。 この操作により、書き込み操作のパフォーマンスが向上します。 ライトスルー キャッシュを使用すると、デバイスはデータをキャッシュとメディアに並列で書き込みます。 これにより、書き込みパフォーマンスは向上しませんが、後続の読み取り操作が高速になります。
ライトスルーキャッシュをライトスルー要求と混同しないでください。 ライトスルー要求は、デバイスがライトスルー要求をサポートしている場合、ライトバック キャッシュを含む任意の種類のキャッシュで使用できます。 たとえば、ターゲットがライトバック キャッシュを持つ SCSI デバイスであるとします。 デバイスがライトスルー要求をサポートしている場合、イニシエーターは書き込みコマンドのコマンド記述子ブロック (CDB) に Force Unit Access (FUA) ビットを設定することで、書き込みキャッシュをバイパスできます。
同期キャッシュのサポート。 書き込みキャッシュ プロパティは、デバイスが SCSI SYNC CACHE コマンドをサポートしているか、他のバスで同等のコマンドをサポートしているかを示します。
バッテリ バックアップ。 書き込みキャッシュ プロパティは、電源障害時にキャッシュ データの整合性を保護するバッテリ バックアップがデバイスにあるかどうかを示します。
書き込みキャッシュ プロパティが報告する情報の詳細な説明については、「STORAGE_WRITE_CACHE_PROPERTY」を参照してください。
書き込みキャッシュ プロパティ メカニズム (つまり、IOCTL_STORAGE_QUERY_PROPERTY 要求と StorageDeviceWriteCacheProperty プロパティ識別子を使用) がない場合、アプリケーションとドライバーは、デバイスの書き込みキャッシュの特性を照会し、各バスに対して異なる一連のコマンドを使用する必要があります。 たとえば、ターゲット デバイスが IEEE 1394 バスに接続されていて、Reduced Block Command (RBC) プロトコルを使用している場合、イニシエーターは、書き込みキャッシュが有効になっているかどうかを判断するために、デバイスのモード データの 6 ページ目を取得する必要があります。 ただし、ターゲット デバイスが SCSI に準拠している場合、イニシエーターはモード データの 8 ページ目を取得する必要があります。 書き込みキャッシュ プロパティ メカニズムは、イニシエーターからこれらの操作の詳細を非表示にし、異なるバス間で同じストレージ デバイスの書き込みキャッシュの特性を照会する手法を提供します。
書き込みキャッシュ プロパティ メカニズムは、RAID デバイス (これらのデバイスに対してクエリを実行するための標準的な手法がないため) またはフラッシュ メモリ デバイスではサポートされていません。
書き込みキャッシュ プロパティは、64 ビット バージョンの Windows でサポートされています。