Adding baseline code for PerfMonMT GSoC work
This MR adds baseline code that we'll be using for the GSoC 2019 project in SPOT. It essentially entails additions to the PerfMonComps and PerfMonKernel. Now we have a dedicated service PerfMonMTSvc, a dedicated auditor PerfMonMTAuditor, and a new algorithm PerfMonMTAlg.
In the current implementation, we simply keep track of CPU/wall time from "AthRegSeq" "Start" until "AthMasterSeq" "Stop" to capture the event-loop as a first order approximation. Since the incidents are no longer in MT, we trigger the service from the algorithm per event (currently doesn't do anything but a placeholder just in case). The service is also triggered from the auditor. However, all these need to be worked on/polished as we go along.
At any rate, this naive first implementation seems to agree more or less w/ the reported wall-time from the AthenaHiveEventLoopMgr, i.e. for 10k events in 10 threads for HelloWorldOptions.py
we get:
AthenaHiveEventLoopMgr INFO ---> Loop Finished (seconds): 1.38634
...
PerfMonMTSvc INFO =========================================================
PerfMonMTSvc INFO PerfMonMT Results Summary
PerfMonMTSvc INFO =========================================================
PerfMonMTSvc INFO Total Wall time in the event loop is 1398 ms
PerfMonMTSvc INFO Total CPU time in the event loop is 9730 ms
PerfMonMTSvc INFO Average CPU utilization in the event loop is 6.95994
PerfMonMTSvc INFO =========================================================
I believe this is a good starting point for our student @haozturk. Let me cc @jcatmore.