Time::HiRes で取得できる値は CPU によって異なる

バッド・ノウハウですが、何度も記事に書いている Opteron サーバですが、かなり不具合でまくりで精神力も体力も力尽きそうな訳ですが、一番はまったのは、Perl モジュールの Time::HiRes で取得できる値の精度が、Intel 系と AMD 系で異なるということでした。
 
ミリ秒の値、すなわち Time::HiRes::time() で取得できる値の「.」以下の値が

Intel 系(Pemtium 4 と Xeon で確認済み)は .99999
Opteron は.99
なのです!とあるベンダーが作ったシステムが Primary-key として TIme::HiRes を使っているのですが、Opteron マシンでは精度が違うために、重複Key が山のようにでてしまい、エラーでまくりでした・・・orz

昔は、マシンスペックの問題から、Sequence ID による Primary-key 生成は Sequence に対するロックの問題とかがあったのですが、このご時世、マシンもかなり高スペックなので、ちゃんと Sequence を使うべきですな。
 
とっくの昔にシステム作った会社は清算しているので、Hack して書き換えねば・・・orz
- スポンサーリンク -