Skip to content

Latest commit

 

History

History
333 lines (261 loc) · 10.1 KB

README.md

File metadata and controls

333 lines (261 loc) · 10.1 KB

EBU-LIST server integration guide

Overview

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.

Sponsored by:

logo

Suggested Hardware + OS

Part list

What Item Qty
Motherboard Gigabyte Z390 AORUS PRO Wifi Intel Z390/socket1151 rev 1.0 1
CPU Intel Core i5-9600K Coffee Lake 6-Core 3.7 GHz (4.6 GHz Turbo) LGA 1151 (300 Series) 95W BX80684I59600K Desktop Processor Intel UHD Graphics 630 1
RAM G.SKILL Aegis 16GB (2 x 8GB) 288-Pin DDR4 SDRAM DDR4 3000 (PC4 24000) Intel Z170 Platform Memory (Desktop Memory) Model F4-3000C16D-16GISB 1
SSD for user data SAMSUNG 860 EVO Series 2.5" 500GB SATA III V-NAND 3-bit MLC Internal Solid State Drive (SSD) MZ-76E500B/AM 2
SATA III cable Coboc Model SC-SATA3-18 18" SATA III 6Gb/s Data Cable 2
NVMe SSD for OS Samsung PM981 Polaris 256GB M.2 NGFF PCIe Gen3 x4, NVME SSD, OEM (2280) MZVLB256HAHQ-00000 1
NVMe for data cache Intel Optane M.2 2280 32GB PCIe NVMe 3.0 x2 Memory Module/System Accelerator MEMPEK1W032GAXT 1
Network controller Mellanox Connectx-5 1
Thermal compound Arctic Silver AS5-3.5G Thermal Compound 1
Heat sink Noctua NH-L9i, Premium Low-profile CPU Cooler for Intel LGA115x 1
Computer case APEVIA X-FIT-200 Black Steel Mini-ITX Tower Computer Case 250W Power Supply 1
Replacement Power Supply Sylver Stone FX350-G 1

TODO: photos

OS

Boot Ubuntu 20.04 from USB stick.

  • 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

OS install

  • 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

OS init setup

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 array for user data

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

Install ST 2110 dependencies

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

PTP

Setup instructions.

NMOS

Setup instructions.

Capture Engine (DPDK + Nvidia/Mellanox ConnectX-5

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

EBU-LIST

Setup

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

Controls

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

Upgrade

sudo service docker stop
ebu_list_ctl upgrade
sudo service docker start
ebu_list_ctl status

Storage

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:

TODO:

  • import ebu-list-sdk and query versions in status cmd
  • add internet access in status cmd