tjmiuraの日記

気づいたら技術リンクメモになっていた。

メモ: qmailのPOPログにはユーザIDが出ない

とあるqmailのシステムを覗いてみて、さてアクティビティを数えてみようかと腰を上げて、はたと困った。ログの意味が何だかよくわからないのだ。
で、「qmail ログ フォーマット」辺りでググって出てきたページがこれ。

何だよ、そもそもログをまともに吐かないのか。
そういえばsendmailのメールスプールをNFS上に置いたら駄目な理由もミスリーディングな主張をしているし、DJBってとんだ食わせ者だ。

ついでに、ログを読む治具のマニュアル。

メモ: Solarisにはいつの間にかlibmd5なんてのがある

自前プログラムでMD5の計算をする必要があるときにはRFC1321の付録コードを使っていたのだが、あるとき、Solaris9にはlibmd5.soなんてのがあることに気付いた。
これをlddしてみると、さらにlibmd5_psr.so.1をリンクしている。
アーキテクチャ依存チューニングされたコードになってそうだ。

試しに、固定データブロックをMD5計算しまくるテストコードを書いてベンチマークしてみると、ブロックサイズが16や32ならRFC1321付録コードの方が速い(多分、ダイナミックリンクの呼び出しオーバヘッドで)のだが、64以上ならlibmd5の勝ち。
ブロックサイズの大きい方の極限ではUltraSPARC IIIiなら2倍、x86でも1.5倍ほどスループットが出ている。Solaris9でも10でも傾向は変わらない。もっとも、x86やT1だとブロックサイズが小さくても最初からlibmd5の勝ちだが。

さらにUltraSPARC-T1でもこの傾向は変わらない。もっと段違いの数字が出るかと思いきや、T1プロセッサ内蔵のMAU(暗号アクセラレータ)はMD5計算には役に立たないらしい。
但し、クロックが遅い上にさらに時分割されてる遅さが逐次では(いつもの通り)出てしまうものの、ハードウエアスレッド数までなら「殆ど遅くならない」というお約束もまた分かりやすく現れるので、T1のほうが有利になる場面というのもあるだろう。今回の事例では1GHz 8coreのT1プロセッサが2.2GHz 4coreのOpteronに対して約1.5倍のスループットを出せるようだ。

なお、コンパイルにはGCC 4.1.1を使った(ちょっと古い)。
SunStudio CやらIntel Cやらを使うとまた傾向が変わるのかどうかは調べてみていない。
MAUがMD5をサポートしているT2プロセッサでどれくらい性能が伸びるのか、誰かベンチマークしてくれ。

これもメモ。

メモ: NFS を使っていて .nfsXXXX みたいなファイルが生成されたとき

  • Drk7.jp: NFS を使っていて .nfsXXXX みたいなファイルが生成されたときの対処方法

一時ファイルなので見なかったことにしてください、というworkaroundとともにうろ覚えしていて人にうまく説明できなかったりするので、備忘録。カーネルソースまで読んで納得させてくれる人も珍しいし。

問題のファイル名がピリオドで始まるせいで検索しにくくてかなわんのだが、NutshellのNIS&NFSに載ってなかったっけ。

Cソース上でSolarisのバージョンを識別するには

いつも、「どうやるんだったっけ……?」となるネタ。

cpp -dM /dev/null

または

gcc -dM -xc -E /dev/null

って、Solarisのバージョンを表す文字列が含まれてないじゃん…

Solairs10上でGNU Screenをコンパイル

で、これは何のためだったかというと、これ。

どっちかっつうと、misc.cの619行目

setenv(var, value);

を編集しちゃうよりは、この部分をくくってる条件マクロの方を編集するべきではないかと。

diff -ur screen-4.0.3.org/misc.c screen-4.0.3/misc.c
--- screen-4.0.3.org/misc.c     2003-12-05 22:45:41.000000000 +0900
+++ screen-4.0.3/misc.c 2008-07-21 17:55:44.950202000 +0900
@@ -613,7 +613,7 @@
    */
 # endif /* NEEDSETENV */
 #else /* USESETENV */
-# if defined(linux) || defined(__convex__) || (BSD >= 199103)
+# if defined(linux) || defined(__convex__) || (BSD >= 199103) || defined(__sun__)
   setenv(var, value, 1);
 # else
   setenv(var, value);

補足すると、Solarissetenv(3C)が備わったのはSolaris10以降なので、SunOSバージョン識別は結局不要で、条件分岐としてはこれでよかった。
Solaris9以前ではputenv(3C)が使われるのでこれまで問題にならなかったわけだ。

なお、本家では議論済みらしい。

メモ: ActivePerl 5.8.xでlibxml系モジュールを使う

  • Charsbar::Note: ActivePerl 5.8.xでlibxml系モジュールを使う

ActivePerlはWin32ネイティブで、CygWinと違ってGCCがあればというわけにもいかず。

ActivePerlにはppmなるパッケージ管理ツールがあるってことを実は初めて知った。

Windows Vistaのエクスプローラでファイルを複数選択できない

何がトリガで出来なくなったんだが分からないのだが、エクスプローラ内で複数のファイルを選択することができなくなった。
マウスをドラッグして四角で囲んだりCtrlやShiftを押しながら複数を選択するという操作をしようとしても最後にクリックした一つしか反転表示にならない。
Ctrl-Aだけは生きているようだ。

レジストリ修正で対応するらしい。

SP1で治るんだろうか。