Siburlog

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

livedumpをgithubに上げた

経緯

2年前にLKMLへv3を投稿して以来、開発が止まっている拙作livedumpをgithubにアップした。アップストリームカーネルへの新機能追加を夢見たが、メリットやユースケースが曖昧な一方、デメリットは大きく、マージの可能性は個人的には低く感じた。結局色々と疲れもあって諦めていた代物である。LKMLのメールアーカイブに放置するよりは、完全なレポジトリの形にしておいた方がユーザが得られる可能性が0.01%くらいはあるかもしれないと思うので、今回回収してみた次第。

livedumpとは

OSを止めずにOSのメモリダンプを取る、という機能である。

OSのメモリ内容は/dev/memを読むことでも得られる。但しこの場合、/dev/memを読んでいる間にもメモリの内容はどんどん書き換えられていく。得られたダンプはある瞬間のメモリスナップショットを切り取ったものにはならない。ダンプ解析をしようとしても整合性が無いため失敗する可能性がある。

livedumpでは、stop_machine()という一時的にOSを停止する機能を使い、OSが使用しているメモリ全体に対してライトプロテクションを張る。それ以降OSのメモリに書き込みが生じると、ページフォルト例外が発生するので、ここで書き込まれようとしているメモリ内容を退避することができる。このような仕組みにより、メモリスナップショットが取得できるという仕掛けである。

コード

今後

今回githubにアップするにあたり、新たに動作テストなどは全く行っておらず、使い方は作者本人も忘れているような感じである。暇を見て、動作テストや最新カーネルへのrebaseを行っていく、かもしれない。