@naota344の今週のLKML
今週は
- [RFC][PATCH 0/7 + tools] Checkpoint/restore mostly in the userspace
- spl/zfs-0.6.0-rc5 released
- [RFC][PATCH] Anonymous shared memory (ashmem) subsystem
- [PATCH 1/5] fs: add SEEK_HOLE and SEEK_DATA flags
[RFC][PATCH 0/7 + tools] Checkpoint/restore mostly in the userspace
http://permalink.gmane.org/gmane.linux.kernel.containers/20925
プロセスを一時停止して、その状態をファイルにdump。あとでそのdumpからプロセスを復帰させる checkpoint/restore を実装するためのpatchが投げられています。似たような機能は DragonFly にもありますね。 http://leaf.dragonflybsd.org/cgi/web-man?command=checkpoint§ion=ANY
http://permalink.gmane.org/gmane.linux.kernel.containers/20926
ここのpatchで/proc/
http://permalink.gmane.org/gmane.linux.kernel.containers/20933
このツールとpatchを使うことで、普通のファイルやパイプを開いている程度なら復旧できるようです。なかなかおもしろい使い道が出そうでこれからが楽しみです。
spl/zfs-0.6.0-rc5 released
http://permalink.gmane.org/gmane.linux.file-systems.zfs.user/211
Linux上のZFSが3.0.0にも対応して、新しいRelease Candicateがリリースされたようです。
http://permalink.gmane.org/gmane.linux.file-systems.zfs.user/227
関連したネタで…こちらでは Gentoo で ZFS サポートされたGentooのLiveCDを作るためのスクリプトなどが出ています。 ZFSルートな #gentooinstallbattle …してみませんか?
[RFC][PATCH] Anonymous shared memory (ashmem) subsystem
http://permalink.gmane.org/gmane.linux.kernel/1168763
Anonymous shared memory (ashmem) を入れるpatchが投稿されていました。これは名前のついてない tmpfs のようなもので、データをファイルのようにアクセスできますし、このファイルデスクリプタを渡すことで複数のプロセス間で共有できたりもします。
と、ここまでだと tmpfs でてきとーな名前のファイルを開いて unlink した状態と変わらないのですが…この ashmem には "pinning" というおもしろいコンセプトがあります。
この ashmem で取得されたページはデフォルトでは "pinning" されていて、特に普通のページと変わるところはありません。しかし、この "pinning" を外すと、そのページはメモリ不足のさいのメモリ回収の対象になるのです。つまり、プロセスとしては「できたらメモリに載せておきたいけど、なくなってもいいもの」(たとえばアイコンのキャッシュとか)をこの "unpinning" なページにおいておけば、システムのメモリが不足してきたら自動的に回収・開放されてシステムのメモリ事情を考えることなくキャッシュのコードが書けるようになる、ということです。
さて、このashmemですが、前述したとおりほとんどの機能は tmpfs と変わりません。 なので、この "pinning" の機能を tmpfs に追加する方向で話が進んでいる様子です。
[PATCH 1/5] fs: add SEEK_HOLE and SEEK_DATA flags
http://permalink.gmane.org/gmane.linux.file-systems/55883
VMのイメージファイルなんかを作るのによく使われる sparse file というものがあります。10GBの容量は持っているけれど、実際にデータがあるのは30MBなどという時にデータが書きこまれていない領域は disk に反映せずに効率的に管理をしよう、という手法ですね。
この sparse file を rsync や tar なんかで backup をとるさいに、rsyncやらは 0 が連続している領域を認識して、そこを sparse の「データのない部分」として処理します。しかし、これは…想像通りかなり効率の悪い手法です。
そこで Solaris では seek に SEEK_HOLE, SEEK_DATA という flag を追加しました。名前からわかる通り、 SEEK_HOLE は次の hole (データのない部分)の offset を返し、 SEEK_DATA は逆に「データのある部分」を返します。これを使うことでより効率よく sparse file を扱えるようになる、というわけですね。