This is the integration guide for EBU LIST. Although the project documentation allows to setup an offline analyzer, this guide gives instructions to build a standalone, high performance capturing devices.
- Online running instance: EBU LIST (no capture)
- Sources
Sponsored by:
TODO: photos
- Create a bootable USB stick with Ubuntu 20.04 inside
- plug the USB on the station and power up
- press F2 to enter the BIOS setup.
- select UEFI USB stick as a primary boot device
- set correct time
- set
AC back
=Always on
(auto startup on power failure) Fan failure warning
=on
- save and exit BIOS
- start Ubuntu installer
- select "Minimal installation"
- no disk encryption nor LVM required
- select target disk for OS, i.e. the largest NVMe
- user: ebulist
- restart
From here, use the terminal. Install basic tools:
sudo -i
apt udpate
apt udgrade
apt install openssh-server git
OS update may break Mellanox drivers, see install_mellanox
function
for detail. Disable automatic update in /etc/apt/apt.conf.d/20auto-upgrades
(need for root priviledges).
APT::Periodic::Update-Package-Lists "0";
Raid 0 consists in splitting data into segment and writting portions on multiple disks simultaneous to maximize the throughput. See additional performance tests for alternatives.
Find the 2 SATA drives and create RAID 0 array. From here, most of installation commands require root priviledges.
sudo -i
apt install mdadm
lsblk | grep sd
mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/sda /dev/sdb
ls /dev/md*
cat /proc/mdstat
Create an EXT4 file system, create the mount point, mount and set ownership:
mkfs.ext4 -F /dev/md0
mkdir -p /media/raid0
mount /dev/md0 /media/raid0
chown -R ebulist:ebulist /media/raid0/*
For persistent naming:
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
update-initramfs -u # sync ramdisk version of conf file
And persitent mounting, add this in /etc/fstab
:
/dev/md0 /media/raid0 ext4 defaults 0 1
As ebulist
user:
cd ~
git clone https://github.com/pkeroulas/st2110-toolkit.git
As root
user:
sudo -i
cd /home/ebulist/st2110-toolkit
./install.sh common
Edit master config (/etc/st2110.conf
), especially the 'Mandatory' part
which contains physical port names, path, etc. This config is loaded by
every script of this toolkit, including EBU-LIST startup script and it
is loaded on ssh login as well.
vi /etc/st2110.conf
These instructions show how to setup a performant stream capture engine based on Nvidia/Mellanox NIC + DPDK.
To integrate dpdk-based capture engine with EBU-LIST, you need to install the capture agent (nodejs) from EBU-LIST repo itself.
apt install node npm
git clone https://github.com/ebu/pi-list.git
cd app/capture_probe/
npm install
cd js_common_server
npm install
cd list/
sudo node server.js config.yml
Check the LIST_*
vars in master config, especially LIST_DEV
which
determines if EBU-LIST run from sources (true
) or from docker image
(false
).
./install.sh ebulist
Control the service with systemctl:
sudo systemctl status|start|stop st2110
EBU-LIST itself is controlled by a dedicated script:
$ ebu_list_ctl
/usr/sbin/ebu_list_ctl is a wrapper script that manages EBU-LIST
and related sub-services (DB, backend, UI, etc.)
Usage:
/usr/sbin/ebu_list_ctl [-v] {start|stop|status|log|install|upgrade|dev}
start start docker containers and server
stop stop docker containers and server
status check the status of all the st 2110 services
log get the logs of the server+containers
sniff list incomming udp traffic
freerun_start start a continuous analysis based on ./ebu-list/freerun.sh
freerun_stop stop continuous analysis
install install EBU-LIST for the first time
upgrade upgrade to next stable version fron public Github
dev upgrade to the next release from private repo
nmos probe local nmos RX node
$ ebu_list_ctl status
-----------------------------------------------
EBU-LIST Status
-----------------------------------------------
Hostname XXXXXXXXXXXXXXX
Mgt interface UP eno1 XXXXXXXXXXX
-----------------------------------------------
Media interfaces
Interface 0 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Gateway 0 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Switch 0 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Interface 1 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Gateway 1 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Switch 1 UP XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-----------------------------------------------
PTP
ptp4l UP ens3f1
phc2sys 0 UP CLOCK_REALTIME
phc2sys 1 UP ens3f0
Lock UP
PTP traffic UP
-----------------------------------------------
NMOS
Daemon UP
Config UP
Node API UP 1145b427-a793-513d-b430-0
Connection API UP
Receivers UP
-----------------------------------------------
Docker
Daemon UP
Network UP
Service Mongo DB UP
Service Influx DB UP
Service Rabbit MQ UP
-----------------------------------------------
LIST
Profile dev
API running UP
API version UP 2.2.2."36b39758"
GUI running UP
GUI response UP
Pre processor UP
Capture probe UP
Analysing DOWN
sudo service docker stop
ebu_list_ctl upgrade
sudo service docker start
ebu_list_ctl status
Use M.2 nvme SDD as a buffer for pcap file capture.
lsblk | grep nvme # find the one that IS NOT used for OS
fdisk /dev/nvme0n1 # create new partition 'n', primary 'p', default size, save 'w'
mkfs.ext4 -F /dev/nvme0n1p1
mkdir -p /media/buffer
mount /dev/nvme0n1p1 /media/buffer
chown -R ebulist:ebulist /media/buffer/*
TODO tune block sizes
For persistent mounting, add this line in /etc/fstab
:
UUID=nvme_UUID /media/buffer ext4 defaults 0 0
Determine write throughput for a given drive:
dd if=/dev/zero of=/media/buffer/zero.img bs=1G count=1 oflag=dsync
Drive | FS | W speed MB/s |
---|---|---|
RAM | 2,400 | |
nvme0 | ext4 | 262 |
nvme1 | ext4 | 683 |
SSD | ext4, raid0 | 651 |
To be tested:
- nvme0 used as bcache device
- Fusion IO card (spec: 900 MB/s)
- import ebu-list-sdk and query versions in
status
cmd - add internet access in
status
cmd