スキップしてメイン コンテンツに移動

投稿

ラベル(非同期I/O)が付いた投稿を表示しています

続 filesystemio_optionsと非同期I/O

前回( filesystemio_optionsと非同期I/O )でfilesystemio_options=asynchの動作が非同期I/Oになっていないのではないか?と書きましたが、もう少し、状況証拠をとるためにTPCのベンチマークを取得しました。 filesystemio_options=noneの場合とasynchの場合でほぼ同一の結果となっており、ますます、filesystemio_options=asynchの動作の怪しさが増しています。 - filesystemio_options=none swingbenchの結果 ASH Viewerの結果 commitクラスの待機イベント - filesystemio_options=asynch swingbenchの結果 ASH Viewerの結果 commitクラスの待機イベント - filesystemio_options=setall swingbenchの結果 ASH Viewerの結果 基本的に全てのケースでUser I/Oの待機イベントで待機しているのは変わりません。しかし、特徴的な待機イベントとしてCommitクラス(内容はlog file sync)があります。none と asynchの場合にのみ発生しています。 LGRWが log bufferからREDOログへ書き込んでいるのを待機しているわけですが、 OLTP系の処理であれば、commitはそれなりに頻繁に発行される + それなりに多くのセッションが同様の処理をする。という特徴を考えると、LGWRのアクティビティは高くなります。LGWRが同期I/Oをしている場合、commit I/Oの衝突により各セッションが待機するであろうことは想像に難くありません。 それが、none の場合(同期I/O)の場合とasynch(非同期I/Oのつもり)で、ほぼ同一のレスポンス時間、同一TPMかつ、待機イベントの傾向である。また、setall(DIRECTかつ非同期I/O)の場合で、レスポンス時間およびTPMが改善され、待機イベントにlog file syncが無いこと。 上記を考えると、やはり、filesystemi...

filesystemio_optionsと非同期I/O

先日、 filesystemio_options=asynchの場合のopenモードが不思議 と書いたのですが、一応、サンプルソースを使って試してみました。 サンプルソースはLinux Foundationにある aiocp を拝借してテストしました。 [oracle@kshinkub aio]$ wget http://devresources.linuxfoundation.org/daniel/AIO/aiocp.c --2010-10-02 21:45:34-- http://devresources.linuxfoundation.org/daniel/AIO/aiocp.c devresources.linuxfoundation.org をDNSに問いあわせています... 140.211.169.81 devresources.linuxfoundation.org|140.211.169.81|:80 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 11896 (12K) [text/x-csrc] `aiocp.c' に保存中 100%[==================================================================>] 11,896 37.3K/s 時間 0.3s 2010-10-02 18:45:35 (37.3 KB/s) - `aiocp.c' へ保存完了 [11896/11896] [oracle@kshinkub aio]$ gcc -laio -o aiocp aiocp.c 処理内容はざっと以下の通りです。 1. コピー元ファイルのopen 2. コピー先ファイルのopen 3. 1に対してreadを非同期I/Oで要求し、その完了をコールバック関数で待ち受ける 4. 3のread要求が完了した場合、コールバック関数が呼ばれ、さらに2に対して非同期でwrite要求が発行される 5. write要求も完了時にはコールバック関数が呼ばれる 6. 全てのread/writeの要求が発行された場合、その完了を待って終了 つまり、処理の重いwrit...

Unbreakable Enterprise Kernelのチューニングは非同期I/Oか?

小幡さん、yohei-aさん、wmo6hashさんなど、いろいろご意見がありましたが、一度、Oracleの非同期I/Oの実装はどうだったのか再確認が必要だと思いちょっと調べてみます。 手当たり次第やってもしょうがないので、以下の3つの観点で調査してみます。多分、何回かに分けて調査すると思うのですが、今回は初期化パラメータfilesystemio_options = [none|directio|asynch|setall]でどのようにI/Oに関するシステムコールが変化するか見てみます。 1. データファイルへの書き込み     これは、DBWRが行っていますので、filesystemio_optionsの各モードでDBWRがopen|writeを     どのように実行しているか? 2.REDOへの書き込み     これは、LGWRが行っていますので、filesystemio_optionsの各モードでLGWRがopen|writeを     どのように実行しているか? 3. データファイルの読み込み     これは、shadowプロセスが行っていますので、filesystemio_optionsの各モードでshadowプロセス     がopen|writeをどのように実行しているか? 1、2のトレースを取るには以下のような感じです。 # openのシステムコールを確認 strace -f -o /tmp/oracle.trc -e open sqlplus / as sysdba << EOF startup EOF # 別ターミナルで strace -o /tmp/oracle_dbwr.trc -p strace -o /tmp/oracle_lgw.trc -p # 別ターミナルで sqlplus xxx/yyyy SQL> insert into xxxx values (xxxx); SQL> -- lgwに書き出させる SQL> commit; SQL> -- dbwの書き出させる SQL> alter...