Entries from 2010-01-01 to 1 year

minっぽい関数の拡張系

入力としてundefあるいは値を複数受け取り 結果として値の最小値(あるいは値が全てundefの場合はundef)を返す という処理をどう書くのがいいか? 自分が思いつくのは以下のコードだけど、もっといい書き方あるかなぁ(簡潔明快であることが望ましい)。 my…

モジュールがロードできたら、その関数を呼ぶ

って処理を書きたい場合がある*1けど、そういう場合は、 my $access_allowed = eval { require Authen::Libwrap } && host_ctl('tiarra', $sock); みたいな感じでよかったらしい。って id:tokuhirom に教えてもらった *1:たとえば Tiarra (あるいはPerl) か…

Tiarra (あるいはPerl) からhosts.allowとか使ってアクセス制御する話

諸般の事情で、ついに Tiarra ユーザーになったんですけど、Dynamic DNS を使って SSH アクセスを制限する方法 - kazuhoのメモ置き場 に書いたようにサーバのアクセス制限を hosts_access 使ってやってるので Tiarra についても同様にしたい。Perl の場合は …

alarmをネストする方法

だいたいこんな感じ。結局使わないコードだけど。alarm(0) を呼んでからセットしてるのは、$SIG{ALRM} の差し替え中にシグナルが飛んでくる可能性を考えて。このあたりは自分がセットするシグナルハンドラの仕様によっては、高速化の余地があるはず。 sub cr…

HTTP/1.1 の chunked encoding を使った POST / PUT を避けるべき理由

通信相手のサーバが HTTP/1.1 対応と確認できるまでは 1.0 と互換性のない chunked encoding は使えないし でも確認が取れた接続を使い回す = HTTP/1.1 の持続的接続を使い回して POST / PUT するってことだけど、持続的接続のタイムアウト条件は、TCP 接続…

YAPC::Asia 2010 を終えて (it's time to write code)

今年の YAPC::Asia も大盛況。"Welcome Perl" というテーマにふさわしく、ハッカーの人たちが何をやっているのかに留まらない、幅広い実用的な話を聞くことができました。その好例が峰松さんのLT「基幹システムがperlでどうしてこうなった」 であったり neko…

Apache, Lighttpd, nginx における持続的接続と lingering close の実装について

lingering close がなんであるかについては、Apache Performance Tuning - Apache HTTP Server Version 2.2 を参照。 Apache 2.2.16 と lighttpd 1.4.28 は、必ずアプリケーションレイヤでの lingering close を行う Apache は2秒、lighttpd は5秒 nginx 0.8…

livedoor Reader で覚えておくべき、たったひとつのショートカット

id:gfx に聞かれたので。Shift+Z を2回押すと、トップのバーが消えて画面が広くなる。便利。それだけ覚えてる

TwitterやFacebookのURLには、なぜ#!が含まれるのか (SEOとAjaxのおいしい関係)

Ajaxを使うためにはページ内リンク (hash fragment=URLの#以降) を使うのが一般的*1 hash fragmentはサーバに送信されないから、JavaScript非対応のブラウザだと動作しない 特にサーチエンジンのクローラ等で問題になる*2 そこで Google は、#! が含まれる U…

SSD定点観測

前回の続き。9ヶ月経過。現在のヒットポイントは83/100。あと、データセットが大きくなってきた分I/O負荷が上がってる。一見まだ余裕ありそうだけどSSDなので、書き込みが増えると読み込みがサチる点注意が必要。 $ sudo smartctl -d ata -a /dev/sdc smart…

Disk I/Oの使用率を監視するワンライナー

iostat -x の %util を監視してしきい値を超えたらアラートメール飛ばしたいなぁと思って crontab 書いた。こんな感じ。 */5 * * * * perl -wle 'my $s = `/usr/bin/iostat -xk /dev/sd[abc] 270 2 | tail -4`; print $s if $s =~ m{\s(?:[0-9]{3}|[5-9][0-9…

POSIX::_exit を呼べばグローバルデストラクションは走らない

perldoc POSIX には、 _exit This is identical to the C function "_exit()". It exits the program immediately which means among other things buffered I/O is not flushed.としか書いてないけど、もちろん global destruction も走らない。 use strict…

IPC::Open3 の正しい使い方 (re .pl な config ファイルのコンパイルがとおるかチェックしてみる - TokuLog 改メ tokuhirom’s blog)

http://d.hatena.ne.jp/tokuhirom/20100813/1281666615 の件ですが、IPC::Open3 の使い方が気になったので、勝手に添削 (c) dankogai。 use IPC::Open3; ... my($wtr, $rdr, $err); my @cmd = ($^X, (map { "-I$_" } grep { !ref $_ } @INC), '-c', $file); …

Ubuntu におけるマルチホーム (IP Alias) の設定とデフォルトのソースアドレス

/etc/network/interfaces に auto eth0 iface eth0 inet static address 172.x.y.10 netmask 255.255.255.0 network 172.x.y.0 broadcast 172.x.y.255 gateway 172.x.y.254 auto eth0:0 iface eth0:0 inet static address 172.x.y.11 netmask 255.255.255.0 …

bashで書き込み用パイプを開く方法

exec 5> >(cronolog ...) # fd=5 の出力を cronolog へ echo "hello" >&5 # cronolog へ出力 exec 5>&- # fd=5 を閉じるServer::Starter 経由で起動するプロセスの出力を統計処理したりする場合には便利かも。アクセスログ等の追記なら、http://d.hatena.ne.…

続 KVM (virtio) のI/Oパフォーマンス

測定環境は下記のとおり。 ホスト: Ubuntu 9.10 Server (amd64) CPU: AMD Opteron 2218 x2 チップセット: nVidia MCP55Pro SSD: Intel X25-M 80GB (SSDSA2MH08) Mode (concurrency) KVM Guest KVM Host % Write (1) 320 521 -39% Write (4) 378 467 -19% Wri…

続: XenServer と KVM のネットワークレイテンシ比較

前回のは、どうも KVM を動かしてるハードウェアの問題っぽい。Mac Pro だと再現しなかったので、そっちの環境でベンチマーク。サーバ負荷が前回よりも軽い環境での比較ですし、ホストの負荷も XenServer と KVM で異なるので、絶対値比較には使えないとかも…

ファイルを追記モードで開くとseekできない、という話 (C言語の高水準I/OとかPerlとか)

C言語に初めて触ってから20年のロートルですが今まで知りませんでした。man fopen より。 The fopen() function opens the file whose name is the string pointed to by filename and associates a stream with it. ``a'' Open for writing. The file is cr…

DELL PowerEdge + Linux で CPU 省電力

BIOS のデフォルト設定は「Active Power Controller」なので、省電力On。OS からは変更不可能。この設定を「OS Control」に変更すれば、cpufreq-set コマンドを使って、動的に CPU クロックを観測/変更できるようになる。Linux (Ubuntu 10.04) のデフォルト…

ニフティクラウドのI/Oベンチマーク

試用アカウントをいただいたので (ありがとうございます!) ニフティクラウドの I/O ベンチマーク。例によって randombench。100MB のファイルへの 16KB ランダムアクセス性能 (単位は IOPS, xfs;nobarrier;noatime)。 concurrency 1 4 16 read 1370 1260 14…

Amazon AWS と NIFTY や Rackspace のクラウド (IaaS) は、技術的にどう違うのか

AWS はコンポーネント指向の IaaS 現時点でのクラウドコンピューティングの大勢は、リソースをオールインワンで提供すること。一般ユーザーにとっての SaaS なアプリケーションは、もちろんそうだし、開発者にとっての Google App Engine も然り。Amazon AWS…

gzipとlzopの速度

Core 2 Duo @ 2GHz。単位はMB/s。 ゼロファイル ランダムファイル gzip 64.1 12.9 gzip -1 104 13.2 lzop 307 32.5

SSD定点観測

運用開始してから100日強の X25-M G2R5。3年くらいは持ちそう。 $ sudo smartctl -d ata -a /dev/sdc smartctl version 5.38 [x86_64-unknown-linux-gnu] Copyright (C) 2002-8 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START …

ウェブのアーキテクチャパターン=空間と時間の分割、という話

Twitter でつぶやいたことだけど。 ウェブの本質はメッセージのルーティング(と保存)だし、最重要なアーキテクチャパターンは空間と時間の分割アルゴリズム。マルチコアvs時分割マルチタスク、L3(もしくは携帯のセル)と CSMA等、リバースプロキシとAppサーバ…

XenServer と KVM のネットワークレイテンシ比較

どちらのサーバも、秒間数十の HTTP 接続をハンドリングしている状態で、ping -c 100 で測定した平均値。 ホスト ゲスト XenServer*1 0.138 1.295 KVM*2 0.130 10.590 KVM のゲストだけが遅い。常に遅いっていうんじゃなくて、時々ひっかかる感じ。ping の出…

2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット)

HTTP の持続的接続の功罪について はじめに、HTTP の持続的接続 (keep-alive) のメリットについて。持続的接続を使うメリットは、以下の2点。 TCP 接続の確立にかかる時間の節約*1 TCP の接続と切断に必要な資源 (CPUとネットワーク) の節約 ウェブブラウザ…

linux の TCP_DEFER_ACCEPT (サーバサイド) の挙動について

以前 (2.6.31 まで?) は以下の挙動*1。 最初のペイロードを受信するまで SYN_RECV ステート クライアントの ACK (TCP ハンドシェイクの最後のパケット) を受信していたとしても、SYN-ACK を送り続ける 190 秒たったら、サーバ側は TCP 接続確立失敗と認識 ク…

KVM のI/Oパフォーマンス評価 (ゲストOS = Windows XP)

測定環境等は前の記事と同じ。ゲスト OS が Windows の場合は virtio のブロックデバイスドライバは使えないので、IDE エミュレーションになる。OS からは MWDMA2 (max 16.7MB/s) として見えるが、実際はもっと速い。以下のような感じ。ゲスト OS のライトバ…

KVM (virtio) のI/Oパフォーマンス評価

測定環境は下記のとおり。 Ubuntu 9.10 server AMD Opteron 2218 x2 nVidia MCP55Pro Hitachi HDS72101 ゲストは LVM 上に構築 4並列でのランダムアクセス (16KB) ホスト ゲスト (cache=writethrough) ゲスト (cache=none) Read 207.7 138.3 187.4 Write 13…

Q4M のコンパクションをノンブロッキングにする話

Q4M には、キューファイルを定期的に圧縮するコンパクションという処理がある コンパクションが走ってる間は INSERT も queue_wait も固まる コンパクションの実行時間は、キューに滞留してるデータサイズに依存 *1 第2点のうち、INSERT が固まっちゃうのは…