sf_daq_buffer

Overview of current architecture and component interaction.

Overview image

Documentation of individual components:

  • sf-buffer (Receive UDP and write buffer files)
  • sf-stream (Live streaming of detector data)
  • sf-writer (Read from buffer and write H5)
  • sf-utils (Small utilities for debugging and testing)

Terminology

In order to unify the way we write code and talk about concept the following terminology definitions should be followed:

  • frame (data from a single module)
  • image (assembled frames)
  • start_pulse_id and stop_pulse_id (not end_pulse_id) is used to determine the inclusive range (both start and stop pulse_id are included) of pulses.
  • pulse_id_step (how many pulses to skip between each image).
  • GPFS buffer (on GPFS detector buffering mechanism based on binary files)
  • detector_folder (root folder of the buffer for a specific detector on disk)
  • module_folder (folder of one module inside the detector_folder)
  • data_folder (folder where we group more buffer files based on pulse_id range)
  • data_file (the files where the actual data is stored, inside data_folder)

Design goals

  • Simplest thing that works.
    • Save time and iterate more quickly.
    • Less moving parts, less problems.
  • Start optimizing only when things break.
    • Many optimization possibilities, but not for now.
    • Makes possible to test technologies faster.
  • Small debuggable and profileable processes.
    • Needs to be able to run on your local machine in a debugger.
    • Asses code performance without guessing.
  • As little dependency between processes as possible.
    • Run only the process you want to test.
    • Write unit tests.

Build

To compile this repo you will need to install the following packages on RH7:

  • devtoolset-9
  • cmake3
  • zeromq-devel
  • hdf5-devel
yum install devtoolset-9
yum install cmake3
yum install zeromq-devel
yum install hdf5-devel

Step by step procedure to build the repo:

scl enable devtoolset-9 bash
git clone https://github.com/paulscherrerinstitute/sf_daq_buffer.git
cd sf_daq_buffer
mkdir build
cd build/
cmake3 ..
make

It is recommended to create symbolic links to the executables you will be using inside your PATH.

Example:

ln -s "$(pwd)""/""sf_buffer" /usr/bin/sf_buffer
ln -s "$(pwd)""/""sf_stream" /usr/bin/sf_stream
ln -s "$(pwd)""/""sf_writer" /usr/bin/sf_writer

Warnings

Zeromq

Zeromq version 4.1.4 (default on RH7) has a LINGER bug. Sometimes, the last message is not sent (the connection gets dropped before the message is in the buffer). Since we use PUSH/PULL only in sf-stream at the moment, this is not critical anymore. But in the future we might use the PUSH/PULL mechanism, so updating to the latest version of ZMQ should help us prevent future bug hunting sessions.

Please install a later version:

cd /etc/yum.repos.d/
wget https://download.opensuse.org/repositories/network:messaging:zeromq:release-stable/RHEL_7/network:messaging:zeromq:release-stable.repo
yum remove zeromq
yum remove openpgm
yum install libsodium-devel
yum install zeromq-devel

Architecture

Software

Linux configuration

S
Description
No description provided
Readme 3.2 MiB
Languages
C++ 91.1%
Python 4.9%
CMake 3.2%
Dockerfile 0.4%
Shell 0.4%