12 #include <unordered_set>
13 #include <unordered_map>
16 #include <boost/format.hpp>
41 for (
unsigned int i = dups.size();
i <
size; ++
i)
49 m_use_realtime( config.getUntrackedParameter<bool>(
"useRealTimeClock" ) ),
50 m_enable_timing_paths( config.getUntrackedParameter<bool>(
"enableTimingPaths" ) ),
51 m_enable_timing_modules( config.getUntrackedParameter<bool>(
"enableTimingModules" ) ),
52 m_enable_timing_exclusive( config.getUntrackedParameter<bool>(
"enableTimingExclusive" ) ),
53 m_enable_timing_summary( config.getUntrackedParameter<bool>(
"enableTimingSummary" ) ),
54 m_skip_first_path( config.getUntrackedParameter<bool>(
"skipFirstPath" ) ),
56 m_enable_dqm( config.getUntrackedParameter<bool>(
"enableDQM" ) ),
57 m_enable_dqm_bypath_active( config.getUntrackedParameter<bool>(
"enableDQMbyPathActive" ) ),
58 m_enable_dqm_bypath_total( config.getUntrackedParameter<bool>(
"enableDQMbyPathTotal" ) ),
59 m_enable_dqm_bypath_overhead( config.getUntrackedParameter<bool>(
"enableDQMbyPathOverhead" ) ),
60 m_enable_dqm_bypath_details( config.getUntrackedParameter<bool>(
"enableDQMbyPathDetails" ) ),
61 m_enable_dqm_bypath_counters( config.getUntrackedParameter<bool>(
"enableDQMbyPathCounters" ) ),
62 m_enable_dqm_bypath_exclusive( config.getUntrackedParameter<bool>(
"enableDQMbyPathExclusive" ) ),
63 m_enable_dqm_bymodule( config.getUntrackedParameter<bool>(
"enableDQMbyModule" ) ),
64 m_enable_dqm_bymoduletype( config.getUntrackedParameter<bool>(
"enableDQMbyModuleType" ) ),
65 m_enable_dqm_summary( config.getUntrackedParameter<bool>(
"enableDQMSummary" ) ),
66 m_enable_dqm_byls( config.getUntrackedParameter<bool>(
"enableDQMbyLumiSection" ) ),
67 m_enable_dqm_bynproc( config.getUntrackedParameter<bool>(
"enableDQMbyProcesses" ) ),
69 m_concurrent_runs( 0 ),
70 m_concurrent_streams( 0 ),
71 m_concurrent_threads( 0 ),
72 m_module_id( edm::ModuleDescription::invalidID() ),
73 m_dqm_eventtime_range( config.getUntrackedParameter<double>(
"dqmTimeRange" ) ),
74 m_dqm_eventtime_resolution( config.getUntrackedParameter<double>(
"dqmTimeResolution" ) ),
75 m_dqm_pathtime_range( config.getUntrackedParameter<double>(
"dqmPathTimeRange" ) ),
76 m_dqm_pathtime_resolution( config.getUntrackedParameter<double>(
"dqmPathTimeResolution" ) ),
77 m_dqm_moduletime_range( config.getUntrackedParameter<double>(
"dqmModuleTimeRange" ) ),
78 m_dqm_moduletime_resolution( config.getUntrackedParameter<double>(
"dqmModuleTimeResolution" ) ),
79 m_dqm_path( config.getUntrackedParameter<std::
string>(
"dqmPath" ) ),
80 m_is_first_event(
true),
90 m_run_summary_perprocess(),
91 m_job_summary_perprocess()
215 uint32_t
size = size_p + size_e;
218 if (stream.paths.size() <=
pid)
219 stream.paths.resize(pid+1);
220 for (uint32_t
i = 0;
i < size_p; ++
i) {
222 for (
auto & stream: m_stream)
225 for (uint32_t
i = 0;
i < size_e; ++
i) {
227 for (
auto & stream: m_stream)
228 stream.paths[
pid][
label].index = size_p +
i;
230 for (
auto & stream: m_stream) {
232 if (stream.timing_perprocess.size() <=
pid)
233 stream.timing_perprocess.resize(pid+1);
234 stream.timing_perprocess[
pid].paths_interpaths.assign(size + 1, 0.);
236 if (stream.dqm_perprocess.size() <=
pid)
237 stream.dqm_perprocess.resize(pid+1);
238 if (stream.dqm_perprocess_byluminosity.size() <=
pid)
239 stream.dqm_perprocess_byluminosity.resize(pid+1);
240 if (stream.dqm_paths.size() <=
pid)
241 stream.dqm_paths.resize(pid+1);
246 summary[
pid].paths_interpaths.assign(size + 1, 0);
255 m_run_summary_perprocess[rid][
pid].reset();
276 m_enable_dqm =
false;
283 uint32_t
size = size_p + size_e;
297 stream.dqm.presource = booker.book1D(
"presource",
"Pre-Source processing time", modulebins, 0.,
m_dqm_moduletime_range)->getTH1F();
298 stream.dqm.presource ->StatOverflows(
true);
299 stream.dqm.presource ->SetXTitle(
"processing time [ms]");
300 stream.dqm.source = booker.book1D(
"source",
"Source processing time", modulebins, 0.,
m_dqm_moduletime_range)->getTH1F();
301 stream.dqm.source ->StatOverflows(
true);
302 stream.dqm.source ->SetXTitle(
"processing time [ms]");
303 stream.dqm.preevent = booker.book1D(
"preevent",
"Pre-Event processing time", modulebins, 0.,
m_dqm_moduletime_range)->getTH1F();
304 stream.dqm.preevent ->StatOverflows(
true);
305 stream.dqm.preevent ->SetXTitle(
"processing time [ms]");
306 stream.dqm.event = booker.book1D(
"event",
"Event processing time", eventbins, 0.,
m_dqm_eventtime_range)->getTH1F();
307 stream.dqm.event ->StatOverflows(
true);
308 stream.dqm.event ->SetXTitle(
"processing time [ms]");
312 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
313 stream.dqm_perprocess[
pid].preevent = booker.book1D(
"preevent",
"Pre-Event processing time", modulebins, 0.,
m_dqm_moduletime_range)->getTH1F();
314 stream.dqm_perprocess[
pid].preevent ->StatOverflows(
true);
315 stream.dqm_perprocess[
pid].preevent ->SetXTitle(
"processing time [ms]");
316 stream.dqm_perprocess[
pid].event = booker.book1D(
"event",
"Event processing time", eventbins, 0.,
m_dqm_eventtime_range)->getTH1F();
317 stream.dqm_perprocess[
pid].event ->StatOverflows(
true);
318 stream.dqm_perprocess[
pid].event ->SetXTitle(
"processing time [ms]");
319 stream.dqm_perprocess[
pid].all_paths = booker.book1D(
"all_paths",
"Paths processing time", eventbins, 0.,
m_dqm_eventtime_range)->getTH1F();
320 stream.dqm_perprocess[
pid].all_paths ->StatOverflows(
true);
321 stream.dqm_perprocess[
pid].all_paths ->SetXTitle(
"processing time [ms]");
322 stream.dqm_perprocess[
pid].all_endpaths = booker.book1D(
"all_endpaths",
"EndPaths processing time", pathbins, 0.,
m_dqm_pathtime_range)->getTH1F();
323 stream.dqm_perprocess[
pid].all_endpaths ->StatOverflows(
true);
324 stream.dqm_perprocess[
pid].all_endpaths ->SetXTitle(
"processing time [ms]");
325 stream.dqm_perprocess[
pid].interpaths = booker.book1D(
"interpaths",
"Time spent between paths", pathbins, 0.,
m_dqm_eventtime_range)->getTH1F();
326 stream.dqm_perprocess[
pid].interpaths ->StatOverflows(
true);
327 stream.dqm_perprocess[
pid].interpaths ->SetXTitle(
"processing time [ms]");
332 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
333 stream.dqm_paths[
pid].active_time = booker.bookProfile(
"paths_active_time",
"Additional time spent in each path", size, -0.5, size-0.5, pathbins, 0.,
std::numeric_limits<double>::infinity(),
" ")->getTProfile();
334 stream.dqm_paths[
pid].active_time ->StatOverflows(
true);
335 stream.dqm_paths[
pid].active_time ->SetYTitle(
"processing time [ms]");
336 stream.dqm_paths[
pid].total_time = booker.bookProfile(
"paths_total_time",
"Total time spent in each path", size, -0.5, size-0.5, pathbins, 0.,
std::numeric_limits<double>::infinity(),
" ")->getTProfile();
337 stream.dqm_paths[
pid].total_time ->StatOverflows(
true);
338 stream.dqm_paths[
pid].total_time ->SetYTitle(
"processing time [ms]");
339 stream.dqm_paths[
pid].exclusive_time = booker.bookProfile(
"paths_exclusive_time",
"Exclusive time spent in each path", size, -0.5, size-0.5, pathbins, 0.,
std::numeric_limits<double>::infinity(),
" ")->getTProfile();
340 stream.dqm_paths[
pid].exclusive_time ->StatOverflows(
true);
341 stream.dqm_paths[
pid].exclusive_time ->SetYTitle(
"processing time [ms]");
342 stream.dqm_paths[
pid].interpaths = booker.bookProfile(
"paths_interpaths",
"Time spent between each path", size+1, -0.5, size+0.5, pathbins, 0.,
std::numeric_limits<double>::infinity(),
" ")->getTProfile();
343 stream.dqm_paths[
pid].interpaths ->StatOverflows(
true);
344 stream.dqm_paths[
pid].interpaths ->SetYTitle(
"processing time [ms]");
346 for (uint32_t
i = 0;
i < size_p; ++
i) {
348 stream.dqm_paths[
pid].active_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
349 stream.dqm_paths[
pid].total_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
350 stream.dqm_paths[
pid].exclusive_time ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
351 stream.dqm_paths[
pid].interpaths ->GetXaxis()->SetBinLabel(
i + 1, label.c_str());
353 for (uint32_t
i = 0;
i < size_e; ++
i) {
355 stream.dqm_paths[
pid].active_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
356 stream.dqm_paths[
pid].total_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
357 stream.dqm_paths[
pid].exclusive_time ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
358 stream.dqm_paths[
pid].interpaths ->GetXaxis()->SetBinLabel(
i + size_p + 1, label.c_str());
371 auto &
plots = stream.dqm_byluminosity[
i];
374 plots.presource ->StatOverflows(
true);
376 plots.presource ->SetYTitle(
"processing time [ms]");
378 plots.source ->StatOverflows(
true);
380 plots.source ->SetYTitle(
"processing time [ms]");
382 plots.preevent ->StatOverflows(
true);
384 plots.preevent ->SetYTitle(
"processing time [ms]");
386 plots.event ->StatOverflows(
true);
388 plots.event ->SetYTitle(
"processing time [ms]");
396 booker.setCurrentFolder(
m_dqm_path +
"/process " + process_name);
398 auto &
plots = stream.dqm_perprocess_byluminosity[
pid][
i];
401 plots.preevent ->StatOverflows(
true);
403 plots.preevent ->SetYTitle(
"processing time [ms]");
405 plots.event ->StatOverflows(
true);
407 plots.event ->SetYTitle(
"processing time [ms]");
409 plots.all_paths ->StatOverflows(
true);
411 plots.all_paths ->SetYTitle(
"processing time [ms]");
413 plots.all_endpaths ->StatOverflows(
true);
415 plots.all_endpaths ->SetYTitle(
"processing time [ms]");
417 plots.interpaths ->StatOverflows(
true);
419 plots.interpaths ->SetYTitle(
"processing time [ms]");
425 booker.setCurrentFolder(
m_dqm_path +
"/Paths");
426 for (
auto & keyval: stream.paths[pid]) {
428 PathInfo & pathinfo = keyval.second;
433 pathinfo.
dqm_active ->SetXTitle(
"processing time [ms]");
438 pathinfo.
dqm_total ->StatOverflows(
true);
439 pathinfo.
dqm_total ->SetXTitle(
"processing time [ms]");
454 pathinfo.
dqm_overhead ->SetXTitle(
"processing time [ms]");
464 std::vector<std::string>();
466 static std::vector<std::string> dup;
467 if (modules.size() > dup.size())
470 std::vector<const char *>
labels(modules.size(),
nullptr);
471 for (uint32_t
i = 0;
i < modules.size(); ++
i)
475 if (m_enable_dqm_bypath_counters) {
476 pathinfo.
dqm_module_counter = booker.book1D(pathname +
"_module_counter", pathname +
" module counter", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
478 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
484 pathinfo.
dqm_module_active = booker.book1D(pathname +
"_module_active", pathname +
" module active", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
486 pathinfo.
dqm_module_total = booker.book1D(pathname +
"_module_total", pathname +
" module total", modules.size(), -0.5, modules.size() - 0.5)->getTH1F();
489 for (uint32_t
i = 0;
i < modules.size(); ++
i) {
507 booker.setCurrentFolder(
m_dqm_path +
"/Modules");
508 for (
auto & keyval: stream.modules) {
513 module.
dqm_active->SetXTitle(
"processing time [ms]");
518 booker.setCurrentFolder(
m_dqm_path +
"/ModuleTypes");
519 for (
auto & keyval: stream.moduletypes) {
524 module.
dqm_active->SetXTitle(
"processing time [ms]");
553 stream.fast_moduletypes.resize(
m_module_id,
nullptr);
557 for (
auto & stream: m_stream)
631 std::ostringstream
out;
632 out << std::fixed << std::setprecision(6);
633 out <<
"FastReport for " << label <<
", process " << process <<
'\n';
635 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) total.
count <<
" Pre-Event" <<
'\n';
636 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) total.
count <<
" Event" <<
'\n';
637 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_paths / (double) total.
count <<
" all Paths" <<
'\n';
638 out <<
"FastReport " << std::right << std::setw(10) << summary.
all_endpaths / (double) total.
count <<
" all EndPaths" <<
'\n';
639 out <<
"FastReport " << std::right << std::setw(10) << summary.
interpaths / (double) total.
count <<
" between paths" <<
'\n';
649 std::ostringstream
out;
650 out << std::fixed << std::setprecision(6);
651 out <<
"FastReport for " << label <<
", over all subprocesses" <<
'\n';
653 out <<
"FastReport " << std::right << std::setw(10) << summary.
presource / (double) summary.
count <<
" Pre-Source" <<
'\n';
654 out <<
"FastReport " << std::right << std::setw(10) << summary.
source / (double) summary.
count <<
" Source" <<
'\n';
655 out <<
"FastReport " << std::right << std::setw(10) << summary.
preevent / (double) summary.
count <<
" Pre-Event" <<
'\n';
656 out <<
"FastReport " << std::right << std::setw(10) << summary.
event / (double) summary.
count <<
" Event" <<
'\n';
728 if (module.
id() >= stream.fast_modules.size())
729 stream.fast_modules.resize(module.
id() + 1,
nullptr);
730 if (module.
id() >= stream.fast_moduletypes.size())
731 stream.fast_moduletypes.resize(module.
id() + 1,
nullptr);
733 stream.fast_modules[module.
id()] = & stream.modules[module.
moduleLabel()];;
734 stream.fast_moduletypes[module.
id()] = & stream.moduletypes[module.
moduleName()];
744 stream.timer_event.start();
747 stream.timing_perprocess[
pid].preevent =
delta(stream.timer_last_transition, stream.timer_event.getStartTime());
750 stream.timing_perprocess[
pid].event = 0;
751 stream.timing_perprocess[
pid].all_paths = 0;
752 stream.timing_perprocess[
pid].all_endpaths = 0;
753 stream.timing_perprocess[
pid].interpaths = 0;
754 stream.timing_perprocess[
pid].paths_interpaths.assign(stream.paths[pid].size() + 1, 0);
755 for (
auto & keyval : stream.paths[pid]) {
756 keyval.second.timer.reset();
757 keyval.second.time_active = 0.;
758 keyval.second.time_exclusive = 0.;
759 keyval.second.time_premodules = 0.;
760 keyval.second.time_intermodules = 0.;
761 keyval.second.time_postmodules = 0.;
762 keyval.second.time_total = 0.;
767 stream.timer_last_path = stream.timer_event.getStartTime();
781 stream.timer_event.stop();
782 stream.timer_last_transition = stream.timer_event.getStopTime();
783 stream.timing_perprocess[
pid].event = stream.timer_event.seconds();
786 double interpaths =
delta(stream.timer_last_path, stream.timer_event.getStopTime());
787 stream.timing_perprocess[
pid].interpaths += interpaths;
788 stream.timing_perprocess[
pid].paths_interpaths.back() = interpaths;
796 stream.timing.count = 1;
797 stream.timing.preevent = stream.timing_perprocess[0].preevent;
798 stream.timing.event = stream.timing_perprocess[0].event;
800 stream.timing.event += stream.timing_perprocess[
i].preevent;
801 stream.timing.event += stream.timing_perprocess[
i].event;
809 for (
auto & keyval: stream.paths[pid]) {
810 PathInfo & pathinfo = keyval.second;
813 for (uint32_t
i = 0;
i <= pathinfo.
last_run; ++
i) {
828 for (
unsigned int i = 0;
i < stream.fast_modules.size(); ++
i)
830 if (stream.fast_modules[
i]) {
831 double active = stream.fast_modules[
i]->time_active;
832 ModuleInfo & moduletype = * stream.fast_moduletypes[
i];
848 for (
auto & keyval: stream.paths[pid]) {
849 PathInfo & pathinfo = keyval.second;
873 for (uint32_t
i = 0;
i <= pathinfo.
last_run; ++
i) {
876 if (module ==
nullptr)
902 for (
auto & keyval : stream.modules) {
911 for (
auto & keyval : stream.moduletypes) {
919 for (
unsigned int i = 0;
i <= stream.paths[
pid].size(); ++
i)
920 stream.dqm_paths[pid].interpaths->Fill(
i, stream.timing_perprocess[pid].paths_interpaths[
i] * 1000.);
924 stream.dqm.fill(stream.timing);
925 stream.dqm_perprocess[
pid].fill(stream.timing_perprocess[pid]);
931 stream.dqm_byluminosity[i].fill(stream.luminosity[i], stream.timing);
933 stream.dqm_perprocess_byluminosity[pid][i].fill(stream.luminosity[i], stream.timing_perprocess[pid]);
942 stream.timing.reset();
943 stream.timer_source.start();
947 for (
auto & keyval : stream.modules) {
948 keyval.second.timer.reset();
949 keyval.second.time_active = 0.;
950 keyval.second.run_in_path =
nullptr;
951 keyval.second.counter = 0;
953 for (
auto & keyval : stream.moduletypes) {
954 keyval.second.timer.reset();
955 keyval.second.time_active = 0.;
956 keyval.second.run_in_path =
nullptr;
957 keyval.second.counter = 0;
961 stream.timing.presource =
delta(stream.timer_last_transition, stream.timer_source.getStartTime());
966 stream.timer_source.stop();
967 stream.timer_last_transition = stream.timer_source.getStopTime();
970 stream.timing.source = stream.timer_source.seconds();
980 auto keyval = stream.paths[
pid].find(path);
981 if (keyval != stream.paths[pid].end()) {
982 stream.current_path = & keyval->second;
985 stream.current_path =
nullptr;
986 edm::LogError(
"FastTimerService") <<
"FastTimerService::prePathEvent: unexpected path " <<
path;
991 stream.current_path->first_module =
nullptr;
994 stream.current_path->timer.start();
998 stream.timer_paths.setStartTime(stream.current_path->timer.getStartTime());
999 }
else if (path ==
m_process[pid].first_endpath) {
1001 stream.timer_endpaths.setStartTime(stream.current_path->timer.getStartTime());
1006 double interpaths =
delta(stream.timer_last_path, stream.current_path->timer.getStartTime());
1007 stream.timing_perprocess[
pid].interpaths += interpaths;
1008 stream.timing_perprocess[
pid].paths_interpaths[stream.current_path->index] = interpaths;
1018 if (stream.current_path ==
nullptr) {
1019 edm::LogError(
"FastTimerService") <<
"FastTimerService::postPathEvent: unexpected path " <<
path;
1024 stream.current_path->timer.stop();
1025 stream.current_path->time_active = stream.current_path->timer.seconds();
1026 stream.timer_last_path = stream.current_path->timer.getStopTime();
1028 double active = stream.current_path->time_active;
1033 PathInfo & pathinfo = * stream.current_path;
1041 double overhead = 0.;
1043 double total = active;
1051 uint32_t last_run = status.
index();
1052 for (uint32_t
i = 0;
i <= last_run; ++
i) {
1068 if (stream.current_path->first_module ==
nullptr) {
1076 pre =
delta(stream.current_path->timer.getStartTime(), stream.current_path->first_module->timer.getStartTime());
1077 post =
delta(stream.current_module->timer.getStopTime(), stream.current_path->timer.getStopTime());
1078 inter = active - pre - current - post;
1105 stream.timer_paths.setStopTime(stream.current_path->timer.getStopTime());
1106 stream.timing_perprocess[
pid].all_paths = stream.timer_paths.seconds();
1107 }
else if (path ==
m_process[pid].last_endpath) {
1109 stream.timer_endpaths.setStopTime(stream.current_path->timer.getStopTime());
1110 stream.timing_perprocess[
pid].all_endpaths = stream.timer_endpaths.seconds();
1120 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1129 if (md.
id() < stream.fast_modules.size()) {
1133 stream.current_module = &
module;
1135 if (stream.current_path->first_module ==
nullptr)
1136 stream.current_path->first_module = &
module;
1148 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1159 if (md.
id() < stream.fast_modules.size()) {
1177 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1196 if (md.
id() < stream.fast_modules.size()) {
1201 edm::LogError(
"FastTimerService") <<
"FastTimerService::preModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1212 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: invalid module";
1222 if (md.
id() < stream.fast_modules.size()) {
1227 edm::LogError(
"FastTimerService") <<
"FastTimerService::postModuleEventDelayedGet: unexpected module " << md.
moduleLabel();
1237 std::vector<ModuleInfo *> & pathmap = stream.paths[
pid][
name].modules;
1239 pathmap.reserve( modules.size() );
1240 std::unordered_set<ModuleInfo const *>
pool;
1241 for (
auto const &
module: modules) {
1245 auto const & it = stream.modules.find(label);
1246 if (it == stream.modules.end()) {
1248 pathmap.push_back( 0 );
1249 }
else if (pool.insert(& it->second).second) {
1251 pathmap.push_back(& it->second);
1254 pathmap.push_back( 0 );
1267 return m_stream[sid].current_module->timer.secondsUntilNow();
1272 return m_stream[sid].current_path->timer.secondsUntilNow();
1277 return m_stream[sid].timer_event.secondsUntilNow();
1282 if (module.
id() <
m_stream[sid].fast_modules.size()) {
1283 return m_stream[sid].fast_modules[module.
id()]->time_active;
1285 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module " << module.
moduleLabel();
1292 if (
id <
m_stream[sid].fast_modules.size()) {
1293 return m_stream[sid].fast_modules[id]->time_active;
1295 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTime: unexpected module id " << id;
1302 auto const & keyval =
m_stream[sid].modules.find(label);
1303 if (keyval !=
m_stream[sid].modules.end()) {
1304 return keyval->second.time_active;
1307 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByLabel: unexpected module " <<
label;
1314 auto const & keyval =
m_stream[sid].moduletypes.find(type);
1315 if (keyval !=
m_stream[sid].moduletypes.end()) {
1316 return keyval->second.time_active;
1319 edm::LogError(
"FastTimerService") <<
"FastTimerService::queryModuleTimeByType: unexpected module type " <<
type;
1361 return m_stream[sid].timing.source;
1387 desc.
addUntracked<
bool>(
"enableTimingExclusive",
false);
1388 desc.
addUntracked<
bool>(
"enableTimingSummary",
false);
1391 desc.
addUntracked<
bool>(
"enableDQMbyPathActive",
false);
1392 desc.
addUntracked<
bool>(
"enableDQMbyPathTotal",
true);
1393 desc.
addUntracked<
bool>(
"enableDQMbyPathOverhead",
false);
1394 desc.
addUntracked<
bool>(
"enableDQMbyPathDetails",
false);
1395 desc.
addUntracked<
bool>(
"enableDQMbyPathCounters",
true);
1396 desc.
addUntracked<
bool>(
"enableDQMbyPathExclusive",
false);
1398 desc.
addUntracked<
bool>(
"enableDQMbyModuleType",
false);
1400 desc.
addUntracked<
bool>(
"enableDQMbyLuminosity",
false)->setComment(
"deprecated: this parameter is ignored");
1401 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1402 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1406 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1407 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1408 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1409 desc.
addUntracked<
double>(
"dqmLuminosityRange", 1.e34 )->setComment(
"deprecated: this parameter is ignored");
1410 desc.
addUntracked<
double>(
"dqmLuminosityResolution", 1.e31 )->setComment(
"deprecated: this parameter is ignored");
1411 desc.
addUntracked<uint32_t>(
"dqmLumiSectionsRange", 2500 );
1414 desc.
addUntracked<std::vector<unsigned int> >(
"supportedProcesses", { })->setComment(
"deprecated: this parameter is ignored");
1415 descriptions.
add(
"FastTimerService", desc);
1421 unsigned int pid = 0;
void preGlobalBeginRun(edm::GlobalContext const &)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::string const & pathName() const
unsigned int maxNumberOfThreads() const
T getUntrackedParameter(std::string const &, T const &) const
void postStreamBeginRun(edm::StreamContext const &)
void watchPreEvent(PreEvent::slot_type const &iSlot)
double queryEventTime(edm::StreamID) const
const double m_dqm_eventtime_resolution
Strings const & getTrigPathModules(std::string const &name) const
void postStreamEndLumi(edm::StreamContext const &)
std::string const & processName() const
std::string const & getTrigPath(size_type const i) const
void watchPrePathEvent(PrePathEvent::slot_type const &iSlot)
void watchPreallocate(Preallocate::slot_type const &iSlot)
static double delta(FastTimer::Clock::time_point const &first, FastTimer::Clock::time_point const &second)
static void fill_dups(std::vector< std::string > &dups, unsigned int size)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
bool m_enable_timing_modules
void watchPostEndJob(PostEndJob::slot_type const &iSlot)
Strings const & getEndPaths() const
unsigned int m_concurrent_streams
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e< void, edm::EventIDconst &, edm::Timestampconst & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
void watchPreModuleEvent(PreModuleEvent::slot_type const &iSlot)
double summary_postmodules
const bool m_enable_dqm_bypath_counters
const bool m_skip_first_path
void watchPostEvent(PostEvent::slot_type const &iSlot)
const bool m_enable_dqm_bypath_exclusive
LuminosityBlockID const & luminosityBlockID() const
void printSummary(Timing const &summary, std::string const &label) const
std::vector< ProcessDescription > m_process
void watchPostStreamEndLumi(PostStreamEndLumi::slot_type const &iSlot)
const double m_dqm_pathtime_range
std::string const & moduleName() const
void watchPostPathEvent(PostPathEvent::slot_type const &iSlot)
void watchPostModuleEvent(PostModuleEvent::slot_type const &iSlot)
double currentPathTime(edm::StreamID) const
void watchPostSourceEvent(PostSourceEvent::slot_type const &iSlot)
std::vector< TimingPerProcess > m_job_summary_perprocess
RunIndex const & runIndex() const
string format
Some error handling for the usage.
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
unsigned int m_concurrent_threads
LuminosityBlockNumber_t luminosityBlock() const
std::string const & moduleLabel() const
static unsigned int getUniqueID()
Returns a unique id each time called. Intended to be passed to ModuleDescription's constructor's modI...
ProcessContext const & parentProcessContext() const
unsigned int m_concurrent_runs
void postStreamBeginLumi(edm::StreamContext const &)
RunIndex const & runIndex() const
unsigned int maxNumberOfStreams() const
void preModuleBeginJob(edm::ModuleDescription const &)
const bool m_enable_dqm_bynproc
Strings const & getEndPathModules(std::string const &name) const
bool m_enable_timing_paths
size_type findTrigPath(std::string const &name) const
std::vector< LuminosityDescription > m_dqm_luminosity
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
const bool m_enable_dqm_byls
void watchPostStreamBeginLumi(PostStreamBeginLumi::slot_type const &iSlot)
const double m_dqm_moduletime_resolution
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
double queryModuleTimeByLabel(edm::StreamID, const std::string &) const
double currentEventTime(edm::StreamID) const
void watchPreModuleEventDelayedGet(PreModuleEventDelayedGet::slot_type const &iSlot)
void postEvent(edm::StreamContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
void setLuminosity(unsigned int stream_id, unsigned int luminosity_id, double value)
ModuleDescription const * moduleDescription() const
std::vector< std::vector< TimingPerProcess > > m_run_summary_perprocess
void postStreamEndRun(edm::StreamContext const &)
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
Abs< T >::type abs(const T &t)
const bool m_enable_dqm_bypath_details
std::vector< Timing > m_run_summary
void fillPathMap(unsigned int pid, std::string const &name, std::vector< std::string > const &modules)
ProcessContext const * processContext() const
const bool m_enable_dqm_bypath_overhead
size_type findEndPath(std::string const &name) const
void watchPreModuleBeginJob(PreModuleBeginJob::slot_type const &iSlot)
void watchPostStreamEndRun(PostStreamEndRun::slot_type const &iSlot)
void mergeAndResetMEsRunSummaryCache(uint32_t run, uint32_t streamId, uint32_t moduleId)
StreamID const & streamID() const
void watchPreGlobalBeginRun(PreGlobalBeginRun::slot_type const &iSlot)
const bool m_enable_dqm_bymodule
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const double m_dqm_moduletime_range
unsigned int value() const
void watchPostModuleEventDelayedGet(PostModuleEventDelayedGet::slot_type const &iSlot)
bool m_enable_timing_exclusive
double querySourceTime(edm::StreamID) const
void watchPostGlobalEndRun(PostGlobalEndRun::slot_type const &iSlot)
void preSourceEvent(edm::StreamID)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void preEvent(edm::StreamContext const &)
const bool m_enable_timing_summary
bool accept() const
has this path accepted the event?
ProcessContext const * processContext() const
void postSourceEvent(edm::StreamID)
const bool m_enable_dqm_bymoduletype
const bool m_enable_dqm_summary
void watchPostStreamBeginRun(PostStreamBeginRun::slot_type const &iSlot)
double queryModuleTimeByType(edm::StreamID, const std::string &) const
double summary_premodules
std::string const & getEndPath(size_type const i) const
const bool m_enable_dqm_bypath_total
void watchPreStreamBeginRun(PreStreamBeginRun::slot_type const &iSlot)
Strings const & getTrigPaths() const
double queryModuleTime(edm::StreamID, const edm::ModuleDescription &) const
const bool m_enable_dqm_bypath_active
unsigned int maxNumberOfConcurrentRuns() const
std::vector< ModuleInfo * > modules
double summary_intermodules
EventID const & eventID() const
void watchPreSourceEvent(PreSourceEvent::slot_type const &iSlot)
TH1F * dqm_module_counter
static unsigned int processID(edm::ProcessContext const *)
double currentModuleTime(edm::StreamID) const
void preStreamBeginRun(edm::StreamContext const &)
std::vector< StreamData > m_stream
bool isSubProcess() const
tuple size
Write out results.
unsigned int reserveLuminosityPlots(std::string const &name, std::string const &title, std::string const &label, double range, double resolution)
void printProcessSummary(Timing const &total, TimingPerProcess const &summary, std::string const &label, std::string const &process) const
void preallocate(edm::service::SystemBounds const &)
const double m_dqm_eventtime_range
const double m_dqm_pathtime_resolution
unsigned int index() const
get index of module giving the status of this path