Gatherer

ILCバーテックスうちあわせ
rev. 3
千代浩司
2010-04-14
ILC Vertex
1
アウトライン
• DAQ-Middlewareの紹介
• DAQ-Middlewareプログラミング
2010-04-14
ILC Vertex
2
背景、構想
• 背景
– 従来DAQシステムでのソフトウェアの再利用化はドライバ、ライブラリ
レベルでおこなわれてきた。
– 扱うデータの増大、使う計算機の数が増えてきてDAQシステムを構築
するのがむずかしくなってきた。
• 解決案?
– どんな実験にも対応できるように、抽象化、汎用化してしまうとデータ
収集効率が落ちてしまう。
• 解決案
– ドライバ、ライブラリとDAQシステムの間にコンポーネントという中間層
を作り、実験毎の違いを吸収、収集効率を確保し、
– システムの枠組みは普遍であるDAQフレームワークを作ればよいの
ではないか?
2010-04-14
ILC Vertex
3
DAQ-Middleware (1)
• 目的
– 再利用可能な
– 柔軟な
– 容易に構築可能なDAQシステム
• 特徴
– コンポーネントベース
– ネットーワークベース
– フレームワーク
2010-04-14
ILC Vertex
4
DAQ-Middleware (2)
• RT(Robot Technology)-Middlewareをデータ収集用に拡張
• RT-Middleware
– ネットワークロボットシステムの構築のためのソフトウェア共通
プラットフォーム
– 産総研知能システム研究部門・タスクインテリジェンス研究グ
ループが開発
– 複数のコンポーネントが通信してひとつの機能を実現する
– そのソフトウェアコンポーネントの仕様は国際標準規格
(OMG)
– 我々は2006年から産総研と共同研究を行っている
DAQ-Middleware
Data Transfer
Function
Command Path
Run Control
Function
DAQ-DAQ-DAQComponent
Component
Component
DAQOperator
Web
Interface
RT-Middleware
Data Path
2010-04-14
System
Configuration
function
ILC Vertex
5
基本DAQモデル
• 使用するコンポーネントを
指定
• コンポーネント間接続情報
• パラメータ
User Interface
PC
XML
• 装置パラメータ
• オンラインモニタ用
パラメータ
System Configuration
Daq
Operator
HTTP
Server
Command/Status
Control Panel
on Web browser
XML/JSON
Device Condition/
Online analysis
PC
Logger
Online histograms
on Web browser
・
・
・
Gatherer
Dispatcher
Monitor
Detectors
2010-04-14
Read-out
modules
ILC Vertex
Online histograms
using ROOT
6
DAQコンポーネント
Service Port
Service Port
(command/status)
(command/status)
Data
InPort
OutPort
+
=
Data
OutPort
InPort
Logics
Logics
(for data handling)
(for data handling)
 DAQコンポーネントを組み合わせてDAQシステムを構築する
 データ転送機能、ランコントロール、システムコンフィギュレーション機能は
DAQ-Middlewareで実装済み。
 データを下流に送るにはOutPortに書く。
 上流からのデータを読むにはInPortを読む。
 ユーザーはコアロジックを実装することで新しいコンポーネントを作成できる。
 リードアウトモジュールからのデータの読み取りロジック
 ヒストグラムの作成ロジック
2010-04-14
ILC Vertex
7
コンポーネント間通信での分類
Source Type
Sink Type
Filter Type
Dispather Type
Merger Type
• Source Type (Gatherer)
• Sink Type (Logger, Monitor)
• Dispatcher Type
2010-04-14
ILC Vertex
8
DAQコンポーネント 構成例(1)
DaqOperator
DaqOperator
Data
Command/Status
Logger
Gatherer
Dispatcher
Logger
Gatherer
モニターなしでデータをディスクに
セーブする
Monitor
DaqOperator
DaqOperator
Logger
Gatherer
Filter
Dispatcher
Gatherer
データセーブなしでオンライン
モニターする
Monitor
2010-04-14
Monitor
ILC Vertex
9
DAQコンポーネント構成例 (2)
ネットワーク透過性
計算機
DaqOperator
DaqOperator 計算機
計算機
Device
Gatherer
計算機
Logger
Device
Gatherer
Logger
DAQ-Componentは、1台の計算機でもネットワーク分散環境でもシームレスな
利用が可能
たとえばDAQシステム(PC)の負荷を分散させたい場合、計算機を追加してDAQComponentを移すだけで対応できる
2010-04-14
ILC Vertex
10
DAQコンポーネント特徴のまとめ
Service Port
(command/status)
READOUT
Data
READOUT
OutPort
InPort
Logics
(for data handling)
Network
READOUT
Development
READOUT
Reuse
READOUT
User A
READOUT
Repository
User B
2010-04-14
ILC Vertex
11
J-PARC MLF中性子での使用状況 (2010-03)
DAQ-Middlewareが
稼働中のビームライン
2010-04-14
ILC Vertex
12
J-PARC/MLF 中性子
検出器・リードアウトモジュール
• Position Sensitive Detector (PSD)
– 3He filled proportional counter
– The most common neutron detector
• Photon-counting 2-D/1-D detector (Scinti)
• Gas Electron Multiplier (GEM)
• SiTCP-based Readout modules
– SiTCP: a hardware-based TCP processor
PSDs
2010-04-14
2-D Scinti
1-D Scinti
ILC Vertex
GEM
13
MLF中性子用DAQコンポーネント群
PSD検出器
PSD用Gatherer
Gatenet
Monitor
シンチ検出器
GEM検出器
シンチ用Gatherer
GEM用Gatherer
Monitor
Monitor
検出器共通
DaqOperator
2010-04-14
Dispatcher
ILC Vertex
Logger
14
DAQ middleware
BL 21 GEM
(大下さんのスライド)
DAQ middleware is a standard tool for MLF in J-PARC.
Users are able to take data without regard for the difference of detectors
and to control the detectors from a web browser.
DAQ middleware is available as an online monitor.
Control panel in a web browser
The 2D image and the TOF distribution are updated
every additional 100 events.
A screen shot during data taking
10
BL 21 GEMでのコンポーネント構成図
Daq
Operator
Monitor
GEM用Gatherer
Dispatcher
BL21
2010-01-28
GEM用GathererとMonitorを
CCD VTX用に置き換えれば
読み取り可能
Logger
16
J-PARC/MLF以外での展開にむけて
• 現在以下の実験での使用を検討いただいて
いる
– PF BL16A (PF, KEK) (STARSと連携)
– SANS-J (JRR-3, JAEA)
– LEPS2 (SPring-8)
– CANDLES (Kamioka)
2010-04-14
ILC Vertex
17
DAQ-Middleware講習会
開催期間: 2009年8月5日~7日
参加人数: 30名
参加機関: 北大、東大、青山学院、早稲田、茨城大、京大、阪大、
佐賀大、JAEA, KEK
VMware Playerイメージを準備し依存ソフトウェアの準備の手間
を削減
2010年夏にも実施予定
2010-04-14
ILC Vertex
18
DAQ-Middleware Home page,
マニュアル
• http://daqmw.kek.jp/
• ソース型コンポーネントの開発
– http://daqmw.kek.jp/docs/source-comp.pdf
• シンク型コンポーネントの開発
– http://daqmw.kek.jp/docs/sink-comp.pdf
2010-04-14
ILC Vertex
19
開発に必要なプログラミング技能
• 言語:C++
• ソケットを使ったネットワークプログラミング
– SiTCPリードアウトモジュールからのデータ読みだしに必要
– 単純なものならDaqMiddleware関連物としてライブラリが
ある(あとで例を出します)
• モニターで使用するヒストグラムツール(ROOTなど)
2010-04-14
ILC Vertex
20
Software
Emulator
2010-04-14
Gatherer
ILC Vertex
Monitor
21
DAQ-Middlewareプログラミング概要
2010-04-14
ILC Vertex
22
コンポーネント状態遷移
Gatherer
LOADED
daq_dummy()
CONFIGURE
daq_configure()
CONFIGURED
UNCONFIGURE
daq_unconfigure()
daq_dummy()
START
daq_start()
RUNNING
STOP
daq_stop()
daq_run()
PAUSE
daq_pause()
PAUSED
2010-04-14
daq_start(): connect to readout
module
daq_run(): read data from readout
module and send data to
downstream
daq_stop(): flush the data to
downstream
Monitor
RESUME
daq_resume()
daq_dummy()
ILC Vertex
daq_start(): create histogram data
daq_run(): receive data from
upstream, decode data, increment
to histotgram data, draw histogram
23
source型のdaq_run()例 (1)
int SampleReader::daq_run()
{
recv_data_from_emulator(); // ソケットを使ってリードアウトモジュール
// からデータを読む
set_data_to_OutPortBuf(); // OutPortにデータをセット
m_out_status = m_OutPort.write(m_out_data); // 下流コンポーネントにデータ
// を送る
Software
Emulator
2010-04-14
Monitor
Gatherer
ILC Vertex
24
source型のdaq_run()例 (2)
int SampleReader::recv_data_from_emulator()
リードアウトモジュールからの
{
読みだしは通常のソケットプログラ
int status = m_sock->readAll(m_rdata, m_dataByteSize); ミング
if (status == DAQMW::Sock::ERROR_FATAL) {
std::cerr << "fatal error: readAll" << std::endl;
fatal_error_report(USER_ERROR1, -3);
}
else if (status == DAQMW::Sock::ERROR_TIMEOUT) {
std::cerr << "Timeout. Retrying ..." << std::endl;
fatal_error_report(USER_ERROR2, -4);
}
return 0;
}
2010-04-14
Software
Emulator
注: ソケットのread()はtimeout付
きで行う必要がある。
Gatherer
ILC Vertex
Monitor
25
上流コンポーネントからのデータの受け取り
m_in_status = m_InPort.read(m_in_data); // 2009.10
Return Value: タイムアウトした場合(データがなかった場合)BUF_TIMEOUT
エラーの場合はBUF_FATAL
それ以外の場合はデータが読めた。読めた長さが返る(単位バイト)。
読めたデータはm_in_dataに入る。
1回のread()で読めるのは上流コンポーネントが送ってきた全部のデータ。
2010-04-14
ILC Vertex
26
上流DAQコンポーネントが送ってきたデータ長の取得
m_in_status = m_InPort.read(m_in_data); // 2009.10
len = m_in_data.data.length();
註:上流コンポーネントがヘッダー、フッターをつけてOutPortに書いたならlen
はヘッダー、フッターの長さを含んだ長さになる。
Header
Event Data
Event Data
Event Data
Footer
len (byte size)
あとはデコードしてヒストグラムデータにincrementしたりグラフを書いたりする
2010-04-14
ILC Vertex
27
sink型でのdaq_run()例
int SampleMonitor::daq_run()
{
m_in_status = m_InPort.read(m_in_data); // 2009.10
double event_data;
for ( ......... ) {
event_data = decode();
m_histo->Fill(event_data);
}
if (ときどき) {
m_histo->Draw();
m_canvas->Update();
}
2010-04-14
ILC Vertex
28
DAQ-Middleware採用時に打ち合わせが必要になる(と思う)事項
• スケジュール
• 開発者
– 実験グループ側担当者
• DAQ PC等スペック
– CPUコア数、クロック
– DAQ-Middleware動作確認環境: Scientific Linux 5.x i386 (32bit)
– ネットワークスイッチ
• 読み取り方式
– たれながし、ポーリング等
• イベントデータフォーマット
– 固定長、可変長
• データスループット
– MB/s, SiTCPモジュール数
• エミュレータの有無
• 小道具の有無
nc 123.45.67.89 23| tee event_data_file | monitor_prog
2010-04-14
ILC Vertex
29