2010-10-02
初期化パラメータ filesystemio_options の値によってI/Oに関するシステムコールがどのように変化するか
新久保浩二さんのブログの以下のエントリを読んで、自分なりに理解したことをまとめてみた。
小幡さん、yohei-aさん、wmo6hashさんなど、いろいろご意見がありましたが、一度、Oracleの非同期I/Oの実装はどうだったのか再確認が必要だと思いちょっと調べてみます。
手当たり次第やってもしょうがないので、以下の3つの観点で調査してみます。多分、何回かに分けて調査すると思うのですが、今回は初期化パラメータfilesystemio_options = [none|directio|asynch|setall]でどのようにI/Oに関するシステムコールが変化するか見てみます。
10046 trace name context forever: Unbreakable Enterprise Kernelのチューニングは非同期I/Oか?
まとめ
初期化パラメータfilesystemio_optionsの値によってどのようにI/Oに関するシステムコールが変化するか
filesystemio_options | open()システムコールのフラグ(DBWR,LGWR,サーバープロセス) |
---|---|
none | O_RDWR, O_SYNC |
directio | O_RDWR, O_SYNC, O_DIRECT |
async | O_RDWR, O_SYNC |
setall | O_RDWR, O_SYNC, O_DIRECT |
- 読み書きに使われるシステムコール
filesystemio_options | 読み込み(サーバープロセス) | 書き込み(DBWR,LGWR) |
---|---|---|
none | pread() | pwrite() |
directio | pread() | pwirte() |
async | pread() | io_submit(), io_getevents() |
setall | pread() | io_submit(), io_getevents() |
妄想
- どのプロセス(DBWR,LGWR,サーバープロセス)も同じフラグでファイルをオープンする
- ファイルをオープンする際は、常に O_SYNC がついている
- O_SYNC vs O_SYNC + O_DIRECT の性能差
非同期処理(filesystemio_options=setall)を行う場合、書き込み完了を待たずに次に処理を進めるので、電源が瞬断した場合などにデータが飛んでしまうが、どのような場合に使うのか
補足
io_submit(2)はO_DIRECTをつけてopenしないと同期I/Oとなる
ただ1点、不思議な点があります。
私の認識ではio_submit(2)はO_DIRECTをつけてopenしないと同期I/Oとなると思っていたのですが、上記結果からfilesystemio_options=asynchの場合は、O_DIRECTフラグが付いていません。それにも関わらずio_submit(2)で非同期I/Oを行う(こと意図していると思う)動作になっています。
本当に非同期I/Oになっているのだろうか?
10046 trace name context forever: Unbreakable Enterprise Kernelのチューニングは非同期I/Oか?
と新久保さんがブログに書かれていたので、手元の本を調べてみると、
詳解 Linuxカーネル 第3版 P.718
(中略)
しかし、Linux カーネル 2.6.11 では、非同期機能はまだ開発中であり、O_DIRECT フラグを指定してオープンしたファイルのみ、非同期で処理できます
なるほど、そう書かれていますね。
現在の Oracle Enterprise Kernel では O_DIRECT フラグを指定しなくても非同期処理できるようになってたりしないかな。
追記(2010/10/09):
追記(2010/10/10):
id:sh2 さんがスバラシイ絵を書いてくださったのでいただき!
私のイメージはこう http://nessa.dip.jp/aio.pdf RT @yoheia: 非同期I/Oのイメージ http://f.hatena.ne.jp/yohei-a/20101009225704
Twitter
- 148 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4ADRA_jaJP376JP377&q=VMWARE+TOOL+無効
- 89 http://www.google.co.jp/search?hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=Oracle+10.2.0.4 OPatch&aq=f&aqi=&aql=&oq=&gs_rfai=
- 40 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=Oracle+11g+R2+インストール+手順&num=50
- 31 http://d.hatena.ne.jp/notify-NotifyUser_POST_NG_CATEGORY?aHR0cDovL2QuaGF0ZW5hLm5lLmpwL3lvaGVpLWEv
- 28 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=linux+tomcat6自動起動&aq=f&aqi=&aql=&oq=&gs_rfai=
- 24 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&hs=ozD&rls=org.mozilla:ja-JP-mac:official&tbs=lr:lang_1ja&q=macosx+su+root&aq=f&aqi=&aql=&oq=&gs_rfai=
- 17 http://www.google.co.jp/search?client=firefox-a&rls=org.mozilla:ja:official&channel=s&hl=ja&source=hp&q=solaris+バージョンチェック&lr=&btnG=Google+検索
- 16 http://www.google.co.jp/search?source=ig&hl=ja&rlz=1G1GGLQ_JAJP323&q=statspack+荀????&aq=1&aqi=g10&aql=&oq=StatsPack&gs_rfai=
- 15 http://www.google.com/search?num=50&hl=ja&lr=lang_ja&tbs=lr:lang_1ja&q=libXp+centos+&aq=f&aqi=g1&aql=&oq=&gs_rfai=
- 13 http://s.luna.tv/search.aspx?client=lunascape&s=0&gl=jp&hl=ja&q=imp NLS_LANG