NAKAMURA Minoru の日記 (2003年6月)

先月の日記(2003年05月) 今月の日記(2003年06月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3 | 4
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita



6/30 (月)

不正アクセスの集計

今月も今日で終わりなのでログの〆を行う。
不正アタックを試みたホストは、片っ端からプロバイダに通報。
本当は毎日不正サイトを見つけ出して通報すべきなのだが、 多忙のため大幅に遅れてプロバイダーに提出したログの中には すでに解決済みのものも多いであろう。

今月分の不正アクセスの国別統計を集計。
閉じているポートへアクセスを掛けてきた サイトを攻撃とみなすと以下のようになる。
先月と比べると、 今回は、 アクセス数でオランダが5位に入ってきた。 少数のホストが執拗に攻撃を掛けたものと思われる。
逆に、 ホスト数・アクセス数でトップテンにいる香港は、 SARS の影響か 今月はホスト数では 16位、アクセス数では 13位と奮わず。

アクセスホスト(IP)数
順位国別割合
1US (アメリカ)26.36%
2CN (中国)16.97%
3JP (日本)12.33%
4TW (台湾)5.20%
5KR (韓国)4.19%
6CA (カナダ)4.07%
7BR (ブラジル)3.28%
8DE (ドイツ)2.83%
9UK (イギリス)2.60%
10FR (フランス)1.92%
     
アクセス数
順位国別割合
1US (アメリカ)21.84%
2CN (中国)20.60%
3JP (日本)15.96%
4TW (台湾)6.22%
5NL (オランダ)4.87%
6KR (韓国)4.42%
7CA (カナダ)3.64%
8FR (イギリス)1.96%
8BR (ブラジル)1.96%
10UK (イギリス)1.90%

そのほか HTTP(80) 番へ攻撃を掛けて来たサイトは 先月の 386 サイトから大幅に減り 231 サイトに。

国別順位
アクセスホスト(IP)数
順位国別サイト数割合
1CN (中国)14864.1%
2JP (日本)5724.7%
3MY (マレーシア)104.3%
4TW (台湾)52.2%
5BR (ブラジル)31.3%
     
国内サイトのみ
アクセスホスト (IP)数
順位国別サイト数
1bbtec.net36
2plala.or.jp4
 il24.net4
4FreeBit.NE.JP3
 その他10

6/29 (日)

[Bench] VeriTest 社の SPEC CPU2000 ベンチマーク結果再考

6月25日に紹介した VeriTest 社の SPEC CPU2000 ベンチマーク結果は色々な所で話題になっているが、細部を調査していくうちにいろいろ気づいたので紹介する。 まず、VeriTest 社が Apple Power Mac G5、Dell Dimension 8300、Precision 650 を測定して得た結果は下の表(それぞれの行の中の数値は、大きい程性能が高い)。

Metrics Apple
Power Mac G5
PPC970 2.0GHz x2
Dell
Dimension 8300
Pentium4 3.0GHz x1
Dell
Precision 650
Xeon 3.06GHz x2
SPECint_base2000 800 889 836
SPECfp_base2000 840 693 646
SPECint_rate_base2000 17.2 10.3 16.7
SPECfp_rate_base2000 15.7 8.07 11.1

1. Power Mac G5 のスケーラビリティーの問題

まずは軽い話題から。
Apple の Power Mac G5 の SPECint_base2000 の結果は 800。
つまり基準マシンの 8.00倍の速度で動作する。
一方、SPECint_rate_base2000 の成績は 17.2。 2 つの CPU が合わせて基準マシンの 17.2 倍の動作をする。 つまり 1 CPU あたり 8.6倍。 スーパーリニア以上に性能が向上している。不思議だ。

システム部分が常に一定量ある場合、2CPU になるとシステムの負荷が分散される分高速化されるという可能性はある。 あるいは誤差。

2. Pentium4 側で SSE / SSE2 を使ったかどうか、実際に効果があったかどうか

VeriTest 社が Pentium4 側に付けた -mfpmath=sse オプションは、SSE2 命令を生成するのか SSE1 命令しか生成しないのかは紛糾の原因になっていた。

実際に GCC 3.3 を用いて -mfpmath=sse を付けて CINT2000 をビルドし、バイナリを disassemble して調べたところ SSE1 命令は確かに含まれていたが、 SSE2 命令があるのかないのか判断がつかなかった(一部しか調べなかったので)。

次に 2 つの CINT2000 バイナリを DELL の Precision 650 に似たマシン(Xeon 2.8GHz (L2 512KB)、ServerWorks GC-SL、FSB 533MHz、PC2100 (DDR266) Single Channel、Linux 2.4.9 kernel系)で実行してみた。 オプションは VeriTest の Precision 650 の計測 configuration と同一。

Benchmark-mfpmath=sse
164.gzip 831810
175.vpr 428431
176.gcc 771772
181.mcf 385380
186.crafty 883884
197.parser 714712
252.eon X X
253.perlbmk X X
254.gap 821817
255.vortex 659660
256.bzip2 540536
300.twolf 539528
Total 634630

手元の SPEC CPU2000 のバージョンが古いため、252.eon と 253.perlbmk がビルドで落ちる。
しかし それ以外の(相乗)平均を見ると -mfpmath=sse がオンとオフでほとんど差がない。
この結果だけ見ると、-mfpmath=sse オプションは少なくとも CINT2000 に関してはほとんど効かないので、もっと有効な別の最適化オプション(例えば -funroll-loops)を選択すべきだったといえる。

GCC は SSE2 命令に関して -msse2 オプションがあり、こちらを使うとより積極的に SSE2 命令を使うという話を聞いた。 しかし、このオプションは buggy だという話も同時に聞いたので、今回は確認していない。

3. Apple バージョン GCC 専用オプションの問題点

Apple バージョンの GCC 3.3ソースコードを読むうちに、VeriTest 社が計測に用いた -fast オプションがどういう効果をもたらすか分かった。

ただし管理人が読んでいる筆者が読んでいるソースコードは Build1402 で、VeriTest 社が使ったのは Build137 なので、該当部分がこの間に修正が加えられていたとしたら下の議論は半分無効。

-fast は Apple バージョンの GCC の専用オプションで、これを指定すると GCC ソースコード中の gcc3/gcc/toplev.c で変数 flat_fast に 1 がセットされ、gcc3/gcc/config/rs6000/rs6000.cの中で以下のように最適化フラグがセットされる。

static void
rs6000_init_builtins ()
{
  /* APPLE LOCAL begin -fast */
  if (flag_fast) 
  {
    flag_unroll_loops = 1;
    set_fast_math_flags (1);
    set_target_switch ("powerpc-gpopt");
    set_target_switch ("dynamic-no-pic");
    set_target_switch ("tune=970");
    set_target_switch ("cpu=970");
    set_target_switch ("powerpc64");
  }
  /* APPLE LOCAL end -fast */

VeriTest 社が CPU2000 に使ったコンパイラオプションは以下の表の通りだが、VeriTest 社のレポートと合わせて考えると -fast はアーキテクチャ(PowerPC970) と最適化レベル(-O3) を同時に指定し、それ加えて Relaxed IEEE math operation (-ffast-math)と Loop unrolling (-funroll-loops)を付加してしまう。

浮動小数点演算は丸め誤差が生じるため、数学的な意味が等しい式変形を行った場合でも結果が一致しない場合がある(例えば (A + B) * C == A * C + B * C が成立しないことがある)。 -ffast-math は正確さが多少損なわれてもいいので、高速化を行うオプション。

ループアンローリングは、、、大雑把にいって C 言語の for 文のループの中身を数回づつ展開して、ループの分岐数を減らす最適化。
PoewrPC G5 Pentium4
CXXOPTIMIZE = -fast
COPTIMIZE = -fast
FOPTIMIZE = -O3 -Wc,-fastf
CXXOPTIMIZE = -O3 -march=pentium4 -mfpmath=sse
COPTIMIZE = -O3 -march=pentium4 -mfpmath=sse
FOPTIMIZE = -O3 -Wc,-march=pentium4,-mfpmath=sse

VeriTest 社のレポートからは、-ffast-math が付くことは予想されたのだが、-funroll-loops がつくことは分からない。 性能に与える影響は -funroll-loops の方が大きい。

この 2 つのオプションがない場合、SPEC CPU2000 の性能がどの程度 低下するかは測定可能。
という分けで調査中。

4. ONESTEP=yes オプションの問題

最後に VeriTest 社が ONESTEP=yes オプションを Apple Power Mac G5 の configuration ファイルにのみ入れている点。

SPEC CPU の各ベンチマークは複数のファイルから構成されるものが多い。
この場合、デフォルトでは分割コンパイル→リンクの 2 つのフェースを踏む。 ONESTEP=yes オプションを有効にすると、すべてのファイルがコンパイラに同時に渡されることになる。 この後、コンパイラが 1 つ 1つのソースファイルを別々にコンパイルしてリンクしてもよいし、複数のソースファイルを合成してベンチマーク全体を巨大な 1 つのソースファイルに変換してからコンパイルを行ってよい。

この場合、高度な最適化が有効になる。 例えば、以下のような test1.c と test2.c があったとする。

/* test1.c */

#include <stdio.h>
extern int foo(int x, int y);
int main(int argc, char** argv)
{
  int RESULT = 0;

  int i=0 ;
  for( i=0 ; i<100 ; i++){
    RESULT += foo( i, 100 - i ); 
  }

  printf("RESULT: %d\n", RESULT);
  return RESULT ;
}
  
/* test2.c */

int foo(int x, int y) {  
  return (x * y);
}

Intel C++ Compiler(ICC) v7.0 は、-Qipo オプションを付けてコンパイルすると(icl -Qipo -O3 test1.c test2.c)と、RESULT += foo( i, 100 - i)RESULT += i * (100 - i) に置き換える method inlining 最適化を行う。

i386 をターゲットとした通常の GCC 3.3 でも、mainfoo が同一モジュール(同一の C ファイル)にあれば、-finline-functions を指定すると(-O3 で自動的に有効になる) method inlining を行うが、モジュールが 2 つに分かれている場合には最適化しない。

このようにモジュールを越えた最適化を持っているコンパイラに取って ONESTEP=yes は有効であるが、最適化がモジュールを越えないコンパイラは ONESTEP=yes はあってもなくても同じである。

i386 版 GCC 3.3 はモジュールを跨ぐような最適化を行わないようなので、ONESTEP=yes を指定しないのは妥当である。 では Power Mac G5 の設定中に ONESTEP=yes を付けたのは何故なのだろうか? アクセサリーとして入れたのか、あるいは Apple バージョンの GCC 3.3 はオリジナルとは異なる最適化が入っているのか?
実機があれば一発で分かるのだが、GCC のソースコードを眺めるだけでは容易に判断がつかない。

本当は上のプログラムの動作は決定的なものなので、コンパイラがループの中を前計算して、166650 という答を出すよう最適化もよい。

6/28 (土)

クーラーの水漏れ

寮のクーラーから水がポタポタと落ちて止まらない。
雨の降るとその次の日ぐらいから数日間の間は羽根の部分から水がこぼれるようになる。

どうも昨年の夏の終わり来た台風以来おかしくなったように思える。 ただ冬の間 暖房にしている時は水漏れは起きず、夏になって冷房にしてから起きるようになったので、排気管のどこかに穴が空いていると思われる。

修理に人を呼ぶ必要があるので半日かけて荷物の移動と掃除をする。 それで一日が潰れる。


6/27 (金)

[CPU] Intel v.s. Microprocessor Report (になると面白い)

Intel C++/Fortran Compiler がやり玉に挙がっているようだ。 CNetのこの記事 によると、VeriTest 社が行った PowerPC G5 と Pentium4 の SPEC CPU2000 の測定に対して、Microprocessor Report 誌の Peter Glaskowsky 氏が以下のように述べているそうだ(下線は管理人)。

Peter Glaskowsky, editor-in-chief of Microprocessor Report, said a company could get better benchmark results using a Dell machine with Intel and Microsoft compilers than with a Linux machine and GCC compiler. However, he also noted that Intel's chips perform disproportionately well on SPEC's tests because Intel has optimized its compiler for such tests.

Glaskowsky 氏は、単に Intel は SPEC CPU をターゲットにしたコンパイラの開発を行っていると言いたいのか、ICC/IFC が SPEC CPU2000 が 2.1.1 則、2.1.2 則で禁止している最適化を行っていると言っているのかは定かではない。
後者だと完全に Intel に喧嘩を売っているし、前者でも Intel の横っ面を叩いたことになる。

実際、ICC が吐くアセンブラコードを見ても、私の周りにいる人の実感でも ICC/IFC は市販のコンパイラとしてはかなり高速だと感じるので Glaskowsky 氏の発言は妙に感じるが、何にせよ Intel が Microprocessor Report に噛みつくようだと面白いのになぁ。

P.S.

本当のところ、SPEC CPU2000 上げるために一番コンパイラを頑張っているのは富士通だと思われる。
SPARC64 V はだいたい同時期に出た IBM POWER4 と比較するとチップ的には随分貧相だ。
しかし、同一クロック帯で比べると FP2000 は POWER4 に勝ってしまう(IBM eServer pSeries 690 (POWER4 1300MHz) で1,266、pSeries 650 (POWER4+ 1450MHz) で1,295が、富士通 PRIMEPOWER900 で1,322)。
同一のマシンなのにコンパイラを変え、オプションを変えながら執念深く 1,205 →1,241 → 1,228 → 1,322 と peak 値を上げていっている。base 値ははほとんど上がっていないけど。


6/26 (木)

[Java][MyWeb] JavaVM モニタリングツール jvmstat のページを作成

6月16日に触れた jvmstat のページをここに書きはじめる。
jvmstat は SUN Hotspot VM 1.4.1 以降に導入された instrumentation と呼ばれる機構を介してモニタ情報のやりとりを行う。 Instrumentation はローカルマシン上の JavaVM 同士が共有メモリ経由でデータをやりとりする仕様を決めたもの。
実際には sun.misc.Perf クラスを API として使うようだが詳細は不明。

SUN Hotspot VM 1.4.1 では -XX:+UsePerfData オプションを追加で指定した JavaVM は、instrumentation に自分のモニタリング情報を書き込み始める。 jvmstat のコマンド群は同じ instrumentation 機構を利用して、監視対象の JavaVM の内容を読み取り適当な形式で表示する。 ここページでは jvmstat の中のコマンドの一つ visualgc を中心に紹介した。

Instrumentation はローカルホスト内の情報しか受け取れないが、jvmstat のプログラムの一つ perfagent を用いると、インターネットで繋がった場所であればどこからでも性能をモニタできるようになる。 これは perfagent は指定の TCP ポートで待ち受け、perfagent 自身が読みとった情報をリモートホストに長州のである。 jvmstat 系コマンドはみな @hostname:port の形式に対応している。

この機能を使った時の負荷だが、監視対象の JavaVM に -XX:+UsePerfData を付けるだけであれば性能低下は 1% に満たないようだ。 しかし jvmstat の中でも visalgc の表示は重く、Windows NT のタスクモニタで視認したところ CPU 使用率を数% 〜 10% 程度占有してしまうぐらいだ。
本当に監視が必要な場合は、(モニタJavaVM) ← (perfagent) ← (visualgc) の形にして、visualgc は別マシン上で実行したほうがよいかもしれない。


6/25 (水)

[CPU][Bench] Apple PowerMac G5 の SPEC CPU2000 スコアが公開されていた

昨日 Apple が IBM PowerPC 970 搭載のPower Mac G5を発表したが、意外なことに SPEC CPU2000 スコアを公開していた。 計測はVeriTest社が行い、リポートをここにまとめている。

使用したコンパイラは C/C++ コンパイラは GCC 3.3、FORTRAN コンパイラは NAGWare Fortran95 Compiler 4.2 を使用。
結果は int_base2000 が 800、fp_base2000 が 840

今回の VeriTest 社のレポートで、Power Mac G5 の計測と一緒に DELL の Dimension 8300 (Pentium4 3.0GHz x1)、Precision 650 (Xeonn 3.06GHz x2) の計測を行い比較を行っているが、色々なところで物議を醸し出しているようだ。

追記:6/28

NAGWare Fortran95 Compiler はどうも Fotran-To-C のコンパイラ-コンパイラで、今回の計測ではバックエンドとして GCC を使っているようだ。


6/23 (月)

研究室 OB の O.A. 氏が川崎に

最近、古い友人や出身研究室の OB と会う機会がとみに増えているが、もはや再び会うこともあるまいと思われた O.A.氏と再会する。 静岡県の某所に勤務だったが、川崎の某所に転勤になったそうな。

近山研 OB の Y 氏、田中研 OB の A 氏と共に昼の会食に挑む。
静岡でやっていたストレージ関係の仕事がぽしゃって、いまは川崎で企画の仕事をしているそうな。
O.A.氏の頭には白髪が増え苦労を忍ばせる。

仕事の話以外では、A 氏は O.A. 氏とゲーム話に華を咲かせている。 管理人も Y 氏もまったくついていけず。


6/22 (日)

疲労困憊

今日は疲れたので一日寝て過ごす、、、、、 って今週もかよ。


6/21 (土)

[Work] デバッグマラソンは終わらないが、燃え尽きた

昇る朝日を見ながら「『太陽』のばっかやろー」と叫ぶ。

昨日のうちに障害の原因を 3 つ見つけた。
1つは×××研究所が、残る2つは『太陽が』エンバグしたもの。

後者のうち1つは****アルゴリズムと周辺部分の実装が噛み合わないために起こる設計ミス。 こいつはなんとか回避可能。
もう1つは同期処理の要になっているタスクキューの設計ミス。 Non blocking task stealing をやるために採用した並列処理アルゴリズムへの理解不足からくる深刻な設計ミスだ。 現状、パフォーマンスを落とさずにバグを回避するスマートな解決方法が思いつかない。 タスクキューの設計から変えると工数が大きすぎる。

沈む太陽を見ながら修正をあきらめた。


6/20 (金)

[Work] デバッグマラソンは終わらない

6月14日で完全に取れたと思った某プロダクツに、金曜日にまたまたバグが見つかった。
×××研究所の連中が言っていた "we are still seeing a failure" と言うのは、このバグのようだ。

コードを再レビューしながらデバッグをしていくうちに、怪しい箇所がどんどん見つかる。
夜の2時を回るが部屋には帰れない。 泣きたくなる。


6/19 (木)

愛媛の友人が上京中

小学3年からの友人で現在は愛媛在住の Takeda 氏が東京に出張。
昨日から3日間の研修の最中らしい。 時間を作って都内に行き会ってくる。

Takeda 氏は警察で事務職をしているが、国から依託金を扱うために研修を受ける必要があるらしい。 九段下の某所でキャリア組みから講習を受けるという辛気な研修におかんむりな模様。

Takeda 氏は管理人の古い友人では唯一の妻帯者。 しかも秋頃には子供が産まれる。
警察という特殊な世界の世間話や、所帯持ちの苦労話をいろいろと聞かされる。

半蔵門線の半蔵門駅で別れて、そのまま田園都市線で武蔵溝の口 → 南武線 某駅で下車。
会社に戻ってみると、、、、、 某プロダクツに新しいバグが見つかっていた。


6/16 (水)

新横浜ラーメン博物館は…

出張帰りに久しぶりに新横浜ラーメン博物館(以下、ラー博)に寄ると横浜ラーメンの店「六角」が閉まっていた。
もともと横浜に本店があるラーメン店だから、ラー博の中でも客の少ない店だったので退店やむなしという感じだ。
ただ、昨年の終わりに京都ラーメンの店「新福菜館」が退店して、二店分の空き地ができたのができている。 1回300円の入場料を払っているのだから、早く新しい店を入れるように切に願う。

管理人としてはつけ麺の店か長崎「ちゃんぽん」の店が入ればいいと思うのだが、、、。


6/16 (月)

[java] SUN の JavaVM のヒープ & GC のモニタリングツールが登場

6/11 からサンフランシスコで開かれた JavaOne カンファレンスで、SUN が開発中のソフトウェアを COOL STUFF という Web 上で先行公開していくことを発表。
COOL STUFF プログラムの中で注目すべきなのは jvmstat と呼ばれる Java ランタイムのモニタリングツール。 このツールは SUN の J2SE 1.4.1 以降に含まれる JavaVM を対象にして、主にヒープメモリと GC の挙動をリアルタイムに監視することができる。

こういうツールは Java システムのチューニングを考えていく上で非常に重要だ。
BEA の JRockit の場合 Management Console があったし、IBM VM にも同様の機構があった(はず)。 Java の本気の SUN にこのような機能がなくて不便に思っていた人は多いはず。

ちょっと時間がないので、週末あたりに使い方をまとめてみるつもり。


6/15 (日)

疲労困憊

今日は疲れたので一日寝て過ごす。


6/14 (土)

[Work] デバッグマラソン完走?

5月21日から某プロダクツの(他人の書いた部分の)バグに挑み続けていたがついに原因を特定。
途中 別の仕事も並行に実行していたのでデバッグに割いた時間は 1/3 程度だが、それでもバグ発見までに 3 週間も掛かったのは初めて。 GC のバグは最適化コンパイラのバグを取るよりも難しい。

昨日の 20時頃に、今までタイミング依存の障害だと信じていたものが、オプションの指定の仕方によって決定的に発症するバグだと気く。 そこからプログラムのあちらこちらにトラップを仕掛けてこのプログラムルーチンの***オブジェクトの扱いに問題があることに気づく。 これがバグの原因。
そこからソースコード上のバグのある箇所を特定して修正を掛ける頃には日付が変わり 14時を回っていた。

同じプログラムルーチンに、昨年の11月頃に性能低下バグが発生して、その時も***オブジェクトの扱いがおかしいのが原因だった。 プログラムを書いた×××研究所の連中は *** 部分の実装をちゃんと理解していないのではないかと疑われる。
ついでに愚痴ると、彼らの書いたコードを上から下まで眺めたがプログラムの非常に重要な箇所で下のコードのように自動変数を初期化条件なしで使い、条件分岐の方向が運任せに委ねている部分を発見した。 特殊な条件以外では (A) を通っても (B) を通っても結果が同じになるから発見されなかったようだ。 こういうコードを書いてしまうのはどうかと思われる。

bool flag; // 自動変数。意味的にはデフォルト false

// 40 行ぐらい条件セットが続く。
// 条件によっては flag は未設定のまま処理が進む。

if (flag) {
  // (A) フラグがセットされた場合の処理
} else {
  // (B) フラグがセットされない場合の処理
}

と言ってもここまでデバッグが伸びてしまったのは、当初 見当違いな部分を見ていたから。 最初、その症状からマルチスレッド動作部の同期処理に絡むバグだと信じていたので、逐次部分にバグがあるという思考に向かなかった。
もっとも同期処理にバグがあったのは確かで、今回のデバッグ中に目的の症状とは直接関係ない潜在的なバグが 3 箇所も見つかってしまった。。。


6/13 (金)

[Tips] インストールメモとか

前々から問題になっていたトラブルを一挙解決。

Pentium4 系 CPU Windows への Oracle DB のインストール
Windows XP を載せた Xeon マシンに Oracle 8i DB を インストールしようとするが、 インストーラーが途中でこけてしまう。
1時間ぐらい悩むが KROWN検索 の検索結果、 Pentium4搭載マシンで、Oracle Universal Installerが起動しないを見つける。
インストーラに使われている Symantec JavaVM の JIT コンパイラが Pentium4 プロセッサに対応していないのが問題のようだ。

回避方法は以下の通り
  1. インストールに関連するファイルを HDD にコピーし、 その中から symcjit.dll ファイルを削除する。 その後、.\install\win32\setup.exeを実行してインストール。
  2. インストール終了後 Oracle のインストールされたディレクトリから 再度 symcjit.dll を検索し、 発見した symcjit.dll を削除する。
WinDVR3 の IEPG 操作の不具合
5/25に購入した メルコの PC-MV5/U2には、 InterVideo の WinDVR3 が付属していた。
このソフトは Microsoft Internet Explorer に依存しているようで、 デフォルトの Web ブラウザを IE 以外(Netscape Navigator 4.7) の時に 番組を「スケジュール追加」すると 番組登録用のダイアログが固まって ダイアログが閉じられなくなるようだ。
デフォルトブラウザを変更したところ とりあえず直る。
エクスプローラのファイル操作がだんだん遅くなる
Windows98 Second Edition と Windows NT 4.0 で エクスプローラを使ったファイル操作を続けていると、 ある時点からファイル操作のレスポンスが極端に悪くなり、 ファイルの移動・削除、名前の変更を行うと 30 秒程度停止する 現象に見まわられる。

ナレッジベースを検索すると以下のようなものを見つけた。

ありがとう Microsoft。本当に役に立つアドバイスだよ。
部屋のエアコンが水漏れ
寮の部屋に備え付けのエアコンが故障。 クーラーを掛けるとポタポタと水漏れが起きるようになった。
パッチ待ち。
コメントを書き込む
[rjfk] 2005-01-14 16:16:50
多謝!おかげさまでora8iインストールできました。

6/11 (水)

UML & デザインパターン

管理人が所属する組織は「UML を使えと」とシュピレヒコールばかりが上がっている。
その関係でオージス総研のUML 技術者認定のブロンズレベルを受ける(受けさせられる)。 認定試験と言っても30問中24問に正解すればいいだけの Web ベースの試験。 とりあえずパスする。

UML は机上では勉強しているが 現実に仕事で使うことはない。 UML の図を書くといっても PowerPoint や Corel Draw で書いているぐらい。 まじめに UML を使うのあれば設計からコーディングまでを Rational Rose のようなツールを使ってやるべきなのであろうが、そんな金はないし生産性があがるかどうかも不明。
まぁ、上の人が UML で行くと決めたからには、みなさん UML のドキュメントをがりがり書くようになるのでしょう。

P.S.

Enterprise Architect というのが安いようだ。 Rose の代わりになるのかしら?

追記:6/14

同僚の人と話をしていたが、Microsoft は UML にまったく興味を示していない。
Microsoft 製品で UML を扱うのは Visio 程度で、Visual Studio を中心とした開発ツールは UML とは無縁。 Microsoft なりの取捨選択の結果なのだろうが、Microsoft の次の一手が UML or Agail/XP などのソフトウェア工学界にどようような影響をあたえるかは注目だ。


6/10 (火)

社販制度いろいろ

6月7日に IBM に行った Tukamoto 氏 会った時に「IBMファミリー販売」を教えてもらう。
IBM は社員販売を「友人やお知り合い」に広げて、社友用のオンラインショップを提供しているそうな。 早速アクセスしてみると 個人向けのオンラインショップよりも安い価格での購入ができる。 在庫棚卸 的なクリアランスセールにも参加できるようだ。

管理人は Think Pad X31 が欲しいのだが、こちらの希望の構成は表のオンラインショップのキャンペーン価格だと 23 万円台。 社友価格だとそこから 2万円強安なる。 価格.comの最安値と比べると 1万円高いが、希望の構成で出してくれることや通信販売上ショップ特有のトラブルがない点を考えるとお得。

ボーナスがちゃんと出たら買おう。 出たらね。。。


6/9 (月)

[Java] On-the-fly runtime method tracing for Java applications

6月3日の日記に書いた Michael McPhail 氏のon-the-fly method tracer(以下、method tracer) をうまく動かすことができたのでメモを残しておく。

method tracer の特徴は、既存の Java バイトコードは実行時に書き換え、メソッドコール情報を出力するコードを挿入すること。 バイトコードの書き換えは専用のクラスローダー(org.jmonde.debug.TraceClassLoader) が行うので、変換後のコードはメモリ上に展開されるのみで残骸を残さない。
method tracer 自身も Java プログラムで JavaVM から呼び込まれる。 そのためクラスを読み込むのに 2 つのサーチパスが存在する。

  1. JavaVM のシステムクラスローダが読み込めるパス (環境変数 CLASSPATH などで指定)
  2. TraceClassLoader が読み込めるパス

method tracer によってトレースしたいクラスファイルは、2. のパス内にありながら 1. のパスからは外れた場所に置く必要がある。 これは、もし 1. のパス内にあるとデフォルトのクラスローダーが優先されてしまい、メソッドトレースコードを付加できないためである。 同様にランタイムに密着するブーストラップクラスパス内のクラスファイルは、method tracer によってトレースできない。

1. ファイルのダウンロード
On-the-fly method tracerにある、 trace.jar BCEL.jar bsh-1.1alpha5.jar jakarta-regexp-1.2.jar の 4 つの jar ファイルをダウンロード。
2. CLASSPATH の設定
環境変数 CLASSPATH に上の 4 つの jar ファイルのパスを通す。
C Shell の場合には、以下のように設定する。
setenv JAVA_LIB  (jar ファイルを置いたパス)
setenv CLASSPATH ${CLASSPATH}:$(JAVA_LIB)/trace.jar:$(JAVA_LIB)/BCEL.jar:$(JAVA_LIB)/bsh-1.1alpha5.jar:$(JAVA_LIB)/jakarta-regexp-1.2.jar
3. 実行コマンドを書き換えて実行
実行したいプログラムが以下のような形式をとるとすると、
> java JavaOptions -classpath "original class path" MainClass ArgumentsList
以下のコマンドによって method trace が起動する。
> java JavaOptions -Xverify:none org.jmonde.debug.Trace -classpath "original class path" MainClass ArgumentsList
-Xverify はバイトコードのベリファイアルーチンへの指示だが、 JavaVM SUN JDK1.4.x 系ではベリファイアをオフにしないと 途中でベリファイアエラーが出て停止してしまうようだ(原因不明)。

6/8 (日)

[Movie] MATRIX RELOADED へ行く

昨日は研究室に泊まり、昼ごろ前に起き出して Iizuka 氏と共に上野セントラルで MATRIX RELOADED を見に行く。
13:15 の部を鑑賞。 列は出来ていたが立ち見がでるほどの混雑はなかった。

映像はひたすら豪華だが、ストーリー・シーンに前作にあった緊張感がなくなってしまった(まぁ、主人公ネオが マッハ 2.8 で空を飛ぶ超人だしね)。 ストーリーの大筋は過去の SF やマンガで散々やりつくされた構図。 前作のようなインパクトを求めると期待を裏切られることになりそう。

エンドクレジットの途中で帰った客が多いが、クレジット後に REVOLUTION の予告がある。 雨の中 ネオとエージェント・スミスが二人(スミスの他の分身は2列に整列してつっ立ている)というまるで少年マンガのように映像だが。。。

映画鑑賞後、上野・秋葉原を巡って ふにゅふにゅを購入。


6/7 (土)

[Movie] 今日から MATRIX RELOADED が公開

されるので、初回公演を待つ徹夜の列に加わろうと画策していたが、前日の作業の疲れから帰宅したらすぐダウン。 気づいたら昼過ぎ。 とりあえず上野まで出てみるが、人が行列をなしている。

今日は鑑賞をあきらめて、洋服を購入して、OB が来ていることが分かっている研究室に遊びに行く。
IBM に行った tsuka 氏、生産研の池田研究室に嫁いだ onoshin 氏、IRC に行った takita 氏、日立に行った iizuka 氏 mune 氏、NIC の ide 氏がいる。

OB が集まった理由の一つは @mtl.t.u-tokyo.ac.jp をメールサーバー 兼 Web サーバーをやっていた SuperSPARC 110MHz (x1) マシンを交換すること。 takita 氏、mune 氏、iizuka 氏によって UltraSPARC II 336MHz (x4) (Enterprise3000)への置換が作業が粛々と行われる。
Sun Enterprise 3000 はかつて研究室のメイン計算サーバーだったが、メールサーバーへ格下げだ。
時の流れは速いものだ…

作業が終了すると11時。
ホワイト餃子が 60 個焼かれ、食卓に供される。

Sound Horizon の『Pico Magic』

出掛けに注文していた Sound Horizen『Pico Magic』が届いたのを確認。 帰ったら聞こう。


6/6 (金)

[Work] データセンター内での作業 - 2日目 -

今日もデータセンター内で構築中のシステム。
昨日、RH Linux AS 2.1 のインストールまで行った3台のサーバーに某社の DB と Web アプリケーションサーバをインストールする。 と言ってもインストール経験のないアプリなので事業部の SI の人に来てもらってインストールしてもらい、それを横から見てノウハウの吸収に励む。

だがマニュアル通りやっているはずなのにインストール作業がうまく進まない。
某 DB も某 Web AS も素直に起動してくれず、/etc/sysctrl.conf を書き直したりと試行錯誤が続く。 結局、午前 10 時からぶっ通し続けて、すべての行程が終了したのは午後8時過ぎだった。

いちおう DB & Web AS はインストールできターゲットとなるアプリケーションが起動するところまで行ったが、今日一日のトラブルを思い出して弊社製品群のユーザービリティの低さを見せつけられ憂鬱な気分になってしまった。


6/5 (木)

[Tips] データセンター内での作業

今日は一日中、冷房がガンガンに効いたデータセンター内で、サーバーシステムの組み立てと OS のインストール作業を行う。 以下はトラブルメモ。

  1. Red Hat Enterprise Linux AS 2.1 は、Adaptec の I2O RAID カード(Adaptec AIC-7899W) に対応していない。
    インストールの最中にドライバーディスクを入れたフロッピーディスクを使いたい場合には、インストールCD で起動した後に出てくるコマンドプロンプトに
    linux noprobe dd
    
    と打つこと。

  2. RH Linux AS 2.1 は Intel PRO/1000MT 相当のネットワークカードにも対応していない。 Intel が提供している PRO/1000 の base ドライバーをダウンロードし(例えば e1000-5.0.43.tar.gz)、これを以下のようにインストールする。
    1. 適当なディレクトリでソースを展開
    > tar xzvf e1000-5.0.43.tar.gz
    > cd e1000-5.0.43/src/
    
    2. ビルド
    > make
    > su
    # make install
    
    3. ドライバモジュールの存在を確認
    /usr/modules/<カーネルバージョン>/kernel/drivers/net/e1000.o
    
    4. モジュールのインストール
    # insmod e1000
    

  3. Windows2000 / XP も Intel PRO/1000MT 相当のネットワークカード、DELL PERC 4/SC RAID コントローラ(LSI Logic の MegaRAID 相当品)もデフォルトでは対応していない。
    事前にドライバディスクを作成する必要がある。

データセンターでの作業は明日も続く。
明日は上着を忘れずに持っていこう。


6/3 (火)

[Java] Java でリアルタイムにアスペクト指向

昔、既存の Java プログラムにログ出力ルーチンやベリファイルーチンを weaving できないかと調査をしていてアスペクト指向プログラミング(Aspect-Oriented Programming; AOP)を見つけたことがある。 自分の考えそうなことは、すでに誰かが考案しているものだと感心した。

Java でアスペクト指向をやろうとすると AspectJが一番メジャーだ。 ただし AspectJ は Java のソースコードが手元にある必要があり、すでに翻訳された Java バイトコードを「切断」することはできなかった。

その後、JMangler を発見。 AsepctJ と比べると AOP 的に洗練されていないが、クラスローダーレベルでバイトコードの変換を行うことで、既存コードへの「切断」、「挿入」を可能にしている。 JMangler よりさらに機能は限定されるが org.jmonde.debug.Trace も動的なバイトコードの変換を行うクラスローダーを置き換えによって、特定のメソッドにデバッグコードを埋め込む機能をつけている。

JMangler と org.jmonde.debug.Trace をダウロードしていろいろ実験してみるが結構いいかんじ。 とりあえず org.jmonde.debug.Trace を修正して、こちらが意図しているデバッグ機能を実現できるか試してみるつもり。

参考

追記:6/7

AspectJ 1.10J がリリースされたみたい。


6/1 (日)

池之端の「龍虎殿」へ

都内を移動中に、某 H 社に就職した研究室 OB の tbaba 氏より電話が掛かる。
二人で(出身)研究室に寄って学生を連れ出して、飯を食べに行くことになる。 すでに H 社に買われた D3 を含む 4 人が連れる。

6人でぞろぞろ上野公園の不忍池そばの龍虎殿に行く。 3500円の食べ放題コースをゆるゆると食べながら、他愛ない世間話が続く。 話した内容を忘れないようにここに書き留めておく。

  • 田中先生が退官されるのでここには書けないような人事問題の処理が行われた模様。
    そのほか人事的な問題があって、人事的に難しい。
  • 坂井研は dependable computing をやるが中身は不明。 研究の方向性は定まらない。
  • 今年の H 社の求人活動は もの凄かった。
    F から始まる某企業は景気が悪いので、誰も人を取れない。

不景気な内容だ…


先月の日記(2003年05月) 今月の日記(2003年06月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3 | 4
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita


Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp