The BAQ/Data Acquisition/DAQ System/Performance
もどる
● CAMAC/VME制御などの性能
BBRL/NBBQで使う場合の情報です。
NBBQの場合、Normal Linuxなので不確定要素が多いですが、
CAMACやVMEにアクセスする部分は同程度と考えてください。 INT Latencyは割り込み応答にかかる時間です。下記のINT
LatencyはBBRLでRTLinuxを使用した場合で、 NBBQでNormal Linuxの場合は+20us以上だと考えて下さい。
以下の数値はIntel Pentium III 800MHz (2000年購入のPC)で、 PCI slotには他にEthernetのみ装着した場合のものです。
PCによってある程度数値が変動するようです。
2008年購入のPCでも計測してみました。Intel Celeron 1.6GHz, PCI+PCIe混在(ICH7)、Kernel 2.4.29
(RTLinux)。
スコアが前のものよりも悪くなっています。最近のPCはあらゆるものがPCIにぶらさがっているのがいけないのでしょうか??それともPemtiumの方が良いのでしょうか??おそらくチップセットにかなり依存しそうな感じですね。PCI-PCIブリッジを通ってるとかいないとか。
CC/NETの性能も測りました。ドライバはオリジナルのものです。まとめ読みを待つのにCPUのポーリングを使っているので、公式ドライバよりもオーバーヘッドが短くなっています。
- TOYO CC/NETでの性能です。
|
旧バージョン (Kernel 2.4) |
新バージョン (Kernel 2.6) |
CAMAC Single |
6.7 us |
|
5.4 us/ch |
|
CAMAC Block PIO |
3.6 us/ch |
+ 2.4 us |
2.6 us/ch |
+ 1.7 us |
CAMAC Block DMA |
1.2 us/ch |
+ 9.9 us |
1.2 us/ch |
+ 6.7 us |
INT Latency |
21.7 us |
|
30.0 us |
|
CAMAC SingleはBlock PIOを1回やるのと同義です。が、一回PIOしてから次のPIOを開始できるようになるまで少し時間がかかるようです。つまり、1回目のPIOは旧バージョンの場合5
usですが、直後にもう1度PIOをすると6.7usかかります。
- Kinetic 3922 + 2915 PCIでのCAMAC制御の性能です。
|
Pemtium III (2000年) |
Celeron (2008年) |
CAMAC No Transfer |
7.80 us |
|
9.2 us/ch |
|
CAMAC Single Read |
10.20 us/ch |
|
11.6 us/ch |
|
CAMAC Single Write |
9.90 us/ch |
|
11.1 us/ch |
|
CAMAC Block Read |
2.62 us/ch |
+ 8.00 us |
2.6 us/ch |
+ 8.4 us |
INT Latency |
4.5 us程度 (RTLinux) |
|
|
Block Readは正しくQを返すモジュールに使えます。
FERA、Memory、Phillipsなどの賢いモジュールはもちろん、
Kaizu、Hoshin、LeCroy、Ortecなどの一般的なモジュールでも使用することができます。
(Kaizu Octal TDCの場合、Q
select = Normalにして下さい)
- 東陽テクニカ CC/7700 + CC/PCIでのCAMAC制御の性能です。
|
Pemtium III (2000年) |
Celeron (2008年) |
CAMAC No Transfer |
4.06 us |
|
4.9 us |
|
CAMAC Single Read |
6.25 us/ch |
|
7.3 us |
|
CAMAC Single Write |
6.02 us/ch |
|
6.9 us |
|
CAMAC Quasi Block Read |
4.80 us/ch |
+ 1.56 us |
5.7 us/ch |
+ 1.6 us |
INT Latency |
4 us程度 |
|
|
|
Quasi Block Readは同じSub-Addressでデータをシーケンシャルに読みだせるFERA、Memory、Phillipsなどの賢いモジュールに使えます。
一般的なSub-Addressを変化させて読み出すモジュールには使えません。
- SBS Bit3 620 PCI-VMEでのVME制御の性能です。
Linux 2.4.29 |
いつぞや |
Celeron (2008年) |
VME 32bit Single Read |
2.40 us |
|
2.9 us |
|
VME 32bit Single Write |
1.99 us |
|
2.2 us |
|
VME 32bit DMA Read |
0.43 us/ch |
+ 1.93 us |
0.15 us/ch |
+ 34.6 us |
VME 32bit DMA Write |
? us |
|
|
|
この結果は岩佐さんが実測したものと同程度でした。(+-0.2us)
最近購入したAMD Athlon 1.6GHz Duzl でPCI
slotに Ethernet、SCSI、USB2が装着されていて、さらにPCI slotが64/32 bit hybrid のもので計測したら、 Single
Read = 3.31us/ch、Single Write = 2.36us/ch
でした。
PCの状況によって、1.3倍ぐらい変わってしまうようです。
DMAに関しては計測中です。とりあえず、32bit Readだけ取ってみました。 それなりに早いです。
前のDMA計測はちとアヤシイ気がしてきました。取り直してみるとずいぶんとオーバーヘッドの時間が違う・・・そもそもオーバーヘッド1.9usというのは発行しているwritebなどの数に対して早すぎる・・・
新しい計測の結果はSIS 3300 FADCでとった結果。
- Wiener VMEMM + PCIADA でのVME制御の性能です。
VME 32bit Single Read 1.94us/ch
VME 32bit Single Write 1.24us/ch
INT Latency ?us
- Ge funac VMIVME7807での性能です。
Linux 2.4.29 |
|
|
|
PIO map read |
1.05 us/ch |
|
CAEN V1190 TDC |
PIO map read |
1.26 us/ch |
|
SIS 3300 FADC |
Map-unmap |
9.53 us |
|
Map size = 1000 |
DMA read |
0.21 us/ch |
+ 6.6 us |
CAEN V1190 TDC |
DMA read |
0.19 us/ch |
+ 6.3 us |
SIS 3300 FADC |
VMEは対象となるモジュールによって多少速度が変わるので、モジュールも変えて測定しました。
PIOはスタートアップ時にマッピングウィンドウを作っています。
PIO map readはCAEN V1190の方がSIS 3300よりも早いみたいですが、DMAはSIS 3300 FADCの方が少しだけ早いようです。
Map-unmapというのはマッピング/アンマッピングにかかる時間です。マップするサイズによってかかる時間はほとんど変わりません。
VMIVME7807に使っているUniverse IIのVMEブリッジは都合8つまでしかウィンドウを作れません。複数のモジュールを使う時は最初にモジュールが持っているアドレス空間を満たすような大きなウィンドウを作っておくか、モジュール毎に細かくウィンドウを作るかします。
DMAウィンドウの数には制限はありませんので、イベント時にDMAしか使わない場合は気にしなくて大丈夫です。
- PollingによるDead Time (BBRLの場合)
BBRLではPollingで、NBBQではInterruptで1event読みにいくか判断しています。
Polling Period 50us <-- Driverの中で指定可
Polling Periodはデフォルトで50usですが、最近は40usでも安定して動作しています。
50usの場合平均して25us/event、40us場合は20us/eventのDead Timeが発生します。
- データ転送にかかる時間
BBRLでは1Block分バッファリングして、データを転送し書き込んでいきます
ダブルバッファリングを使ってますが1Blockを構築する時間が以下の転送時間より短くなると、余計にDead
Timeが発生します。 Trigger Rateが非常に高い(50kcpsとか)だと間に合いません。
NBBQでは1台のPCでデータ収集を行うのでネットワーク転送の時間はありませんが、データ保存の際に多少時間がかかっていると思います。
(ダブルバッファリングはしてません)
PC1->PC2 1Block Transfer & Store Data (DAT)
10-12ms/16KB
● ライブタイムを計算する
ライブタイムは以下の式で計算できます。 100掛けるとパーセントになります。
(デッドタイムは 1-ライブタイムです。)
livetime = N'/N = 1/(1+Nt)
N : Total events (Ungated Trigger) [cnt/s]
N': Accepted events (Gated Trigger) [cnt/s]
t : Transaction time [s]
Transaction
timeを適当に見積もることで、ライブタイムを予測することができます。
また、すでに回路が組上がっている場合は、Gated
TriggerにかけるVETOをオシロスコープで実測すればすぐにわかります。
ただしBBRLの場合、1Blockごとにスケーラを読み込むので、例えば1Module=12ch読む場合に、16.8+2.6x12
usだけTransaction Time
が増えます。
(1Block=100eventの場合、スケーラ読み込みに必要時間は1eventあたりに換算すると0.5us程度です)
Last Update: 2009/5/13
Hidetada Baba
baba @ ribf.riken.jp