From 4d73a9c92095bce29d2cfbb725debe44dc9b4f4e Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Tue, 11 Jul 2023 22:28:58 +0200 Subject: [PATCH] cbmreco: Monitor output bytes for all detectors. --- algo/global/Reco.cxx | 31 ++++++++++++++++++++++++------- algo/global/Reco.h | 2 +- algo/unpack/Unpack.cxx | 10 +++++----- algo/unpack/UnpackChain.cxx | 11 ++++++++--- core/data/much/CbmMuchDigiData.h | 3 +++ core/data/rich/CbmRichDigiData.h | 2 ++ core/data/trd/CbmTrdDigiData.h | 2 ++ 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index f40d61430a..2a01f59149 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -97,7 +97,7 @@ RecoResults Reco::Run(const fles::Timeslice& ts) L_(info) << ">>> Processing TS " << ts.index(); xpu::set<cbm::algo::Params>(Params()); - std::vector<CbmStsDigi> digis; + Unpack::resultType unpackResult; UnpackMonitorData unpackMonitor; if (Opts().HasStep(Step::Unpack)) { @@ -108,9 +108,8 @@ RecoResults Reco::Run(const fles::Timeslice& ts) break; default: case RecoParams::UnpackMode::CPU: - auto result = fUnpack.Run(ts); - digis = result.first.fData.fSts.fDigis; - unpackMonitor = result.second; + unpackResult = fUnpack.Run(ts); + unpackMonitor = unpackResult.second; break; } } @@ -121,11 +120,11 @@ RecoResults Reco::Run(const fles::Timeslice& ts) if (Opts().HasStep(Step::LocalReco) && Opts().HasDetector(fles::Subsystem::STS)) - fStsHitFinder(digiTs.fData.fSts.fDigis); + fStsHitFinder(unpackResult.first.fData.fSts.fDigis); xpu::timings ts_times = xpu::pop_timer(); - QueueUnpackerMetrics(ts, unpackMonitor); + QueueUnpackerMetrics(ts, unpackMonitor, unpackResult.first); PrintTimings(ts_times); @@ -162,10 +161,21 @@ void Reco::PrintTimings(xpu::timings& timings) } } -void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorData& monitor) +void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorData& monitor, + const CbmDigiTimeslice& digis) { if (!HasMonitor()) return; + auto sizeBytes = [](const auto& d) { return d.size() * sizeof(d[0]); }; + + auto& stsDigis = digis.fData.fSts.fDigis; + auto& muchDigis = digis.fData.fMuch.fDigis; + auto& tofDigis = digis.fData.fTof.fDigis; + auto& bmonDigis = digis.fData.fT0.fDigis; + auto& trdDigis = digis.fData.fTrd.fDigis; + auto& trd2dDigis = digis.fData.fTrd2d.fDigis; + auto& richDigis = digis.fData.fRich.fDigis; + GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}}, { {"unpackBytesInSts", monitor.fNumBytesInSts}, @@ -175,6 +185,13 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa {"unpackBytesInTrd", monitor.fNumBytesInTrd}, {"unpackBytesInTrd2d", monitor.fNumBytesInTrd2d}, {"unpackBytesInRich", monitor.fNumBytesInRich}, + {"unpackBytesOutSts", sizeBytes(stsDigis)}, + {"unpackBytesOutMuch", sizeBytes(muchDigis)}, + {"unpackBytesOutTof", sizeBytes(tofDigis)}, + {"unpackBytesOutBmon", sizeBytes(bmonDigis)}, + {"unpackBytesOutTrd", sizeBytes(trdDigis)}, + {"unpackBytesOutTrd2d", sizeBytes(trd2dDigis)}, + {"unpackBytesOutRich", sizeBytes(richDigis)}, {"unpackNumErrInvalidEqId", monitor.fNumErrInvalidEqId}, {"unpackNumErrInvalidSysVer", monitor.fNumErrInvalidSysVer}, }); diff --git a/algo/global/Reco.h b/algo/global/Reco.h index ed30d43d1c..8cd099c806 100644 --- a/algo/global/Reco.h +++ b/algo/global/Reco.h @@ -49,7 +49,7 @@ namespace cbm::algo void Validate(const Options& opts); - void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&); + void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&, const CbmDigiTimeslice&); }; } // namespace cbm::algo diff --git a/algo/unpack/Unpack.cxx b/algo/unpack/Unpack.cxx index 2dbc219cdf..053383c12a 100644 --- a/algo/unpack/Unpack.cxx +++ b/algo/unpack/Unpack.cxx @@ -208,9 +208,9 @@ namespace cbm::algo // ----------------- Microslice loop ------------------------------------------ template<class Digi, class UnpackAlgo, class MonitorData> - void Unpack::MsLoop(const fles::Timeslice* timeslice, std::map<uint16_t, UnpackAlgo>& algoMap, const uint64_t comp, - const uint16_t eqId, std::vector<Digi>* digis, UnpackMonitorData& monitor, - std::vector<MonitorData>* monitorMs, uint8_t sys_ver) + size_t Unpack::MsLoop(const fles::Timeslice* timeslice, std::map<uint16_t, UnpackAlgo>& algoMap, const uint64_t comp, + const uint16_t eqId, std::vector<Digi>* digis, UnpackMonitorData& monitor, + std::vector<MonitorData>* monitorMs, uint8_t sys_ver) { // --- Component log size_t numBytesInComp = 0; @@ -223,13 +223,13 @@ namespace cbm::algo const auto algoIt = algoMap.find(eqId); if (algoIt == algoMap.end()) { monitor.fNumErrInvalidEqId++; - return; + return 0; } UnpackAlgo& algo = algoIt->second; if (timeslice->descriptor(comp, 0).sys_ver != sys_ver) { monitor.fNumErrInvalidSysVer++; - return; + return 0; } const uint64_t numMsInComp = timeslice->num_microslices(comp); diff --git a/algo/unpack/UnpackChain.cxx b/algo/unpack/UnpackChain.cxx index 52efc0a03d..153706642b 100644 --- a/algo/unpack/UnpackChain.cxx +++ b/algo/unpack/UnpackChain.cxx @@ -4,6 +4,7 @@ #include "UnpackChain.h" using namespace cbm::algo; +using fles::Subsystem; void UnpackChain::Init() { @@ -17,9 +18,13 @@ Unpack::resultType UnpackChain::Run(const fles::Timeslice& timeslice) auto& digis = result.first.fData; - L_(info) << "Timeslice contains " << digis.fSts.Size() << " STS Digis"; - L_(info) << "Timeslice contains " << digis.fTof.Size() << " TOF Digis"; - L_(info) << "Timeslice contains " << digis.fT0.Size() << " T0 Digis"; + if (Opts().HasDetector(Subsystem::STS)) L_(info) << "Timeslice contains " << digis.fSts.Size() << " STS Digis"; + if (Opts().HasDetector(Subsystem::TOF)) L_(info) << "Timeslice contains " << digis.fTof.Size() << " TOF Digis"; + if (Opts().HasDetector(Subsystem::BMON)) L_(info) << "Timeslice contains " << digis.fT0.Size() << " BMON Digis"; + if (Opts().HasDetector(Subsystem::MUCH)) L_(info) << "Timeslice contains " << digis.fMuch.Size() << " MUCH Digis"; + if (Opts().HasDetector(Subsystem::TRD)) L_(info) << "Timeslice contains " << digis.fTrd.Size() << " TRD Digis"; + if (Opts().HasDetector(Subsystem::TRD2D)) L_(info) << "Timeslice contains " << digis.fTrd2d.Size() << " TRD2D Digis"; + if (Opts().HasDetector(Subsystem::RICH)) L_(info) << "Timeslice contains " << digis.fRich.Size() << " RICH Digis"; return result; } diff --git a/core/data/much/CbmMuchDigiData.h b/core/data/much/CbmMuchDigiData.h index 9e748a8334..4c3b2f08f2 100644 --- a/core/data/much/CbmMuchDigiData.h +++ b/core/data/much/CbmMuchDigiData.h @@ -43,6 +43,9 @@ public: /** @brief Clear content **/ void Clear() { fDigis.clear(); } + /** @brief Size */ + size_t Size() const { return fDigis.size(); } + // --- ROOT serializer #ifndef NO_ROOT ClassDefNV(CbmMuchDigiData, 1); diff --git a/core/data/rich/CbmRichDigiData.h b/core/data/rich/CbmRichDigiData.h index 07597098c3..4e9c927d22 100644 --- a/core/data/rich/CbmRichDigiData.h +++ b/core/data/rich/CbmRichDigiData.h @@ -43,6 +43,8 @@ public: /** @brief Clear content **/ void Clear() { fDigis.clear(); } + size_t Size() const { return fDigis.size(); } + // --- ROOT serializer #ifndef NO_ROOT ClassDefNV(CbmRichDigiData, 1); diff --git a/core/data/trd/CbmTrdDigiData.h b/core/data/trd/CbmTrdDigiData.h index a3c3b750ce..4a7db7a23b 100644 --- a/core/data/trd/CbmTrdDigiData.h +++ b/core/data/trd/CbmTrdDigiData.h @@ -43,6 +43,8 @@ public: /** @brief Clear content **/ void Clear() { fDigis.clear(); } + size_t Size() const { return fDigis.size(); } + // --- ROOT serializer #ifndef NO_ROOT ClassDefNV(CbmTrdDigiData, 1); -- GitLab