LiuxCNC (EMC2) 制御用PCの選定

曲がりなりにも数十マイクロ秒単位の信号を扱うような作業をさせるため,残念ながらどんなPCでも良いわけではありません.
ところが最新のハイスペックなら必ず使えるかというと,そうでもないところが難しいところ.

・そもそも「リアルタイム」ってなんだ
一般社会ではリアルタイムとは,「事件は現場で起こっているんだ!」というときに,その場で解決するような(?)ことをさすと考えられます.

コンピューティングでは(でも),計算時間が必要なため,問題の発生と同時に結果を出すことはまず不可能であり,
代わりに「あらかじめ決められた時間内に,与えられた命令をこなすこと」と定義されます.
「この時間内に終えられなかったとき,その仕事を諦めて違うことをやっても良い」か,
「一度でも時間内に計算完了しないとアウト」なのか,によってさらに細かく分類されるようですが,
正直,これ以上正確で詳しい説明が必要な方はWikipediaでも行ったほうが有意義なんではないかと思われます.

この説明だと,「あらかじめ決められた時間」がものすごく長くても,定義上はOKです.
汎用Windowsでリアルタイムっぽいことを実現する際には制限時間を長くとることがあります.
ただし,そうすると時間内に処理できる仕事が恐ろしく減ってしまいますが..

加工制御では,加工中に一度でもパルスが間に合わないと,工具の位置がずれたりステッピングモータが脱調するなど,
その加工全体が無駄になってしまう重大な結果が予想されるため,高いリアルタイム性が求められ,
EMC2/LinuxCNCではリアルタイム版のOS(Linuxcnc.org配布版ではリアルタイム改造版Ubuntu Linux)
の上で動作するようになっています.


・パーソナルコンピュータの一般的な意味での処理能力とリアルタイム能力
これは,「うさぎとかめ」に例えられるでしょう.

よく,パソコン雑誌の特集で最新マシンのベンチマークが行われますね.
これらのベンチマークのほとんどは,「数秒以上の(比較的)長い時間」に,どれだけの仕事ができるか,
あるいは計算結果が出るのに秒単位の時間がかかる演算を行わせ競うものです.
得られる結果は,かかった時間に行った計算の積分値であり,
極論すれば「速ければ途中で昼寝をしても構わない」バースト値でも良いことになります.
この性能は,特定のパーツ,CPUやGPUなど要素部品のレベルで簡単にアップします.
一般向けに売られているほとんどのパーツは主にこちらの性能を重視して設計されています.
(結局ベンチマークでしか評価してもらえませんからね)

対して,リアルタイム処理に求められるのは,より短い間隔に,確実に1歩進む能力ですが,
この性能は一部のLSIが返事しないだけで低下してしまうため,
CPUだけでなく,チップセット,その下にぶら下がるオンボード部品に至るまでの,総合性能が要求されます.


・片っ端からPCにLiveCDを使って試してみる
後で,ある程度良い性能が期待されるPCは紹介すますが,
まずは,自分の周りにある触っても良い全てのパソコンで試してみましょう.
LinuxCNC.orgで配布されているCDイメージは,CDに焼くと起動可能なUbuntu Linux のLiveCDになります.
単にインストールするだけでなく,今あるHDDの中身をいじらずに実際に動作させて試してみることができますので,
手持ちPCのリアルタイム性能を片っ端から調べてみると,何らかの傾向が見えてくるかもしれません.
その際,古いPCではグラフィックモードを低スペック対応に変更しないと画面が出ない場合があります.

さて,Shimalithも研究室じゅうのPCで試してみました.
大抵はcore2よりもquad,というように正常進化したものは多少良くなっていく,とか,
特定のマザーボードで数十秒に一度致命的に返事が遅れるものもある,とか,
グラフィックボードの付け外しで早くなることも遅くなることもある,といったことを経験しました.
そして,その中では最も応答の良かったのが「DELL DImension 8250」Pentium4 2.40GHz,黒歴史のRDRAM仕様でした.

また,各地のユーザのテスト結果が掲載されているwikiでは,結果にばらつきのあるCPUがある一方で,
安定して突出しているもの(Xeonなど)や,特定の型番だけだが一般スペックから考えると異様に早いもの(Atom)があることが分かります.

これらの情報から,「組み込み用途やサーバ使用が見込まれるものは強い?」との仮説を立ててみました.
RDRAMを使っていた頃のボードはメモリの返事の速度が厳密に決められていたり,サーバ対応できるほどのクオリティでした.
サーバとして利用するときはレスポンスの早さを重視し,返事がこないと困る仕事もさせるため,
リアルタイム性をある程度意識して設計されていることが考えられます.

そうすると,「Atomはどれもはやいのではないか」という予想が出てきます.
Atomのマザーは1種だけ結果がupされていて,すさまじいのはその機種だけなのか,Atom全体なのかが問題となります.
Atomといえば,主流はネットブックであり,安かろう悪かろうのイメージがつきまといます.
しかしながら,Atomの出自を考えると,
低価格から廉価PCに使われるようになってしまったが,もともとは「組み込み機器向け」として開発されたもので,
組み込みといえば,PDAやナビゲーションなど,サーバ以上にリアルタイムOSを使うもので,ならばそのつもりで設計されているだろう,と.
ただこのままwikiに出ている機種だけを買ってしまっては他力本願なので,
ある程度のリスクをとって,Intel D945GCLF2 のほか Foxconn D52S と JETWAY ATOM-GM1 を調達してみました.

結果はどちらも4桁台の好成績でした.Foxconn D52Sのほうがわずかに良好.
Intel  D945GCLF2 は手元に記録したデータが残っていて,
 アイドル時 5347ns,ある程度負荷のかかるopenGLやHypertorusスクリーンセーバで7-9000nsの間,
一番悪くなったときはfiberlampスクリーンセーバ時で12564nsの最大ジッタが観測されました.
少なくとも毎秒3万パルス,設定を詰め,加工中に余計なアプリが動作しないようにし,
パルス維持時間をモータドライバに合わせてチューニングすれば40000pps台も可能でしょう.
これは,EMC2の設計が50kppsまでとしていることを考えると驚異的な値だと思います.
なお,D945GCLF2はDDR2メモリが533MHzまでしか認識しないが,その分CASレイテンシが小さくできることが多く,
BIOSを適切にいじってレイテンシを小さくできれば多少向上の余地があるようにみえます.
あと少しが欲しければレイテンシの小ささが保証されているメモリを使う価値があるかも.
(ただし,マザーの素材の良さを凌駕するほどではない).

Atomは現代の他CPUと比べれば多少非力であるため,デュアルコア版のほうが余裕があって良いでしょう.
Hyper-threadingは中で何をしているのか分からず,致命的な遅れを呼んでもらっても困るので切った方が良いでしょうが,
実験した範囲では特に差は出ませんでした.

いずれにせよ,2万円以内で非常に良い性能のPCが得られます.

あえて言わせてもらおう,Atomこそ最強だと.

なお,Mini-ITXマザーが多く,PCIスロットは1つしかないことがほとんどであるので,
パラレルポートが3ポート必要な場合,2ポート増設タイプのカードを探してくる必要があります.


追記
CEATEC 2011 にIntelブースがあったので突撃してきた.
Atomの直接の担当者ではなかったが,技術部の方と有意義なやりとりができた
Atomについて
・そもそも高いリアルタイム性を活かした,LinuxCNCのような利用をあまり想定してなかった?何に使ってんのときかれる
=>パラレルポートたたいてRealtime Linuxから機械制御するのですよー,どうかするとCore2やExtremeよりはやいんですよーとか話す

 今はDDR2時代のintel品と,foxconnのD525が入ってるの使ってますー.
・同シリーズの後継CPU製造の際には,リアルタイム性に限らず,前のものより性能が悪くなるような設計はしないです.
=>たぶんDDR3世代の新しいボードになって結果が急に悪くなったりはしなさそう?

・でも,パラレルポートとか,レガシーポートは2012の夏頃の製品からは無くなるよ
=> !?ぐあ   組み込みとか試作にはレガシーポート便利なのにー
   …今のうちに調達しておきましょうかね,,(1つストック確保してあるケド..)
Comments