memcachedの耐えられない重さ

This entry was posted by on Friday, 19 January, 2007
>必要があって 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 にじかに送りつけるべきなのか? でもあのバグレポートは、ちゃんとバグレポートになってるくさいしなー。わからんですよ。 >

Comments are closed.