Write Barrier(I/Oバリア)とは

 

I/Oバリアとは

ファイルシステムの整合性を取るために存在する機能

I/Oバリアを使うとext3のファイルシステムではI/O性能が悪くなる問題があったが、ext4になって安定して標準機能として使われるようになった。

※あるブログの内容を見るとext3でI/Oバリアを使うと1/10程度のI/O性能しか出せなかったといってる。

以下の図も参考してください。

 image

 

I/Oバリアの動き

ここからは「ジャーナル」についてわかってるという前提で説明しましょう。

I/Oバリアを理解するポイントとしては「キャッシュ」と「ジャーナル」を理解することである

ここで言ってるキャッシュっていうのは物理的なものに付いてるキャッシュを指していて、俺らが「書き込みをした」といってるが、性能向上のためディスクはキャッシュっていうのも持っていて実際には「書き込みをしたが、ディスクではなくキャッシュにあった」という場面が多々ある

ここでジャーナルは俺らが感じたことと同じく実際キャッシュに書き込まれていても「書き込みをした」と記録をしてしまう

 

もし電源断が発生してキャッシュにあるAというデータが消えてしまったとする

でもジャーナルは「Aというデータを書き込みした」と書いてしまうのでAというデータはもう完全性を保護する対象から弾かれているので整合性が取れなくなる

そのためI/Oバリア設定をONにするとI/O処理の前後にキャッシュのデータをFlushする動作を行うことで「書き込みをした」と書くのではなく「キャッシュじゃなくディスクにちゃんと書き込みをしたよ!」と確証を得られる設定である

 

このようなI/Oバリア設定を外すことで得られるメリットとデメリットについてまとめてみる

I/Oバリア設定を外すと得るメリット

I/O処理の前後にキャッシュのデータをFlushするのでその分性能にコストがかかる

※ここで話しているキャッシュのデータをFlushするというのはキャッシュに保存されているデータを物理ディスクに移動させるという意味

 

I/Oバリア設定を外すと得るデメリット

電源断に対して対応しておかないとデータの完全性を失う可能性があり

 

I/Oバリア設定
vim /etc/fstab
/dev/sdb2       /sdb2_test      ext4    barrier=0,defaults      0       0

上記のようにオプションにbarrierの設定を入れる

barrier=0 は無効化し、barrier=1 は有効するという意味だ。デフォルトでは1(有効)

mountコマンドのオプションでも設定可能(-o nobarrier)

 

まとめ

ext3からI/Oバリア機能はあったが、ちゃんと性能を出せなかった

I/Oバリアを外すと性能は上がるけど、電源段が発生した時データを失う可能性がある

キャッシュ使ってないのであればI/Oバリアはいらない(むしろ効かなくなるはず)

 

 

参考したページ:

http://white-raven.hatenablog.com/entry/2013/01/01/183323 <<とくにお世話になりました

http://rhlinux.tistory.com/m/post/38 <<お世話になりました

http://rhlinux.tistory.com/38

http://lunatine.tistory.com/8

http://archive.linux.or.jp/JF/JFdocs/kernel-docs-2.6/filesystems/ext4.txt.html

http://db2.jugem.cc/?eid=2485

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です