Skip to content

DcmEmulator: Move shared memory management from event level to session level

The original DcmEmulator was written at the time when we were still considering one session per worker handling multiple events in parallel. Later, we settled on the solution of one session per AthenaMT event slot, which doesn't require any event parallelism at session level. However, the DcmEmulator implementation was never simplified to reflect this idea and was still deleting and reallocating shared memory segments for every event.

Move the shared memory management to a session level, where one segment remains allocated (for each purpose) for the entire duration of the session and is reused by subsequent events. This removes the bottleneck in shared memory (de-)allocation and improves the DcmEmulator throughput limit as shown in the plot below. Next bottlenecks are related to copying input full event data, building output full event fragment, and (de-)compression. We can consider them at a later point if we think it's needed / worth the time.

throughput

cc @fwinkl, @mark, @wiedenma

Merge request reports