# sf_daq_buffer Overview of current architecture and component interaction. ![Overview image](docs/sf_daq_buffer-overview.jpg) ## Useful links ### Architecture - POSIX compliant write order test on GPFS https://svn.hdfgroup.org/hdf5/branches/hdf5_1_10_0/test/POSIX_Order_Write_Test_Report.pdf - Best Practice Guide - Parallel I/O https://prace-ri.eu/wp-content/uploads/Best-Practice-Guide_Parallel-IO.pdf - MPI-IO/GPFS, an Optimized Implementation of MPI-IO on top of GPFS https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1592834 ### Software - Intro to lock free programming https://preshing.com/20120612/an-introduction-to-lock-free-programming/ - JSON library benchmarks https://github.com/miloyip/nativejson-benchmark - Kernel bypass https://blog.cloudflare.com/kernel-bypass/ - PACKET_MMAP https://www.kernel.org/doc/Documentation/networking/packet_mmap.txt - Hyperslab selection https://support.hdfgroup.org/HDF5/Tutor/phypecont.html - Caching and Buffering in HDF5 https://de.slideshare.net/HDFEOS/caching-and-buffering-in-hdf5 ### Linux configuration - CFS intro https://opensource.com/article/19/2/fair-scheduling-linux - perf sched for Linux CPU scheduler analysis http://www.brendangregg.com/blog/2017-03-16/perf-sched.html - Tuning CPU scheduler for reducing latency https://www.scylladb.com/2016/06/10/read-latency-and-scylla-jmx-process/ - RHEL7: How to get started with CGroups. https://www.certdepot.net/rhel7-get-started-cgroups/ - Cpusets https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt - Understanding mlx5 ethtool Counters https://community.mellanox.com/s/article/understanding-mlx5-ethtool-counters - Red Hat Enterprise Linux Network Performance Tuning Guide https://access.redhat.com/sites/default/files/attachments/20150325_network_performance_tuning.pdf - Low latency 10Gbps Ethernet https://blog.cloudflare.com/how-to-achieve-low-latency/ ## Build To compile this repo you will need to install the following packages on RH7: - devtoolset-9 - cmake3 - zeromq-devel - hdf5-devel ```bash yum install devtoolset-9 yum install cmake3 yum install zeromq-devel yum install hdf5-devel yum install jsoncpp-devel ``` Step by step procedure to build the repo: ```bash 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: ```bash ln -s "$(pwd)""/""sf_buffer" /usr/bin/sf_buffer ln -s "$(pwd)""/""sf_stream" /usr/bin/sf_stream ln -s "$(pwd)""/""sf_replay" /usr/bin/sf_replay ln -s "$(pwd)""/""sf_writer" /usr/bin/sf_writer ```