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
© Copyright 2025 ExpyDoc