Skip to content

Re-enable passthrough of events too large to process in Allen

Daniel Charles Craik requested to merge dcraik_passthroughLargeEvents into master

Re-introduces the functionality to pass through an event that is too large for Allen to process. As the sequence is not run for such events, the persistent store is updated in HostBuffersManager::writeSingleEventPassthrough with the minimal set of fields necessary for OutputHandler to process the event and append DecReport, SelReport and RoutingBits banks.

The DecReport uses a dedicated encoding key which encodes the following configuration:

{"Hlt1SelectionID": {"1": "Hlt1PassthroughLargeEventDecision"}, "InfoID": {}, "version": "0"}

The task ID an TCK are taken from the configuration.

RoutingBits that match Hlt1PassthroughLargeEvent (added as rb 26 in the default configuration) are set for these events.

The writing of SelReports has been refactored to make it usable outside of the sequence.

The SelReport is generated using the refactored writer and has been compared against an MDF produced using the passthrough.json sequence. In both cases, the configuration includes only a single line, which passes and has no associated objects to save so the output should be valid.

I tested the pathway by running Allen over a single event with -m 0 to ensure that the GPU memory would be insufficient to process the event. The Following banks were appended to the MDF:

0000b420: cbcb 1800 1103 0001 8428 68e7 0000 0000  .........(h.....
0000b430: 0100 0000 1101 0100 cbcb 1400 3500 0001  ............5...
0000b440: 0000 0000 0000 0000 0000 0000 cbcb 5800  ..............X.
0000b450: 360b 0020 1400 0000 8d46 0000 0c00 0000  6.. .....F......
0000b460: 0e00 0000 1000 0000 1300 0000 1400 0000  ................
0000b470: 0000 0000 0000 0000 0000 0000 0100 0200  ................
0000b480: 0100 0100 0100 0200 0000 0000 0100 0200  ................
0000b490: 0000 0000 0100 0300 0100 0000 0000 803f  ...............?
0000b4a0: 0000 0000 0a                             .....

Two monitoring counters are also added to HostBuffersManager to count the number of slice splits and the number of times an event is passed through. Specifically, these count the number of calls of the returnBufferUnfilled and writeSingleEventPassthrough functions, respectively.

Two CI tests are added to test the slice splitting and passthrough pathway. The first runs Allen over two events with zero GPU memory. The second attempts to decode the DecReports, SelReports and RoutingBits banks from these events.

The MR also includes a couple of small fixes to PersistentStore::inject, which is only used for this pathway - reserve was being called on a by-value copy of the AllenArgument so the pointer was not saved, and a specialisation for vector<bool> was missing.

Closes #494 (closed)

Merge with Moore!3212 (merged) lhcb-conddb/file-content-metadata!88 (merged) MooreOnline!374 (merged)

FYI @gligorov @raaij @edallocc @gcavalle

Edited by Daniel Charles Craik

Merge request reports