inotify(7)によるファイルアクセス検知能力の調査
概要
Linuxには、ファイルに関するイベントの検知を行うためのメカニズムとして、inotify(7)というのがある。検知出来るイベントには色々あって、詳しくは各位man inotify頂きたく。
今回調査したのはその中のただ2つ、IN_ACCESSとIN_MODIFY。前者はreadアクセスを後者はwriteアクセスを検知してくれる、らしい。しかしファイルへのreadとwriteには幾つか違う方法があるじゃないですか?ってことで、どういうアクセス手段に対して検知可能なのか、調べてみた。
具体的には、以下のアクセス手段について調査した。
- read(2)
- write(2)
- sendfile(2)
- mmap(2)してメモリ読み込みしてmunmap(2)
- mmap(2)してメモリ書き込みしてmunmap(2)
- mmap(2)してメモリ書き込みしてmsync(2)してからmunmap(2)
調査環境はsakura VPS上のCentOS6.5(=KVM上のLinux2.6.32)。
調査には以下のコードを使った。
結果
read(2)/write(2)以外はなんも検知出来なかった。 mmap(2)して〜ってのはダメかもなーと思ってたけど、sendfile(2)に無反応は意外。 splice(2)も調べようかなーと思ってたけどめんどくさいからやめておく、sendfile(2)に無反応ならsplice(2)も同じじゃないのかね。
dirty pageは下記のような感じで逐一accoutingされてるという理解なので、inotifyにも情報回ってくるだろうと予測してた。 mm: tracking dirty pages -v6 [LWN.net]