xAOD Threading Fixes, master branch (2019.11.27.)
As @amete made me aware yesterday, and as we'll discuss in today's SPOT meeting, the creation of xAOD auxiliary store objects can be a major bottleneck in lightweight jobs that mostly just create/lightly modify objects. Since in the current implementation most of what the constructors of the auxiliary containers do, are heavily mutexed.
This MR is trying to address this. I updated the implementation of the AUX_VARIABLE(...)
macro, which the auxiliary container constructors use, to be more thread friendly. I tested this with the newly added unit test inside of xAODCore
. That test behaves like this with the current implementation of AUX_VARIABLE(...)
:
After my updates this changes to:
Notice the drastic difference in the time units at the bottom!
The changes required some updates in the client code as well. But the changes were well worth it in my mind.
At the same time I also made some general cleanup in the code. Instead of defining the AUX_VARIABLE
macro in 3 different places, I now introduced a single place (xAODCore/tools/AuxVariable.h
) for it.
Tagging @ssnyder, since as I understand he also had this on his ToDo list. (I was just keen on doing some meaningful work in the master branch after some time...