ablog

不器用で落着きのない技術者のメモ

ページキャッシュを使用したくない場合、Linux Kernel 2.6 ではrawデバイスではなくO_DIRECTを使用したブロック・デバイスへのダイレクトI/Oが推奨される


Linux でページキャッシュを使用せずに、ユーザ空間のバッファからデバイスに Direct I/O を行いたい場合、Kernel 2.4 ではrawデバイスが使用されていたが、Kernel 2.6 からはrawデバイスは推奨されなくなり、O_DIRECTを使用してデバイス・ファイルに Direct I/O する方法が推奨されるようになった。

なんとなく知っていましたが、オンライン・マニュアルなどで調べてみました。

参考

  • Oracle Databaseリリース・ノート 10gリリース2(10.2) for Linux x86 (B19279-10)

4.13.1 デバイス・ネーミングの永続的な変更の概要

Linux 2.6カーネルでは、RAWデバイスは推奨されなくなりました。推奨されるストレージ・アクセスは、O_DIRECTを使用したブロック・デバイスへの直接I/Oです。この変更に伴い、RHEL4とOEL4のファイル/etc/sysconfig/rawdevice、およびRHEL5とOEL5のファイル/etc/udev/rules.d/60-raw.rulesは非推奨になりました。詳細は、Linuxのドキュメントで2.6カーネルについて参照してください。

Oracle Databaseリリース・ノート
  • Oracle Databaseインストレーション・ガイド 11g リリース2(11.2)for Linux (B56273-03)

2.16 ブロック・デバイスを使用したOracle Databaseファイル用の記憶域の構成
(中略)
2. /etc/udev/rules.dのルール・ファイルを作成または変更し、データファイルの権限をデフォルトのroot所有権から変更します。

作成するファイルがディストリビューションに適していることを確認します。たとえば、AsianuxRed Hat Enterprise LinuxOracle LinuxおよびSUSE Enterprise Serverシステムで、このファイルに99-oracle.rulesという名前を付けます。

例2-1 ユーザーoracleを設定したルール・ファイルの例

/etc/udev/rules.d/99-oracle.rules
#
# ASM disks
KERNEL=="sdb[6-9]", OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sdb10", OWNER="oracle", GROUP="dba", MODE="0660"

例2-2 ユーザーgridを設定したルール・ファイルの例

/etc/udev/rules.d/99-oracle.rules
#
# ASM disks
KERNEL=="sdb[6-9]", OWNER="grid", GROUP="asmadmin", MODE="0660"
KERNEL=="sdb10", OWNER="grid", GROUP="asmadmin", MODE="0660"
Oracle Databaseのインストール前の作業

O_DIRECT (Linux 2.4.10 以降)
このファイルに対する I/O のキャッシュの効果を最小化しようとする。このフラグを使うと、一般的に性能が低下する。しかしアプリケーションが独自にキャッシングを行っているような特別な場合には役に立つ。ファイルの I/O はユーザー空間バッファに対して直接行われる。 O_DIRECT フラグ自身はデータを同期で転送しようとはするが、 O_SYNC のようにデータと必要なメタデータの転送が保証されるわけではない。同期 I/O を保証するためには、 O_DIRECT に加えて O_SYNC を使用しなければならない。「注意」の節 (下記) の議論も参照。ブロックデバイスに対する似通った意味のインターフェースが raw(8) で説明されている (但し、このインタフェースは非推奨である)。

Man page of OPEN

いったん raw デバイスをブロックデバイスにバインドすると、その raw デバイスはバインド先のブロックデバイスと同じようにオープンしたり read/write できる。しかし raw デバイスの動作はブロックデバイスと全く同じではない。特に違う点としては、 raw デバイスへのアクセスは、カーネルのブロックバッファキャッシュを全く用いない。全ての I/O は、その I/O を行ったプロセスのアドレス空間に対して直に行われる。もし下層にあるブロックデバイスドライバが DMA をサポートしていると、データコピーを全く行わなくても I/O を完了することができる。

Man page of RAW

関連


追記(2011/07/04):
Oracle Databaseファイル用の記憶域、OCR、Voting Disk、ASMデバイスでブロック・デバイスの使用が推奨されている、つまりストレージを扱う最下層ではrawデバイスではなく、ブロック・デバイスが推奨されるようですね。

4.10 2.6カーネルディストリビューションでのOracle Clusterware用ストレージ・デバイスの構成
この項は、Red Hat Enterprise Linux 5(RHEL5)またはOracle Enterprise Linux 5(OEL5)上のOracle10gリリース2(10.2.0)RACのインストールまたは移行を行うデータベース管理者とシステム管理者、あるいはOracle RACおよびOracle ClusterwareのRAWデバイスを構成する必要があるデータベース管理者とシステム管理者向けの記述です。Linux 2.6カーネルとそのディストリビューションでは、追加の構成手順が必要です。次の項目について説明します。

Oracle Databaseリリース・ノート

4.10.1 デバイス・ネーミングの永続的な変更の概要
(中略)
udevにデフォルト設定を適用した場合、サーバーを再起動すると投票ディスクのデバイス・ファイル名と所有者、あるいはOracleクラスタレジストリパーティションが変更され、それらは失われます。たとえば、ユーザーcrsが所有する/dev/sddというデバイス上の投票ディスクは、サーバーの再起動後、rootが所有する/dev/sdfというデバイスに置かれます。

Oracle Databaseリリース・ノート

4.10.3 RAWデバイスからブロック・デバイスへのOracle Clusterwareファイルの場所の移動
Oracle Clusterwareのファイルは、RAWデバイスからブロック・デバイスに移動することをお薦めします。

Oracle Databaseリリース・ノート