D-7 <altijd in beweging>

Day to day life of a Perl/Go/C/C++/whatever hacker. May include anything from tech, food, and family.

2008年01月

隣のO澤くんが「Perlにデフォルトで入ってるモジュールが何かあるのかわかんないんですよねぇ」とか言ってるから、ワンライナー:

# もしModule::CoreListがインストールされてないなら cpan install Module::CoreList perl -MModule::CoreList -e 'print "$_\n" for sort keys %{$Module::CoreList::version{5.008008}} '


これで一発で出るよ!
AnyDBM_File Attribute::Handlers AutoLoader AutoSplit B B::Asmdata B::Assembler B::Bblock B::Bytecode B::C B::CC B::Concise B::Debug B::Deparse B::Disassembler B::Lint B::Showlex B::Stackobj B::Stash B::Terse B::Xref Benchmark ByteLoader CGI CGI::Apache CGI::Carp ...
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

アナウンスし忘れてたけど、Cache::Memcached::libmemcachedをリリースしたよ。主な違い:
  • 名前が変わった!w LibMemcached -> libmemcached
  • Memcached::libmemcachedをバックエンドとして使用している
    • libmemcached本体が梱包されている!
あとは細かいところがちらほらと。しかしMemcached::libmemcachedのXSコードすげぇよ、本当。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

誰か OO な設計にリファクターして、いろんなコピー戦略を実装できるようにしてくれないかなぁ。
データベースをコピーするモジュール DBIx::Replicate - Kazuho@Cybozu Labs
早速したよ!
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

ここ最近で一番のおススメの漫画は「MOONLIGHT MILE」。最後のフロンティアたる宇宙(作品中では今は月世界)を開拓する人達、それにまつわる国と国の駆け引き、家族、夢を描いている。

たま〜〜〜〜〜に立ち読みするスペリールで連載中の話を読んだりはしていたのだが、なにせ話が意外とスローテンポで進むため、連載中の作品を読んでもイマイチ意味がわからなかった。けど昨年末からブックオフでちょぼちょぼ買い始めたら、これがおもしろくて止まらない。最初の三冊くらいは青年漫画にアリガチな過剰なエロのオンパレードなんだが、物語が進むに連れいい感じに話がふくらんでいく。

ネットで見る限り、技術的な正確さを欠く表現等も見受けられるらしいが、そんな事も気にならないと思う。是非コミックス一気読みをおススメする。

ちなみにはまってからはブックオフに出回るのが待ちきれずに全部新品でコミックスは揃えた。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

「もやしもん」の後がまにやってる「墓場の鬼太郎」、なかなか味があるというか、シュールなアニメなんだが、この内容はともかく、電気グルーヴが歌っているOP曲がなんかイイ! 聞いてると体が動く感じ。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

携帯を変えました。長らく愛用していたシャープ製品ですが、値段とか、あの回るディスプレイが気に入らないとか、諸々の理由を踏まえて有機ELディスプレイのW53Hにしました。

使用しはじめて今日で3日目。今のところ懸念事項であった漢字変換が案の定気に入らないということ以外は結構いけてます。ワンセグは感動はしたけど、やっぱみねぇな、こりゃ。たまにバスに乗る時にでもみさせていただきましょう。

とっても薄いのはひじょうに魅力的。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

ついにMemcached::libmemcachedのレポジトリへのコミット権もらっちった。で、いきなりTim君がcallbackの仕様の云々をかるーく説明してかるーく「こんな感じでリファクタリングするといいお☆」とか言ってくるもんだからコードを読んでみたらわぁかんねぇええええええ!w

このXSはむずいなあ。でもやっぱり本当にCで書くんならこういう事できないと駄目だよな。

つか、俺のオリジナルのパッチを文句も言わずにこんなにリファクタリングしたtim++;
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

Time Bunceからのメールで、最新libmemcached (0.14)で任意のデータをmemcached_st に紐付けられるようになったのでMemcached::libmemcachedも0.1401にバージョンアップしたとの報告が!そこで早速Cache::Memcached::LibMemcachedのバックエンドとしてMemcached::libmemcached を使うブランチを作成したよ。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

小学校で使ってた歌の本にも載ってた「グリーングリーン」。最近トヨタのCMに使われてるけど、これが元の英語の歌詞で歌われていてどんな歌詞だったか知らなかったので調べてみた:http://www.traditionalmusic.co.uk/folk-song-lyrics/Green_Green_Its_Green_They_Say.htm

こ、これ・・・ヒッピーというか、放浪人の歌じゃねぇか!ある日パパとこの世に生きる喜びと悲しみについて語り合ったんじゃないのか!(笑) 「この世のどんな女も俺を一カ所に留める事なんてできないのさ」だって!

いやあ、しらんかったなぁ
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

Time Bunceと言えばPerlで誰でも使った事のあるDBI.pmの作者/メンテナーでありますが、彼はMemcached::libmemcachedも書いています。この間俺もCache::Memcachedの互換インターフェースとしてCache::Memcached::LibMemcachedを書いたわけですが、このおかげでTime Bunce氏と少々交流が生まれました。

そしたら今朝程メールが来て、libmemcachedのドキュメントの不具合もあり、自分が書いたコードにメモリーリークが生まれたのを発見した、とTimからlibmemcachedの作者へのメールが送られていて、それに自分もCCされていた。で、文中には「ちなみにCache::Memcached::LibMemcachedも同じリークしてるよ」って!おお、知らんかった。ありがとおお!

ってことで直した。codereposのrev 5242で直ってます。

前にid:tokuhiromも同じような事を言っていたけど、オープンソースの世界ってこういうところがやめられない要因のひとつだよね。なんか知らない間に誰かが書いたコードが有機的に自分の書いたコードに影響を与えてまたそれがフィードバックされていく・・・すばらしいな。

これから先もどんな仕事をしていてもオープンソースの世界には関わって行きたいと思う。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

サーバーを某案件用に追加。好きにできるサーバーがさらに増えたわけだが、これが半年前にあったら日記才人続けてたかなぁ?とか一瞬思ってしまった。いや、多分やってないけど。

しかしportupdateは時間かかった。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

Memcachedクライアント戦国時代に突入した感のある昨今でございますが、こちらのエントリを見るとget_multi()の性能はC::M::Fastのほうが数パーセント速いということらしい。で、del.icio.usのコメント欄にも書いてあった「結局どっち使えばいいのか?」という事に関してなんだが。

色々自分でベンチをやってみた限り、単体のget()の場合LibMemcachedのほうが50%ほど速い。get_multiのほうは最低2%、最高で10%くらいFastのほうが速い。だから単体get()を多用する場合はLibMemcached、get_multi()を多用する場合はFastでいいんじゃね?

libmemcachedのほうはきっとCの頭いい人がもっと速くしてくれるよ!と流してみる。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

P5Pで今日盛り上がっているスレッド

http://www.gossamer-threads.com/lists/perl/porters/225077?do=post_view_threaded

いいね。今のところ「これだ!」という答えはないけれども、word-boundary云々とか、なかなか有益な情報があった。もっと続くと嬉しい。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

NHKでケータイ大喜利を見ていたらMEGUMIが出ていたのだが、なんか顔かわったな?痩せた?

しかしこの番組、よくNHKでやってられるなー。

    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

インストールプロセスとreplace()を直した0.00006をアップしたよ。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

先輩! 仕事で疲れた脳を休めようと、先ほどlibmemcachedが備えているno_blockをCache::Memcached::LibMemcachedからも設定できるようにしてみたんです。で、ベンチマークを取ってみたところ・・・
daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl ==== Benchmark "Simple set() (scalar)" ==== (warning: too few iterations for a reliable count) Rate perl_memcahed memcached_fast libmemcached libmemcached_no_block perl_memcahed 7396/s -- -60% -77% -99% memcached_fast 18382/s 149% -- -42% -98% libmemcached 31646/s 328% 72% -- -97% libmemcached_no_block 1000000/s 13420% 5340% 3060%
なんですかこれ!速すぎて計測できない言われてる! やばいよ!
もちろん非同期モードで書き込み始めると戻り値を確認しないで書き続けるので速いのは当たり前っちゃあ当たり前なんだが、それにしてもこんな差がでるとは。

ちゃんとした値を取りたいのでset()を呼ぶ数を10倍にしてみました。結果:
daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl ==== Benchmark "Simple set() (scalar)" ==== Rate perl_memcahed memcached_fast libmemcached libmemcached_no_block perl_memcahed 6961/s -- -62% -78% -99% memcached_fast 18437/s 165% -- -42% -98% libmemcached 31827/s 357% 73% -- -97% libmemcached_no_block 1086957/s 15515% 5796% 3315% --
すげぇえええええええ!

自分的にはまった?部分はどうもmemcached 1.2.4でないとサーバー側が停止してしまったこと。これは俺の環境の問題なのか、サーバーの問題なのかは不明。

この機能は次のバージョン0.00005でリリースします。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

POE::Component::Q4M書いた(svn)これでPOEから非同期アクセス。APIがまだイマイチなので意見求ム
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

追記:get()だけじゃなくてset()もベンチとってみた。Cache::Memcachedと比べてget()はざっくり6倍から9倍、set()は2倍から4倍速いみたい。

追記2:一番最後のset()ベンチだけは::Fastが速かった事に今更気づいた。レポート読み間違え。なんとなーーーく俺のベンチでは圧縮が行われてない気がする。誰か知ってたら教えてください。

id:miyagawaさんがLibMemcached.pmに関して「cache::memcached::fast とか ::XS とかとのベンチはどれくらい?」と言っていたので、やってみた。

ベンチ対象はCache::Memcached, Cache::Memcached::Fast,それにCache::Memcached::LibMemcached。Cache::Memcached::XSはlibmemcacheをインストールしてもコンパイルできなかったのでパス。

ベンチの内容も、ただ単純にスカラーをget()するためのベンチマークだけではなく、スカラー、ハッシュ(つまりStorableでシリアライズする)、それに大きめのデータ(Compress::ZlibでmemGzipする)3つのパターンを組み込んでみた。

結果、圧倒的にlibmemcachedが速い。Perlバインディング自体ももう少し最適かできるかもしれないけど、今の感じだとPerlレイヤーで最適化できるところはほとんどないような気がするな。
daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl ==== Benchmark "Simple get() (scalar)" ==== Rate perl_memcahed memcached_fast libmemcached perl_memcahed 3837/s -- -80% -88% memcached_fast 18939/s 394% -- -42% libmemcached 32895/s 757% 74% -- ==== Benchmark "Simple get() (w/serialize)" ==== Rate perl_memcahed memcached_fast libmemcached perl_memcahed 3658/s -- -77% -84% memcached_fast 16077/s 340% -- -29% libmemcached 22727/s 521% 41% -- ==== Benchmark "Simple get() (w/compression)" ==== Rate perl_memcahed memcached_fast libmemcached perl_memcahed 3720/s -- -74% -81% memcached_fast 14535/s 291% -- -27% libmemcached 19841/s 433% 37% -- ==== Benchmark "Simple set() (scalar)" ==== Rate perl_memcahed memcached_fast libmemcached perl_memcahed 7163/s -- -61% -77% memcached_fast 18519/s 159% -- -41% l ibmemcached 31447/s 339% 70% -- ==== Benchmark "Simple set() (w/serialize)" ==== Rate perl_memcahed memcached_fast libmemcached perl_memcahed 3529/s -- -31% -41% memcached_fast 5086/s 44% -- -15% libmemcached 6002/s 70% 18% -- ==== Benchmark "Simple set() (w/compress)" ==== Rate perl_memcahed libmemcached memcached_fast perl_memcahed 6684/s -- -39% -63% libmemcached 10989/s 64% -- -39% memcached_fast 17986/s 169% 64% --
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

先ほどLibMemcached.pmの0.00003をアップロードした。このバージョンでCache::MemcachedのAPIを全て網羅したと思う。これでサクッと入れ替えができるはず!問題があったら連絡してください。

ちなみに最新ベンチマークの結果は以下の通り
daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl Rate perl_memcahed libmemcached perl_memcahed 3808/s -- -88% libmemcached 32680/s 758% --
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

折角だからベンチをとってみた。びっくり。
daisuke@beefcake Cache-Memcached-LibMemcached$ perl -Mblib tools/benchmark.pl Rate perl_memcahed libmemcached perl_memcahed 3909/s -- -86% libmemcached 27778/s 611% --
おおおお、思ったより差がある!

ベンチマークスクリプトはcodereposに入れておいた。
    このエントリーをはてなブックマークに追加 mixiチェック Share on Tumblr

このページのトップヘ