9 #include <unordered_map> 10 #include <unordered_set> 13 #include <boost/format.hpp> 14 #include <boost/range/irange.hpp> 45 template <
class Rep,
class Period>
46 double ms(std::chrono::duration<Rep, Period> duration)
48 return std::chrono::duration_cast<std::chrono::duration<double, std::milli>>(duration).
count();;
52 template <
class Rep,
class Period>
53 double ms(boost::chrono::duration<Rep, Period> duration)
55 return boost::chrono::duration_cast<boost::chrono::duration<double, boost::milli>>(duration).
count();;
81 time_real = boost::chrono::nanoseconds::zero();
216 paths(process.paths_.
size()),
217 endpaths(process.endPaths_.
size())
234 for (
unsigned int i: boost::irange(0ul,
paths.size()))
237 for (
unsigned int i: boost::irange(0ul,
endpaths.size()))
256 highlight(groups.
size()),
284 event += other.
event;
286 for (
unsigned int i: boost::irange(0ul,
highlight.size()))
289 for (
unsigned int i: boost::irange(0ul,
modules.size()))
292 for (
unsigned int i: boost::irange(0ul,
processes.size()))
316 #ifdef DEBUG_THREAD_CONCURRENCY 317 id = std::this_thread::get_id();
318 #endif // DEBUG_THREAD_CONCURRENCY 327 #ifdef DEBUG_THREAD_CONCURRENCY 328 assert(std::this_thread::get_id() ==
id);
329 #endif // DEBUG_THREAD_CONCURRENCY 334 store.time_thread = new_time_thread - time_thread;
335 store.time_real = new_time_real - time_real;
336 store.allocated = new_allocated - allocated;
337 store.deallocated = new_deallocated - deallocated;
338 time_thread = new_time_thread;
339 time_real = new_time_real;
340 allocated = new_allocated;
341 deallocated = new_deallocated;
346 #ifdef DEBUG_THREAD_CONCURRENCY 347 assert(std::this_thread::get_id() ==
id);
348 #endif // DEBUG_THREAD_CONCURRENCY 353 store.time_thread += new_time_thread - time_thread;
354 store.time_real += new_time_real - time_real;
355 store.allocated += new_allocated - allocated;
356 store.deallocated += new_deallocated - deallocated;
357 time_thread = new_time_thread;
358 time_real = new_time_real;
359 allocated = new_allocated;
360 deallocated = new_deallocated;
365 #ifdef DEBUG_THREAD_CONCURRENCY 366 assert(std::this_thread::get_id() ==
id);
367 #endif // DEBUG_THREAD_CONCURRENCY 373 store.time_real += boost::chrono::duration_cast<boost::chrono::nanoseconds>(new_time_real - time_real).
count();
374 store.allocated += new_allocated - allocated;
375 store.deallocated += new_deallocated - deallocated;
376 time_thread = new_time_thread;
377 time_real = new_time_real;
378 allocated = new_allocated;
379 deallocated = new_deallocated;
390 unsigned int lumisections,
398 time_thread_ = booker.
book1D(
399 name +
" time_thread",
400 title +
" processing time (cpu)",
402 time_thread_.
setXTitle(
"processing time [ms]");
403 time_thread_.setYTitle(y_title_ms.c_str());
405 time_real_ = booker.
book1D(
407 title +
" processing time (real)",
409 time_real_.
setXTitle(
"processing time [ms]");
410 time_real_.setYTitle(y_title_ms.c_str());
414 allocated_ = booker.
book1D(
416 title +
" allocated memory",
419 allocated_.setYTitle(y_title_kB.c_str());
421 deallocated_ = booker.
book1D(
422 name +
" deallocated",
423 title +
" deallocated memory",
426 deallocated_.setYTitle(y_title_kB.c_str());
433 name +
" time_thread_byls",
434 title +
" processing time (cpu) vs. lumisection",
435 lumisections, 0.5, lumisections + 0.5,
438 time_thread_byls_.
setXTitle(
"lumisection");
439 time_thread_byls_.setYTitle(
"processing time [ms]");
442 name +
" time_real_byls",
443 title +
" processing time (real) vs. lumisection",
444 lumisections, 0.5, lumisections + 0.5,
447 time_real_byls_.
setXTitle(
"lumisection");
448 time_real_byls_.setYTitle(
"processing time [ms]");
453 name +
" allocated_byls",
454 title +
" allocated memory vs. lumisection",
455 lumisections, 0.5, lumisections + 0.5,
458 allocated_byls_.
setXTitle(
"lumisection");
459 allocated_byls_.setYTitle(
"memory [kB]");
462 name +
" deallocated_byls",
463 title +
" deallocated memory vs. lumisection",
464 lumisections, 0.5, lumisections + 0.5,
467 deallocated_byls_.
setXTitle(
"lumisection");
468 deallocated_byls_.setYTitle(
"memory [kB]");
476 TH1::StatOverflows(
true);
481 if (time_thread_byls_)
488 time_real_byls_.fill(lumisection,
ms(data.
time_real));
494 allocated_byls_.fill(lumisection, kB(data.
allocated));
499 if (deallocated_byls_)
500 deallocated_byls_.fill(lumisection, kB(data.
deallocated));
507 TH1::StatOverflows(
true);
512 if (time_thread_byls_)
525 allocated_byls_.fill(lumisection, kB(data.
allocated));
530 if (deallocated_byls_)
531 deallocated_byls_.fill(lumisection, kB(data.
deallocated));
538 TH1::StatOverflows(
true);
546 time_thread_.fill(total, fraction);
548 if (time_thread_byls_)
549 time_thread_byls_.fill(lumisection, total, fraction);
554 time_real_.fill(total, fraction);
557 time_real_byls_.fill(lumisection, total, fraction);
562 allocated_.fill(total, fraction);
565 allocated_byls_.fill(lumisection, total, fraction);
570 deallocated_.fill(total, fraction);
572 if (deallocated_byls_)
573 deallocated_byls_.fill(lumisection, total, fraction);
584 unsigned int lumisections,
591 total_.book(booker,
"path", path.
name_, ranges, lumisections, byls);
594 module_counter_ = booker.
book1DD(
597 bins + 1, -0.5, bins + 0.5);
599 module_time_thread_total_ = booker.
book1DD(
600 "module_time_thread_total",
601 "total module time (cpu)",
602 bins, -0.5, bins - 0.5);
603 module_time_thread_total_.
setYTitle(
"processing time [ms]");
604 module_time_real_total_ = booker.
book1DD(
605 "module_time_real_total",
606 "total module time (real)",
607 bins, -0.5, bins - 0.5);
608 module_time_real_total_.
setYTitle(
"processing time [ms]");
611 module_allocated_total_ = booker.
book1DD(
612 "module_allocated_total",
613 "total allocated memory",
614 bins, -0.5, bins - 0.5);
615 module_allocated_total_.
setYTitle(
"memory [kB]");
616 module_deallocated_total_ = booker.
book1DD(
617 "module_deallocated_total",
618 "total deallocated memory",
619 bins, -0.5, bins - 0.5);
620 module_deallocated_total_.
setYTitle(
"memory [kB]");
622 for (
unsigned int bin: boost::irange(0u, bins)) {
625 module_counter_ .setBinLabel(
bin + 1, label.c_str());
626 module_time_thread_total_.setBinLabel(
bin + 1, label.c_str());
627 module_time_real_total_ .setBinLabel(
bin + 1, label.c_str());
630 module_allocated_total_ .setBinLabel(
bin + 1, label.c_str());
631 module_deallocated_total_.setBinLabel(
bin + 1, label.c_str());
634 module_counter_.setBinLabel(bins + 1,
"");
643 total_.fill(path.
total, ls);
646 for (
unsigned int i = 0;
i < path.
last; ++
i) {
649 module_counter_.fill(
i);
651 if (module_time_thread_total_)
652 module_time_thread_total_.fill(
i,
ms(
module.total.time_thread));
654 if (module_time_real_total_)
655 module_time_real_total_.fill(
i,
ms(
module.total.time_real));
657 if (module_allocated_total_)
658 module_allocated_total_.fill(
i, kB(
module.total.allocated));
660 if (module_deallocated_total_)
661 module_deallocated_total_.fill(
i, kB(
module.total.deallocated));
663 if (module_counter_ and path.
status)
664 module_counter_.fill(path.
last);
670 paths_(process.paths_.
size()),
671 endpaths_(process.endPaths_.
size())
682 unsigned int lumisections,
688 "process " + process.
name_,
"process " + process.
name_,
694 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
702 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
721 for (
unsigned int id: boost::irange(0ul,
paths_.size()))
725 for (
unsigned int id: boost::irange(0ul,
endpaths_.size()))
733 highlight_(groups.
size()),
734 modules_(job.
size()),
746 std::vector<GroupOfModules>
const& groups,
750 unsigned int lumisections,
766 "explicit",
"Event (explicit)",
772 "overhead",
"Overhead",
785 "lumi",
"LumiSection transitions",
791 "run",
"Run transtions",
798 for (
unsigned int group: boost::irange(0ul, groups.size())) {
808 for (
unsigned int pid: boost::irange(0ul, job.
processes().size())) {
820 for (
unsigned int id:
process.modules_)
847 for (
unsigned int id: boost::irange(0ul,
modules_.size()))
850 for (
unsigned int pid: boost::irange(0ul,
processes_.size()))
893 config.getUntrackedParameter<
double>(
"dqmPathTimeResolution" ),
894 config.getUntrackedParameter<
double>(
"dqmPathMemoryRange" ),
895 config.getUntrackedParameter<
double>(
"dqmPathMemoryResolution" ) } ),
897 config.getUntrackedParameter<
double>(
"dqmModuleTimeResolution" ),
898 config.getUntrackedParameter<
double>(
"dqmModuleMemoryRange" ),
899 config.getUntrackedParameter<
double>(
"dqmModuleMemoryResolution") } ),
907 tbb::task_scheduler_observer::observe();
983 LogDebug(
"FastTimerService") <<
"The FastTimerService received is currently not monitoring the signal \"" << signal <<
"\".\n";
991 edm::LogWarning(
"FastTimerService") <<
"The FastTimerService received the unsupported signal \"" << signal <<
"\".\n" 992 <<
"Please report how to reproduce the issue to cms-hlt@cern.ch .";
1056 auto safe_for_dqm =
"/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-+=_()# "s;
1058 if (safe_for_dqm.find(
c) == std::string::npos)
1277 template <
typename T>
1280 out <<
"FastReport ";
1281 if (label.size() < 60)
1282 for (
unsigned int i = (60-label.size()) / 2;
i > 0; --
i)
1284 out <<
' ' << label <<
" Summary ";
1285 if (label.size() < 60)
1286 for (
unsigned int i = (59-label.size()) / 2;
i > 0; --
i)
1291 template <
typename T>
1294 out <<
"FastReport CPU time Real time Allocated Deallocated " << label <<
"\n";
1298 template <
typename T>
1301 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1304 % +
static_cast<int64_t
>(kB(data.
allocated))
1309 template <
typename T>
1312 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1315 % +
static_cast<int64_t
>(kB(data.
allocated))
1320 template <
typename T>
1332 for (
unsigned int m: proc_d.modules_) {
1346 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1347 auto const&
name = proc_d.paths_[
p].name_;
1352 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1353 auto const&
name = proc_d.endPaths_[
p].name_;
1373 template <
typename T>
1377 out <<
"FastReport CPU time avg. when run Real time avg. when run Alloc. avg. when run Dealloc. avg. when run ";
1380 out <<
"FastReport CPU time avg. Real time avg. Alloc. avg. Dealloc. avg. ";
1382 out << label <<
'\n';
1385 template <
typename T>
1388 out <<
"FastReport CPU time sched. / depend. Real time sched. / depend. Alloc. sched. / depend. Dealloc. sched. / depend. ";
1390 out << label <<
'\n';
1393 template <
typename T>
1396 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %+10d kB %+10d kB %s\n")
1399 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0)
1400 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0)
1404 template <
typename T>
1407 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %10.1f ms %10.1f ms %+10d kB %+10d kB %+10d kB %+10d kB %s\n")
1410 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0) % (active ? +static_cast<int64_t>(kB(data.
allocated) / active) : 0)
1411 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0) % (active ? -static_cast<int64_t>(kB(data.
deallocated) / active) : 0)
1415 template <
typename T>
1418 out <<
boost::format(
"FastReport %10.1f ms %10.1f ms %10.1f ms %10.1f ms %+10d kB %+10d kB %+10d kB %+10d kB %s\n")
1421 % (events ? +static_cast<int64_t>(kB(data.
allocated) / events) : 0) % (events ? +static_cast<int64_t>(kB(total.
allocated) / events) : 0)
1422 % (events ? -static_cast<int64_t>(kB(data.
deallocated) / events) : 0) % (events ? -static_cast<int64_t>(kB(total.
deallocated) / events) : 0)
1426 template <
typename T>
1438 for (
unsigned int m: proc_d.modules_) {
1452 for (
unsigned int p = 0;
p <
proc.paths.size(); ++
p) {
1453 auto const&
name = proc_d.paths_[
p].name_;
1457 for (
unsigned int p = 0;
p <
proc.endpaths.size(); ++
p) {
1458 auto const&
name = proc_d.endPaths_[
p].name_;
1477 template <
typename T>
1503 unsigned int old_value = check.fetch_add(1, std::memory_order_acq_rel);
1524 auto &
data = stream.processes[
pid].total;
1525 for (
unsigned int i:
process.modules_)
1526 data += stream.modules[
i].total;
1527 stream.total +=
data;
1535 stream.event_measurement.measure_and_store(stream.event);
1540 stream.highlight[
group] += stream.modules[
i].total;
1570 auto & measurement =
thread();
1571 measurement.measure_and_accumulate(stream.overhead);
1572 stream.event_measurement = measurement;
1579 unsigned int id = md.
id();
1583 ++stream.modules[
id].events;
1591 unsigned int id = pc.
pathID();
1594 data.status =
false;
1603 unsigned int id = pc.
pathID();
1608 unsigned int index =
path.modules_on_path_.empty() ? 0 : status.
index() + 1;
1609 data.last =
path.modules_on_path_.empty() ? 0 :
path.last_dependency_of_module_[status.
index()];
1611 for (
unsigned int i = 0;
i <
index; ++
i) {
1612 auto const&
module = stream.modules[
path.modules_on_path_[
i]];
1615 for (
unsigned int i = 0;
i <
data.last; ++
i) {
1616 auto const&
module = stream.modules[
path.modules_and_dependencies_[
i]];
1633 unsigned int id = md.
id();
1636 auto &
module = stream.modules[
id];
1638 module.has_acquire =
true;
1654 unsigned int id = md.
id();
1657 auto &
module = stream.modules[
id];
1659 if (
module.has_acquire) {
1839 desc.
addUntracked<
bool>(
"enableDQMbyLumiSection",
false);
1840 desc.
addUntracked<
bool>(
"enableDQMbyProcesses",
false);
1841 desc.
addUntracked<
bool>(
"enableDQMTransitions",
false);
1844 desc.
addUntracked<
double>(
"dqmMemoryRange", 1000000. );
1845 desc.
addUntracked<
double>(
"dqmMemoryResolution", 5000. );
1847 desc.
addUntracked<
double>(
"dqmPathTimeResolution", 0.5);
1848 desc.
addUntracked<
double>(
"dqmPathMemoryRange", 1000000. );
1849 desc.
addUntracked<
double>(
"dqmPathMemoryResolution", 5000. );
1850 desc.
addUntracked<
double>(
"dqmModuleTimeRange", 40. );
1851 desc.
addUntracked<
double>(
"dqmModuleTimeResolution", 0.2);
1852 desc.
addUntracked<
double>(
"dqmModuleMemoryRange", 100000. );
1853 desc.
addUntracked<
double>(
"dqmModuleMemoryResolution", 500. );
1854 desc.
addUntracked<
unsigned>(
"dqmLumiSectionsRange", 2500 );
1858 highlightModulesDescription.
addUntracked<std::vector<std::string>>(
"modules", {});
1859 highlightModulesDescription.addUntracked<
std::string>(
"label",
"producers");
1879 descriptions.
add(
"FastTimerService", desc);
ConcurrentMonitorElement book1DD(Args &&...args)
void book(DQMStore::ConcurrentBooker &, std::string const &name, std::string const &title, PlotRanges const &ranges, unsigned int lumisections, bool byls)
ResourcesPerJob()=default
void preGlobalBeginRun(edm::GlobalContext const &)
void preModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const bool print_run_summary_
unsigned int maxNumberOfThreads() const
void fill(Resources const &, unsigned int lumisection)
ConcurrentMonitorElement bookProfile(Args &&...args)
void setComment(std::string const &value)
T getUntrackedParameter(std::string const &, T const &) const
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_global_lumi_check_
void postStreamBeginRun(edm::StreamContext const &)
LuminosityBlockIndex const & luminosityBlockIndex() const
void postGlobalEndLumi(edm::GlobalContext const &)
void postGlobalBeginLumi(edm::GlobalContext const &)
void on_scheduler_entry(bool worker) final
void postStreamEndLumi(edm::StreamContext const &)
void on_scheduler_exit(bool worker) final
std::vector< edm::ParameterSet > highlight_module_psets_
void postModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preGlobalEndRun(edm::GlobalContext const &)
PlotsPerElement event_ex_
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void fill_lumi(AtomicResources const &, unsigned int lumisection)
void preSourceLumi(edm::LuminosityBlockIndex)
void printSummary(T &out, ResourcesPerJob const &data, std::string const &label) const
AtomicResources operator+(AtomicResources const &other) const
void setYTitle(std::string const &title)
unsigned int concurrent_threads_
std::vector< unsigned int > modules_and_dependencies_
void postEventReadFromSource(edm::StreamContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
const PlotRanges dqm_event_ranges_
void postModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preSourceRun(edm::RunIndex)
void postModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
void unsupportedSignal(const std::string &signal) const
std::vector< GroupOfModules > highlight_modules_
ResourcesPerJob job_summary_
PlotsPerJob(ProcessCallGraph const &job, std::vector< GroupOfModules > const &groups)
void book(DQMStore::ConcurrentBooker &, std::string const &, ProcessCallGraph const &, ProcessCallGraph::PathType const &, PlotRanges const &ranges, unsigned int lumisections, bool byls)
unsigned int processId(edm::ProcessContext const &) const
TrainProcessor *const proc
PlotsPerProcess(ProcessCallGraph::ProcessType const &)
void preGlobalEndLumi(edm::GlobalContext const &)
std::vector< ResourcesPerPath > endpaths
LuminosityBlockID const & luminosityBlockID() const
AtomicResources overhead_
bool isFirstSubprocess(edm::StreamContext const &)
const bool enable_dqm_bynproc_
unsigned int concurrent_runs_
boost::chrono::nanoseconds time_real
std::atomic< uint64_t > deallocated
PlotsPerElement overhead_
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_global_run_check_
void postSourceRun(edm::RunIndex)
std::vector< ResourcesPerJob > streams_
std::atomic< uint64_t > allocated
RunIndex const & runIndex() const
void postPathEvent(edm::StreamContext const &, edm::PathContext const &, edm::HLTPathStatus const &)
std::vector< PlotsPerElement > highlight_
void preModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
ResourcesPerProcess & operator+=(ResourcesPerProcess const &other)
LuminosityBlockNumber_t luminosityBlock() const
const bool print_job_summary_
std::string const & moduleLabel() const
const bool enable_dqm_bypath_
edm::ModuleDescription const & source() const
tbb::enumerable_thread_specific< Measurement, tbb::cache_aligned_allocator< Measurement >, tbb::ets_key_per_instance > threads_
void postStreamBeginLumi(edm::StreamContext const &)
const PlotRanges dqm_path_ranges_
RunIndex const & runIndex() const
unsigned int maxNumberOfStreams() const
ResourcesPerProcess operator+(ResourcesPerProcess const &other) const
ResourcesPerJob operator+(ResourcesPerJob const &other) const
std::vector< ResourcesPerModule > modules
void book(DQMStore::ConcurrentBooker &, ProcessCallGraph const &, std::vector< GroupOfModules > const &, PlotRanges const &event_ranges, PlotRanges const &path_ranges, PlotRanges const &module_ranges, unsigned int lumisections, bool bymodule, bool bypath, bool byls, bool transitions)
void printEvent(T &out, ResourcesPerJob const &) const
void printHeader(T &out, std::string const &label) const
void postModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
std::mutex summary_mutex_
void printPathSummaryHeader(T &out, std::string const &label) const
ResourcesPerJob & operator+=(ResourcesPerJob const &other)
void printSummaryHeader(T &out, std::string const &label, bool detailed) const
void fill(ProcessCallGraph::ProcessType const &, ResourcesPerJob const &, ResourcesPerProcess const &, unsigned int ls)
void prePathEvent(edm::StreamContext const &, edm::PathContext const &)
LuminosityBlockIndex const & luminosityBlockIndex() const
std::vector< ResourcesPerJob > run_summary_
void printEventHeader(T &out, std::string const &label) const
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::EventID const &, edm::Timestamp const & > We also list in braces which AR_WATCH_USING_METHOD_ is used for those or
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
FastTimerService(const edm::ParameterSet &, edm::ActivityRegistry &)
void preModuleStreamEndLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postEvent(edm::StreamContext const &)
void preBeginJob(edm::PathsAndConsumesOfModulesBase const &, edm::ProcessContext const &)
void postGlobalEndRun(edm::GlobalContext const &)
static uint64_t deallocated()
ModuleDescription const * moduleDescription() const
std::unique_ptr< std::atomic< unsigned int >[]> subprocess_event_check_
void fill_fraction(Resources const &, Resources const &, unsigned int lumisection)
std::vector< ProcessType > const & processes() const
ResourcesPerModule operator+(ResourcesPerModule const &other) const
const unsigned int dqm_lumisections_range_
void postStreamEndRun(edm::StreamContext const &)
std::vector< PathType > paths_
void preModuleEvent(edm::StreamContext const &, edm::ModuleCallingContext const &)
ResourcesPerPath & operator+=(ResourcesPerPath const &other)
std::vector< PlotsPerElement > modules_
ConcurrentMonitorElement book1D(Args &&...args)
ProcessType const & processDescription(unsigned int) const
ParameterDescriptionNode * addOptionalNode(ParameterDescriptionNode const &node, bool writeToCfi)
unsigned int concurrent_lumis_
void preSourceConstruction(edm::ModuleDescription const &)
void printSummaryLine(T &out, Resources const &data, uint64_t events, std::string const &label) const
unsigned int pathID() const
format
Some error handling for the usage.
const bool enable_dqm_transitions_
ProcessContext const * processContext() const
void printEventLine(T &out, Resources const &data, std::string const &label) const
std::atomic< boost::chrono::nanoseconds::rep > time_thread
Resources operator+(Resources const &other) const
std::vector< Resources > highlight
const bool enable_dqm_bymodule_
void printPathSummaryLine(T &out, Resources const &data, Resources const &total, uint64_t events, std::string const &label) const
bin
set the eta bin as selection string.
StreamID const & streamID() const
void fill_run(AtomicResources const &)
const std::string processor_model
#define DEFINE_FWK_SERVICE(type)
const PlotRanges dqm_module_ranges_
std::vector< PlotsPerPath > endpaths_
static bool is_available()
const bool enable_dqm_byls_
std::vector< PlotsPerProcess > processes_
void postModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleEventDelayedGet(edm::StreamContext const &, edm::ModuleCallingContext const &)
const bool print_event_summary_
unsigned int value() const
void setCurrentFolder(const std::string &fullpath)
unsigned int maxNumberOfConcurrentLuminosityBlocks() const
unsigned long long uint64_t
void postModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void printTransition(T &out, AtomicResources const &data, std::string const &label) const
std::vector< AtomicResources > run_transition_
void preModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void postModuleStreamEndRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
static uint64_t allocated()
const std::string & pwd()
void postModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceEvent(edm::StreamID)
boost::chrono::nanoseconds time_thread
LuminosityBlockNumber_t luminosityBlock() const
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void preEvent(edm::StreamContext const &)
void postGlobalBeginRun(edm::GlobalContext const &)
ProcessContext const * processContext() const
void preStreamBeginLumi(edm::StreamContext const &)
ResourcesPerProcess(ProcessCallGraph::ProcessType const &process)
void ignoredSignal(const std::string &signal) const
void postSourceEvent(edm::StreamID)
void preModuleStreamBeginLumi(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndRun(edm::StreamContext const &)
char data[epos_bytes_allocation]
std::atomic< boost::chrono::nanoseconds::rep > time_real
void preModuleStreamBeginRun(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preStreamEndLumi(edm::StreamContext const &)
void measure_and_store(Resources &store)
ResourcesPerModule & operator+=(ResourcesPerModule const &other)
std::vector< PathType > endPaths_
void postModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalEndLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
std::unique_ptr< PlotsPerJob > plots_
unsigned int size() const
edm::ModuleDescription const & module(unsigned int module) const
void preGlobalBeginLumi(edm::GlobalContext const &)
unsigned int maxNumberOfConcurrentRuns() const
AtomicResources & operator+=(AtomicResources const &other)
Resources & operator+=(Resources const &other)
void preModuleEventPrefetching(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preSourceConstruction(edm::ModuleDescription const &)
void preModuleEventAcquire(edm::StreamContext const &, edm::ModuleCallingContext const &)
void preModuleGlobalEndRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
tbb::concurrent_unordered_set< std::string > unsupported_signals_
std::vector< PlotsPerPath > paths_
EventID const & eventID() const
void postSourceLumi(edm::LuminosityBlockIndex)
void postModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
std::vector< ResourcesPerProcess > processes
boost::date_time::subsecond_duration< boost::posix_time::time_duration, 1000000000 > nanoseconds
AtomicResources & operator=(AtomicResources const &other)
ProcessCallGraph callgraph_
void postModuleGlobalBeginLumi(edm::GlobalContext const &, edm::ModuleCallingContext const &)
void preStreamBeginRun(edm::StreamContext const &)
std::vector< ResourcesPerPath > paths
bool isSubProcess() const
ResourcesPerPath operator+(ResourcesPerPath const &other) const
void preModuleGlobalBeginRun(edm::GlobalContext const &, edm::ModuleCallingContext const &)
ParameterDescriptionBase * addVPSetUntracked(U const &iLabel, ParameterSetDescription const &validator, std::vector< ParameterSet > const &defaults)
std::vector< AtomicResources > lumi_transition_
static std::string const source
void book(DQMStore::ConcurrentBooker &, ProcessCallGraph const &, ProcessCallGraph::ProcessType const &, PlotRanges const &event_ranges, PlotRanges const &path_ranges, unsigned int lumisections, bool bypath, bool byls)
unsigned int concurrent_streams_
bool isLastSubprocess(std::atomic< unsigned int > &check)
void preallocate(edm::service::SystemBounds const &)
void fill(ProcessCallGraph const &, ResourcesPerJob const &, unsigned int ls)
void measure_and_accumulate(Resources &store)
void fill(ProcessCallGraph::PathType const &, ResourcesPerJob const &, ResourcesPerPath const &, unsigned int lumisection)
void setXTitle(std::string const &title)
unsigned int index() const