HighLAND
MemoryUsage.cxx
1 #include <MemoryUsage.hxx>
2 #include "TH1F.h"
3 #include <algorithm>
4 #include <stdio.h>
5 #include <iostream>
6 
8  fEnabled(false) {
9 }
10 
11 MemoryUsage::~MemoryUsage() {
12 }
13 
14 void MemoryUsage::Enable(bool enable) {
15  fEnabled = enable;
16 }
17 
19  if (!fEnabled) {
20  return;
21  }
22  ProcInfo_t info;
23  gSystem->GetProcInfo(&info);
24  fEventMemory.push_back(info);
25 }
26 
28  if (!fEnabled) {
29  return;
30  }
31 
32  // Create the histograms we need.
33  int numBins = fEventMemory.size();
34  TH1F hMemRes("memory_resident", "Resident memory usage", numBins, 0, numBins);
35  hMemRes.GetXaxis()->SetTitle("Event");
36  hMemRes.GetYaxis()->SetTitle("Resident memory (GB)");
37 
38  TH1F hMemVirt("memory_virtual", "Virtual memory usage", numBins, 0, numBins);
39  hMemVirt.GetXaxis()->SetTitle("Event");
40  hMemVirt.GetYaxis()->SetTitle("Virtual memory (GB)");
41 
42  // Convert the vector of memory usage to entries in the
43  // histograms. Memory usage is converted from KB to GB
44  // for easier human-based parsing of the numbers.
45  int bin = 1;
46  for (std::vector<ProcInfo_t>::iterator it = fEventMemory.begin(); it != fEventMemory.end(); it++, bin++) {
47  ProcInfo_t info = (*it);
48  hMemRes.SetBinContent(bin, info.fMemResident / (1024. * 1024.));
49  hMemVirt.SetBinContent(bin, info.fMemVirtual / (1024. * 1024.));
50  }
51 
52  hMemRes.Write();
53  hMemVirt.Write();
54 
55  // Log the peak memory usage.
56  double maxMemResident = (std::max_element(fEventMemory.begin(), fEventMemory.end(), CmpMemResident()))->fMemResident;
57  double maxMemVirtual = (std::max_element(fEventMemory.begin(), fEventMemory.end(), CmpMemVirtual()))->fMemVirtual;
58 
59  std::cout << "Maximum resident memory usage: " << (maxMemResident / (1024. * 1024.)) << " GB" << std::endl;
60  std::cout << "Maximum virtual memory usage: " << (maxMemVirtual / (1024. * 1024.)) << " GB" << std::endl;
61 }
void LogMemory()
Definition: MemoryUsage.cxx:18
MemoryUsage()
Construct the memory usage class with logging disabled.
Definition: MemoryUsage.cxx:7
void Enable(bool enable=true)
Definition: MemoryUsage.cxx:14
void Write()
Write histograms of the memory usage to the output file.
Definition: MemoryUsage.cxx:27