NDPluginPva

author:

Bruno Martins, Brookhaven National Laboratory

Overview

This plugin converts NDArray data produced by asynNDArrayDrivers into the EPICSv4 normative type NTNDArray. An embedded EPICSv4 server is created to serve the new NTNDArray structure as an EPICSv4 PV. A description of the structure of the NTNDArray normative type is available.

NDPluginPva defines the following parameters.

Parameter Definitions in NDPluginPva.h and EPICS Record Definitions in NDPva.template

Parameter index variable

asyn interface

Access

Description

drvInfo string

EPICS record name

EPICS record type

NDPluginPvaPvName

asynOctet

r/o

Name of the EPICSv4 PV being served

PV_NAME

$(P)$(R)PvName_RBV

waveform

Configuration

The NDPluginPva plugin is created with the NDPvaConfigure command, either from C/C++ or from the EPICS IOC shell.

NDPvaConfigure (const char *portName, int queueSize, int blockingCallbacks,
                      const char *NDArrayPort, int NDArrayAddr, const char *pvName,
                      size_t maxMemory, int priority, int stackSize)

For details on the meaning of the parameters to this function refer to the detailed documentation on the NDPvaConfigure function in the NDPluginPva.cpp documentation and in the documentation for the constructor for the NDPluginPva class.

The following MEDM screen for the NDPluginPva. The only item not in the base class screen is the readback of the EPICS V4 PV name.

../_images/NDPva.png

Starting the pvAccess server

In order to actually serve the EPICSv4 PV created by this plugin it is necessary to call startPVAServer.

Anedoctal Performance Numbers

A performance test was conducted at NSLS-II to evaluate the benefits of using NDPva instead of NDStdArrays to transport images for visualization purposes. Eight AVT cameras of four different models were used:

Model

Resolution

Frame Rate

Manta G125B (3 instances)

1292x964x1

30 Hz

GT2450 (3 instances)

2448x2050x1

15 Hz

GT3400C (1 instance)

3384x2704x3 (binned to 1692x1352x3)

17 Hz

Mako G131C (1 instance)

1280x1024x3

28 Hz

All camera IOCs were concurrently running and acquiring on a HP ProLiant DL360 Gen9 server with 32GB of memory and a 12-core Xeon E5-2620 @ 2.40 GHz CPU. No other resource intensive process was running during the tests. This server was connected to a switch via a 10Gbps fiber link, as was the client computer. All cameras were individually connected via 1Gbps copper links to the switch. The client computer was a HP Z640 Workstation with 32GB of memory and 12-core Xeon E5-1650 @ 3.5GHz CPU, running CS-Studio version 4.3.3. Five tests were performed:

  • Baseline: Cameras acquiring, no plugins enabled

  • NDPva, no CS-Studio: Cameras acquiring, only NDPva enabled, images not being displayed in CS-Studio

  • NDPva + CS-Studio: Cameras acquiring, only NDPva enabled, images being displayed in CS-Studio

  • NDStdArrays, no CS-Studio: Cameras acquiring, only NDStdArrays enabled, images not being displayed in CS-Studio

  • NDStdArrays + CS-Studio: Cameras acquiring, only NDStdArrays enabled, images being displayed in CS-Studio

The results of these tests are tabulated as follows:

CPU Usage

Camera

Baseline

NDPva, no CS-Studio

NDPva + CS-Studio

NDStdArrays, no CS-Studio

NDStdArrays + CS-Studio

Cam 1: Manta G125B

10%

11%

13%

15%

35%

Cam 2: Manta G125B

10%

11%

13%

15%

35%

Cam 3: GT2450

18%

18%

23%

30%

65%

Cam 4: Manta G125B

10%

11%

13%

15%

35%

Cam 5: GT2450

18%

18%

23%

30%

65%

Cam 6: GT2450

18%

18%

23%

30%

65%

Cam 7: GT3400C

20%

25%

30%

40%

65%

Cam 8: Mako G131C

19%

21%

28%

40%

65%

And, in form of a graph:

../_images/NDPva_Performance.png