Presentation is loading. Please wait.

Presentation is loading. Please wait.

Controls Group Archiving at Jefferson Lab (Presentation of work by Chris Larrieu)

Similar presentations


Presentation on theme: "Controls Group Archiving at Jefferson Lab (Presentation of work by Chris Larrieu)"— Presentation transcript:

1 Controls Group Archiving at Jefferson Lab (Presentation of work by Chris Larrieu)

2 Controls Group Development Efforts Archiving Engine History Data Access Interface Data Transforms

3 Controls Group JLAB Archiving Engine Standard C++: HP-UX aCC, Linux g++ Plug-in data acquisition modules Trigger Monitor Specialized pre/post event ring buffers Easy to add new ones Integrated relational database Configuration info Run log Data cross reference, grouping CORBA interface Efficient

4 Controls Group History Data Access Interface: Client Overview 1. Obtain archive reference 2. Initialize range (channel name, begin, end) 3. Manipulate (remote?) data 4. Pull to client side(?) 5. Use data locally.

5 Controls Group Accessing Local History Data Client Application CADataStore Class Data Manipulation Interface CADataStore Subclass CADataStore Subclass CADataStore Subclass Xarr formatCZAR format Frequency archiver format

6 Controls Group Adapting CADataStore To specialize CADataStore: Directory object  10 virtual functions Archive object  2 virtual functions Range object  4 virtual functions range_iterator object  1 virtual function

7 Controls Group Why Remote Access? Clients don’t require disk access (no disk mounts) For low-power data clients Put processing close to the data Future: cacheing common data requests

8 Controls Group Accessing Remote History Data Client Application CADataStore Class Data Manipulation Interface CADataStore Subclass CADataStore Subclass CADataStore Subclass Xarr formatCZAR format Frequency archiver format History Data Server

9 Controls Group Using CORBA Designed to support manipulation of distributed objects: ideal for history API. Open source implementation for UNIX / Windows (MICO 2.3.5) API uses but does not expose CORBA CORBA weaknesses not relevant for history API.

10 Controls Group When? Adaptor library by July Data manipulation API by September History server by December

11 Controls Group Producer / Consumer Model Producer pushes history records into FIFO Consumer pulls them out Transform consumes and produces First In, First Out ProducerConsumer records

12 Controls Group History records Collection of fields Name  Human-friendly label (e.g. “timestamp”) Standing  Computer-friendly label (primary, collating, auxiliary, …) Value  Interprets referenced data (run-time typing)  Inlined type-code switching  no virtual functions  Vector / scalar: real, integer, time, opaque

13 Controls Group Example: volatile CA history record “timestamp”CollatingScalar time “value”Primary “status”AuxiliaryScalar integer “severity”AuxiliaryScalar integer

14 Controls Group FIFO Packed field data Info record Provides static information about contained data (e.g. CA control info) Input record Conduit for writing sequential data (“write head”) push() advances field references Output record Conduit for retrieving sequential data (“read head”) pull() advances field references

15 Controls Group FIFO Schematic Input record Output record Field stat Field val Field ts Field stat Field val Field ts Memory block Next memory block

16 Controls Group Run-time Discovery Flexibility exacts performance penalty Extra level of indirection accessing data Dynamic typing implies dynamic memory management Mitigating factors Avoid rote OO approach of indiscriminate subclassing: better to inline switch statement than incur virtual function overhead. Primarily deal with large blocks of homogeneous data.

17 Controls Group Producer Create & describe info, data records dynamic_record info, data; info.add_field (…); data.add_field(…); …; Create fifo, specifying layout fifo * output = new fifo (info, data); Until done, assign to record then push. data[i] = x; data[j] = y; output->push();

18 Controls Group Consumer Reference input record, fields basic_record & irec = fifo.data(); basic_record::field & x = irec.collating(); basic_record::field & y = irec.primary(); Read and use data while ( fifo.pull() )  plot (x,y);

19 Controls Group Transform Consumer and producer Verify input record supplies compatible data Describe output fifo Consume input, generating output Single pass filters can work in parallel with others


Download ppt "Controls Group Archiving at Jefferson Lab (Presentation of work by Chris Larrieu)"

Similar presentations


Ads by Google