memcachedの耐えられない重さ
>必要があって OSX で memcached をインストールしてみた。 MacPorts 経由で。ところがこれがメチャ重い。なぜだか知らないがアクセスすると数秒くらい待たされるため、遅すぎて話にならん。
>
>で、どうせテストしていただけだったので放置していたのだけど、また調べてみたところ、
>Fast memcached on OS X
> という記事を発見。setsockopt とか EVENT_NOKQUEUE とかいうあたりでなんとなく理解するが、なにせこっちは MacPorts だから、パッチを充てるのは面倒くさいんだよなぁ……。
>
>ところで、そもそも MacPorts には必要ならパッチを充てる方法があるはず。ではどうするか。まず作業ディレクトリの場所。これは dir というサブコマンドで出力されるから、
>
>% cd `port dir memcached`
>
>などとして cd できる。このディレクトリには Portfile という名前のファイルがあって、これが MacPorts のレシピになっている。
>
>で、ここにソースコードを展開してパッチを見ればいいわけだ。ふつうはinstall サブコマンドでだけで一発インストールしてしまうけど、大元のports と同様に、 MacPorts でも途中のステップで止めることができる。これらのサブコマンドは fetch、extract、patch、configure、build などの、知っている人には馴染深いもの。今回はパッチが適用されているのか知りたいので、まずは
>
>% sudo port extract memcached
>
>として、カレントディレクトリの下にソースコードが展開されているのを見る……のだが、実際には既にインストールされているパッケージの場合は、「もうインストールされている」ということで何もしてくれないようだ。これについては -f オプションで強制的に動作もさせられるらしい。そのあとで patch して見比べてみたりすればいい。
>
>さて、そうして extract と patch の差を見比べたのだが、当該の箇所が消えたり、 undef されている形跡はなかった。というか読んでる人からツッコミを入れられそうだが、先程に述べた Portfile のなかにパッチに関する記載がそもそもなかったわけで、まあパッチやらないだろうな、とは思ったんだけどね。ちなみにパッチがある場合、このディレクトリには Portfile のほかに files というディレクトリがあり、そこにパッチが収められているようだ(Portfile 側でも patchfiles という名前で指定する)。
>
>それでもいちおう念のため、 EVENT_NOKEQUEUE=1 をセットして memcached を起動してみるが、やっぱり遅いまま。というわけでパッチはあたっていない。
>
>仕方ないんで自分で入れるか、ということで memcached の本家から最新版をダウンロードして、ソースコードを見ると……その箇所がない。消えている。もしやと思って無改変で
>
>./configure --with-libevent=/opt/local && make && sudo make install
>
>すると、ふつうに軽快に動く。 1.2 系列で、この問題は解決されていたらしい。
>
>なーんだ。
>
>となると問題となるのは、 MacPorts 側に「バージョンアップせい」という要求を出すことなのだが、どうしたらよいのだろうか。改変の内容は簡単で、たぶん単に Portfile のバージョンとチェックサムを変えれば動くはずだ(やってみたら動いた。ただし、 post-configure で意味不明のことをしていたのでこれも外す必要があったけど)。
>
>この差分を送りつけるのは簡単なのだが、どこにどう供給したらよいのかがよくわからない。send-pr(1)もないしねぇ。 Bug Report にじかに送りつけるべきなのか? でもあのバグレポートは、ちゃんとバグレポートになってるくさいしなー。わからんですよ。
>