09:34:07 # Life FUSEをいじり始めてから。 FUSEは昔2005年ころ紹介記事をかいたけど実際にはあまりいじってなかった。 手元のGitレポジトリを眺めてみると思い出したように2009年にプロトタイプを少し書いていてそのあとずっと放置していた。
ちょっとかわったのは2015年の9月からで、気合を入れて活発にいじり始めて、 某社内イベントでデモを見せるために頑張って作ったりしていた。 2015年9月末にはGithubにプロジェクトを公開して、gitlstreefs と ninjafs の基本的なものを公開できた。 gitlstreefs の基礎調査のために githubfs と libgit2ベースのgitfsも実装していて動くところまではいっているんだけどまぁどちらも遅すぎて使う気にならないという結論。 gitlstreefsをssh経由で使えるようにしていたのが2015年10月辺りかな。 でもってふと気づいてPassthrough Filesystemは親のディレクトリと実際に見せるディレクトリは同じディレクトリでもよいんじゃないかとおもってUNKOFSというのを作ってみた。 これは便利かと思っていたんだけど、よく見ないとファイルシステムがマウントされているのかどうかが見分けがつかなくて不便。 でもまぁそのままCowfsを実装して2016年3月くらいにはDebian Chrootが上で動くCowfsを実装していた気がする。 最初はDedupをオフラインでマウント時にしていたのだけど、 4月はファイルディスクリプタがReleaseされるタイミングでOnlineでDedupeができるCowfsを実装していてRace Conditionとたたかってた。 CowfsはLD_PRELOADベースのCowdancerを置き換えようと思って作ってたんだけど なんか高速ではないのだな。 ファイルコピーをread/write とspliceと比較してfallocate+sendfileベースにするのが一番高速であるというベンチマークをとってたりどのSha1の実装が一番高速かとか計測してた。
なんか10年とかたってるんだけど。
09:55:48 # Life Shell builtin. シェルスクリプトでのワイルドカードの展開はコマンドの実行のときにしか行われないので [ と [[ で挙動が違う?ぽい。そうだっけな。[ も builtinだった気がしたのだけどFork/execをしないという意味なのかな。
[[ -e hoge* ]] # hoge* というファイルが存在するか確認 [ -e hoge* ] # hoge* を展開したファイルが一つ存在するか確認。
18:19:15 # Life FUSEってどれくらいおそいのかな。 とりあえず単純なベンチマークで試してみた。COWFSで。使ったのはGCEのN。 100スレッドが100回ファイルをcreat/write/close/open(O_WRONLY)/write/closeするベンチマーク(parallel_writer)をとりあえず普通にやると0.3s, cowfs経由で動かすと0.8s. 二倍か。
18:29:49 # Life ハードリンクをリネーム。なぜかファイルが消えてないのでデバッグしていたら、どうやら同じi-nodeの場合はrenameでファイルが消えないらしい。 renameat2 ファイルが最初にあってrenameat3 ファイルをハードリンクにしたら renameat2 を renameat3 にrenameatしたら通常renameat2ファイルが消えるのだけど消えない。
linkat(AT_FDCWD, "renameat2", AT_FDCWD, "renameat3", 0)); renameat(AT_FDCWD, "renameat2", AT_FDCWD, "renameat3");
17:10:51 # Life cowfs. 最近いじってたFuseベースのCOWファイルシステムでapt-get update と apt-get install gccが動いた。
07:10:03 # Life libjson-spiritがリンクできないなぁとおもってたら。 Ubuntu15.10のバイナリが std::__cxx11::basic_string 版を要求するのに std::basic_string版しか提供してくれなくてリンクできないなとおもってふとlibjson-spiritをビルドしなおしてみたらstd::__cxx11::basic_string版を提供するようになった。 なんか嫌な感じ。
17:01:01 # Life C++のコードをUbuntuでコンパイルしようとしている。 Ubuntu 15.10はDebian 8よりはモダンなツールチェインでいくつか変わっているところがある。 Debian 8 では gcc 4.9だけど、Ubuntu 15.10は gcc 5.2.1. 今困ってるのは システムライブラリでstringはstd::basic_string だったのに c++11 でコンパイルするとstd::__cxx11::basic_stringになること。 C++11のコードまぜるな危険。
06:34:58 # Life ふとみたらOrangeFSという見慣れないファイルシステムがあって。 PVFSの名前が変わったっぽい。PVMのファイルシステムなのか。懐かしいような。
06:38:32 # Life FUSE眺めてたらカーネルサイドのコードまだMiklosレビューしているみたいにみえる。 しかしメールアドレスがSUSEからRedhatに移動している。メンテナの交代とかしていたのはこれとタイミングが一緒なのかな。