Entries from 2008-05-01 to 1 month

Linux (NPTL) の pthread_rwlock_t はデフォルトがリーダー優先

PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP http://www.google.com/codesearch?hl=en&q=PTHREAD_RWLOCK_DEFAULT_NP+package%3Aglibc な、なんだってー!!! orzライター優先で使うケースのが多いですよね? てか Mac OS X とか Solaris …

Does calling pwrite from multiple threads DECREASE throughput on linux?

> 奥さん コメント有難うございます。そういう事なら確かにpwriteでもっと性能出て欲しいですね。単体のベンチマークのソースコードとかって晒して貰う事は出来ますでしょうか? http://d.hatena.ne.jp/nishidakeisuke/20080528/p1#c1211944915 おもしろいか…

Q4M 次の ToDo

4コアで idle がなくなったってことはまあ設計はこれでいいってことだろうから機能追加再開する。 DELETE on SELECT モードの実装 複数行 own できるように 例外の扱いとかちゃんとするorz

マルチスレッドなら pwrite より mmap+msync のが速い (or Q4M のパフォーマンスの限界値に到達) という話

色々ユーザランドでのロックを使わない形に書き換えても、なかなか速くならなかったのが、pwrite をやめて mmap(PROT_WRITE) 経由での書き込みにしたら、20% 程度あった idle time が 0 になった。ベンチマーク的にはこんな感じ。上が pwrite 経由。下が msy…

mmap で読み込み、ファイル I/O で書き込み

念のためテストコードを書いて確認。ちゃんと動く。 #include <assert.h> #include <fcntl.h> #include <stdio.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/uio.h> #include <unistd.h> int main(int argc, char **argv) { int fd, i; int *map; char buf[16]; fd = open("/tmp/mmap_pwrite.tmp", O_RDWR | O_CREAT </unistd.h></sys/uio.h></sys/types.h></sys/mman.h></stdio.h></fcntl.h></assert.h>…

今日の Q4M

read を並走可能にしようといじっていたら、concurrency は上がったけどスループットは落ちたorz

Q4M の concurrency 改善計画

read の MT 化は、ほぼ完了 各スレッドに owned_row を割り付ければ、owner mode の場合に rnd_next 内での mutex 獲得を不要にできるはず 次は read の mmap 化 pread が不要になることにより、不可避のボトルネックであるキュー割り付けコード (assign_own…

MySQL のパフォーマンスの上限と Q4M について

実際にベンチマークをとってみました。Kazuho at Work: Maximum Peformance of MySQL and Q4M

Q4M - とりあえず pwrite を複数スレッドから呼ぶようにしてみた

とりあえず pwrite を複数スレッドから呼ぶようにしてみた。でもってベンチとろうとしたら perl のテストコードじゃサチってどうしようもなくなっていたので C で書いた。 $ MESSAGES=400000 CONCURRENCY=40 DBI='dbi:mysql:test;mysql_socket=/tmp/mysql51.…

64-bit OS におけるユーザーランドのメモリ空間 (もしくは mmap できる最大サイズ)

263 バイトとかじゃないので注意が必要。 OS 最大サイズ Windows 8TB*1 Linux (>=2.6.11) 128TB*2 Linux ( 512GB Solaris 10 250TB*3 Mac OS X は不明。mmap でファイル全体にランダムアクセスとか、ちょっと微妙かもしれないと思った。 *1:x86-64 - Wikiped…

Q4M は 64bit 向けに最適化してくことにするかな

Q4M のアクセスにあわせた File I/O の抽象化レイヤを書いて、64-bit 版はデフォルト mmap+msync を使うようにしようと思った。32-bit 版は mmap 使えないので、速度が向上しないかもしれないけど、それは以下の理由により気にしない方向で。 今後は 64-bit …

というわけで対策検討

ボトルネックはたぶん削除処理が直列化されて、1行毎に pwrite, そして fsync でまとめてコミット、というコードになっている点。fsync を呼出は MUST だから、並列化することはできないし、1行毎の pwrite をやめて削除処理をジャーナリングすることで、…

Q4M の並走度

Opteron 2218 x2 のマシンで。Idle が出ているということは、やっぱキューへのアクセスに関連する直列化がボトルネックなんよねという感じ。最適化かけないといけないですね。 top - 18:46:13 up 40 days, 2:15, 3 users, load average: 3.61, 3.50, 1.72 Ta…

HTTP における日時処理

Expires レスポンスヘッダとか、そのまま使うんじゃなく Date ヘッダの値で減算したデルタ値を使うのが正しい。だってクライアントやサーバの時計があっている保証なんてないから。 #タイムゾーンが狂ってるとかよくあるし freshness_lifetime = expires_va…

InnoDB Plugin の圧縮率評価ちう

とりあえず、Pathtraq の開発用テストデータの URL テーブルの圧縮率テスト。 形式 バイト数 圧縮率 無圧縮 717,225,984 100% 独自*1 406,847,488 57% InnoDB 圧縮*2 360,710,144 50% 独自 & InnoDB圧縮 239,075,328 33% 現時点での感想。 カスタマイズされ…

世界最大のYAPCが東京で行われる(本当の)理由

東京の都市圏人口が世界一だからでしょ。 世界の都市圏人口の順位 - Wikipedia参考: 404 Blog Not Found:世界最大のYAPCが東京で行われる理由

Q4M のベンチマーク on Opteron 2218 x2

$ uname -a Linux rel32.pathtraq.com 2.6.18-53.1.14.el5 #1 SMP Wed Mar 5 11:37:38 EST 2008 x86_64 x86_64 x86_64 GNU/Linux (snip) t/04-blob-cond.............ok t/04-blob..................ok t/05-multireader...........ok 1/4 Multireader bench…

Dynamic DNS を使って SSH アクセスを制限する方法

いつでもどこからでもサーバにログインしたくなるときってありますよね。かといって、サーバの sshd への接続を全世界から可能にしておくというのは、たとえパスワード認証を無効化していても避けたいところ。今までは自宅が事実上固定アドレスだったので、…

Bash で HTTP リクエストを投げる

shwget | gniibeの日記 | スラド あたりを見ながら遊んでいたわけですが。 % (echo GET / >&0 ; cat) < /dev/tcp/localhost/80あたりが最小形態ですかね。HTTP/0.9 を使ってボディだけ取る。 % (echo GET / >&0 ; cat) < /dev/tcp/localhost/80 | openssl md…