web-dev-qa-db-ja.com

ルビー:無効なオペコード

(Xen上の)2つのVMで実行するよりもかなり複雑なアプリケーションがあります。両方のVMは、実行中のすべてのアプリケーションに対してまったく同じパッケージと構成でCentOS 6.2を実行します(異なるネットワークを除く)。 SELinuxは両方で無効になっています。

マシンAでは、アプリケーションは完全にビルドされます。マシンBでいくつかのテストを実行すると、次のようになります。

Ruby [2010]トラップ無効なオペコードip:7ff9d2944c30 sp:7fff9797e0f8 error:0 in ld-2.12.so [7ff9d2930000 + 20000]

マシンの違いを見つけるためにもう少し掘り下げて、マシンAには次のものがあります。

モデル名:6コアAMD Opteron(tm)プロセッサー2423 HE

およびマシンB:

モデル名:AMD Opteron(TM)プロセッサー6272

Grubでcpuid_mask_cpu=fam_10_rev_cを使用してマシンBを起動しようとしましたが、どちらも役に立ちませんでした。

したがって、これに対処する方法、または別の物理マシンでこのVMを実行するためにホスティングプロバイダーにアプローチする方法に関するアドバイスをいただければ幸いです。

4
adamo

どうやら、このエラーを引き起こす可能性のあるAVXサポートを備えたXenマシンのlibcに問題があります。 Chefからのこのトラブルチケット 、別のRubyアプリケーション、および volkの関連問題 )を参照してください。最後に、 このArchLinux thread 問題をさらに理解するのに役立ちました。

見よ、AMD Opteron(TM)プロセッサ6272 AVXをサポート2423 HEはサポートしない

つまり...別のプロセッサに移動するように求められるか、-disable-multi-Archを使用してlibcを再コンパイルすると、AVXが無視されます。 XenにAVXサポートを無視するように指示することもできると思いますが、その方法がわかりません。おそらく、私より賢い人が教えてくれます。

2
Nada