2009年3月11日水曜日

unixbench 4.1.0 で Shell Scripts の結果がおかしくなる

Core i7搭載のPC ( パソコン工房 WS7000L ) が届いたので、計算用に Debian(lenny) の amd64 版をインストールしてみました。もともとUbuntuの動作確認がとれているものなのですが、流石最新版、あっけなくインストール終了、問題なく稼働中。

ところが、ちょっと計算速度でも見てみようかと思い unixbench をコンパイルして実行させたところ、Shell Scripts の結果がおかしい。infなどという値になります。(このへんちょっとうろ覚え。)

調べてみると、どうも pgms/tst.sh のシェルスクリプトで sort +1 という古いオプションを利用しているせいらしく。logを見ると +1 : No such file or directory ってそりゃそうですねえ。ここは sort -k 2 にしておくのがよさそう。

というわけで修正をしてみました。
ついでに、すぐ make & Run できるよう Makefile のデフォルトを調整して。
あと Run の環境変数は C にしておくと、もしかしたら想定の動きなのかなー?と思ったので足してみた次第。LANG=C ./Run が正しいのかもしれません。

あとはコンパイラが警告を出しているのがちょっと気になるんだけど、まあとりあえずってことで。


diff -urN unixbench-4.1.0.orig/Makefile unixbench-4.1.0/Makefile
--- unixbench-4.1.0.orig/Makefile 1999-07-29 07:05:02.000000000 +0900
+++ unixbench-4.1.0/Makefile 2009-03-11 23:36:15.000000000 +0900
@@ -44,10 +44,10 @@
# -m386 -malign-loops=1 -malign-jumps=1 -malign-functions=1

## For Solaris 2, or general-purpose GCC 2.7.x
-OPTON = -O2 -fomit-frame-pointer -fforce-addr -fforce-mem -ffast-math -Wall
+# OPTON = -O2 -fomit-frame-pointer -fforce-addr -fforce-mem -ffast-math -Wall

## Very generic
-#OPTON = -O
+OPTON = -O

## For Digital Unix v4.x, with DEC cc v5.x
#OPTON = -O4
diff -urN unixbench-4.1.0.orig/Run unixbench-4.1.0/Run
--- unixbench-4.1.0.orig/Run 1999-07-29 07:04:47.000000000 +0900
+++ unixbench-4.1.0/Run 2009-03-11 23:34:26.000000000 +0900
@@ -1,6 +1,7 @@
#! /bin/sh
#
#################### set your defaults here ##############
+LANG=C ; export LANG
#FLAVOR= # flavor of UNIX: if not determined by script: SysV or BSD
FULL_SUITE="dhry2reg whetstone-double syscall pipe context1 spawn execl \
fstime fsbuffer fsdisk shell short int long float double arithoh \
diff -urN unixbench-4.1.0.orig/pgms/tst.sh unixbench-4.1.0/pgms/tst.sh
--- unixbench-4.1.0.orig/pgms/tst.sh 1995-11-28 02:07:03.000000000 +0900
+++ unixbench-4.1.0/pgms/tst.sh 2009-03-11 23:35:22.000000000 +0900
@@ -15,6 +15,6 @@
###############################################################################
ID="@(#)tst.sh:3.4 -- 5/15/91 19:30:24";
sort >sort.$$ -od sort.$$ | sort -n +1 > od.$$
+od sort.$$ | sort -n -k 2 > od.$$
grep the sort.$$ | tee grep.$$ | wc > wc.$$
rm sort.$$ grep.$$ od.$$ wc.$$


お手元の sort コマンドが + オプションを受け付けないときにどうぞ。お急ぎのかたは pgms/tst.sh だけ直せばOK。
sort --version してみて 6.10 だとダメなようです。
FreeBSDの sort は 5.3.0-20040812-FreeBSD というわけでちょっと古く、+ オプションへの対応が残っていたみたいですね。

ベンチマーク結果は後ほど。

追記、_POSIX2_VERSION=199209 のようにPOSIX準拠のための変数を定めておくのもひとつの方法のようです。unixbenchは古いプログラムなので、こういうところに気を遣うものなんですね。

追記2 いま times のログを見たら warning だの Bad address だのが出ていて、もしかしたらもうちょっと修正しないといけないのかも……? そのうち大幅書き直しかもしれません。

0 件のコメント: