Siburlog

SiblogだとSI BlogっぽいのでSiburlogとする

inotify(7)によるファイルアクセス検知能力の調査

概要

Linuxには、ファイルに関するイベントの検知を行うためのメカニズムとして、inotify(7)というのがある。検知出来るイベントには色々あって、詳しくは各位man inotify頂きたく。

今回調査したのはその中のただ2つ、IN_ACCESSとIN_MODIFY。前者はreadアクセスを後者はwriteアクセスを検知してくれる、らしい。しかしファイルへのreadとwriteには幾つか違う方法があるじゃないですか?ってことで、どういうアクセス手段に対して検知可能なのか、調べてみた。

具体的には、以下のアクセス手段について調査した。

  1. read(2)
  2. write(2)
  3. sendfile(2)
  4. mmap(2)してメモリ読み込みしてmunmap(2)
  5. mmap(2)してメモリ書き込みしてmunmap(2)
  6. 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]