ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/


//
// Origin:  marian.ivanov@cern.ch
//
//  Make   a log file for the CPU and Memory usage
//
//  Principles:
//  Snapshots of the system information are writen to the text log files.
//  Text files were chosen in order to get the ouptu also in case code 
//  is crashing. 
//  Following information is stored in the log file:
//  TTimeStamp stamp;
//  CpuInfo_t  cpuInfo;
//  MemInfo_t  memInfo;
//  ProcInfo_t procInfo;
// 
//  Root TSystem is used to retrieve this information:
//  gSystem->GetCpuInfo(&cpuInfo, 10);
//  gSystem->GetMemInfo(&memInfo);
//  gSystem->GetProcInfo(&procInfo);
//  for details see:
//  http://root.cern.ch/root/html/TUnixSystem.html
//  http://root.cern.ch/root/html/ProcInfo_t.html
//  http://root.cern.ch/root/html/MemInfo_t.html
//  http://root.cern.ch/root/html/CpuInfo_t.html
//  -------------------------------------------------------------------
//  class CpuInfo_t
//   Float_t	fIdle	cpu idle percentage
//   Float_t	fLoad15m	cpu load average over 15 m
//   Float_t	fLoad1m	cpu load average over 1 m
//   Float_t	fLoad5m	cpu load average over 5 m
//   Float_t	fSys	cpu sys load in percentage
//   Float_t	fTotal	cpu user+sys load in percentage
//   Float_t	fUser	cpu user load in percentage

//  -------------------------------------------------------------------
//  class ProcInfo_t:
//  Float_t	fCpuSys	system time used by this process in seconds
//  Float_t	fCpuUser	user time used by this process in seconds
//  Long_t	fMemResident	resident memory used by this process in KB
//  Long_t	fMemVirtual	virtual memory used by this process in KB
//  -------------------------------------------------------------------


//  The information from the AliSysInfo can be used as measurement
//  of the code quality. Be aware of the limitation induced by
//  using only system info described in the  AliSysInfo::Test() function
// 
//  The example usage of the AliSysInfo is shown in the
//  AliSysInfo::Test() example.
//  
//  
//
//  
//  The typical usage in the AliRoot code:
//  Make a set of stamps in the code in the place of interest
//  e.g. 
//
//  AliSysInfo::AddStamp("Start");
//
//  loader->UnloadRecPoints();
//    AliSysInfo::AddStamp(Form("LRec%s_%d",fgkDetectorName[iDet],eventNr), iDet,1,eventNr);
//

// The log file can be transformed to the tree - to make a visualization
// See $ALICE_ROOT/macros/PlotSysInfo.C as an example


#include <Riostream.h>
//#include "AliLog.h"
#include "TStopwatch.h"
#include "TSystem.h"
#include "TTree.h"
#include "TFile.h"

#include "TTimeStamp.h"
#include "AliSysInfo.h"
#include "TBufferFile.h"

//#include "TMemStatManager.h"  //USE IFDEF


using std::endl;
using std::cout;
using std::ios_base;
using std::setprecision;
ClassImp(AliSysInfo)

AliSysInfo* AliSysInfo::fInstance=0;
Bool_t AliSysInfo::fgVerbose = kTRUE;

AliSysInfo::AliSysInfo():
    TObject(),
    fSysWatch(0),
    fTimer(0),
    fMemStat(0),
    fCallBackFunc(0),
    fNCallBack(0)
{
  fTimer = new TStopwatch;
  fSysWatch  = new fstream("syswatch.log", ios_base::out|ios_base::trunc);

  //hname/C:sname/C:sec/D:mI.fMemUsed/F:mI.fSwapUsed/F:pI.fMemResident/F:pI.fMemVirtual/F:cI.fUser/F:cI.fSys/F:cI.fCpuUser/F:pI.fCpuSys/F


  (*fSysWatch) <<"hname"<<"/C:"               // hname - hostname  
               <<"sname"<<"/C:"              // stamp name
               <<"id0"<<"/I:"                // 0 id
               <<"id1"<<"/I:"                // 1 id
               <<"id2"<<"/I:"                // 1 id
               <<"id3"<<"/I:"                // 1 id
               <<"first"<<"/D:"              // first stamp
    //
	       <<"stampSec"<<"/D:"         // time  - time stamp in seconds
	       <<"mi.fMemUsed"<<"/D:"       // system info 
	       <<"mi.fSwapUsed"<<"/D:"      //
	       <<"cI.fUser"<<"/D:"         //
	       <<"cI.fSys"<<"/D:"         //
	       <<"cI.fLoad1m"<<"/D:"         //
	       <<"cI.fLoad5m"<<"/D:"         //
	       <<"cI.fLoad15m"<<"/D:"         //
    // 
	       <<"pI.fMemResident"<<"/D:"  // process info
	       <<"pI.fMemVirtual"<<"/D:"   //    
	       <<"pI.fCpuUser"<<"/D:"      //
	       <<"pI.fCpuSys"<<"/D:"       //
    //
    	       <<"stampOldSec"<<"/D:"         // time  - time stamp in seconds
	       <<"miOld.fMemUsed"<<"/D:"       // system info - previous
	       <<"miOld.fSwapUsed"<<"/D:"      //
	       <<"cIOld.fUser"<<"/D:"         //
	       <<"cIOld.fSys"<<"/D:"         //
    // 
	       <<"pIOld.fMemResident"<<"/D:"  // process info -previous
	       <<"pIOld.fMemVirtual"<<"/D:"   //    
	       <<"pIOld.fCpuUser"<<"/D:"      //
	       <<"pIOld.fCpuSys"<<"/D:"       //
    // 
	       <<"fileBytesRead"<<"/D:"       // file IO information
	       <<"fileBytesWritten"<<"/D:"    //    
	       <<"fileCounter"<<"/D:"         //
	       <<"fileReadCalls"<<"/D"        //
	       << endl;
  
}




AliSysInfo * AliSysInfo::Instance(){
  //
  //
  //
  if (!fInstance){
    fInstance = new AliSysInfo;
  }
  return fInstance;
}


void AliSysInfo::AddStamp(const char *sname, Int_t id0, Int_t id1, Int_t id2, Int_t id3){
  //
  // 
  if (!fgVerbose) return;
  //
  //
  TTimeStamp stamp;
  CpuInfo_t  cpuInfo;
  MemInfo_t  memInfo;
  ProcInfo_t procInfo;  
  gSystem->GetCpuInfo(&cpuInfo, 10);
  gSystem->GetMemInfo(&memInfo);
  gSystem->GetProcInfo(&procInfo);
  //  procInfo.fMemVirtual/=1024;  //size in MBy
  //procInfo.fMemResident/=1024;  //size in MBy

  const char * hname = gSystem->HostName();

  static Int_t entry=0;
  static Double_t  first=stamp.GetSec()+stamp.GetNanoSec()/1000000000.;
  //
  static TTimeStamp stampOld;
  static CpuInfo_t  cpuInfoOld;
  static MemInfo_t  memInfoOld;
  static ProcInfo_t procInfoOld;  
  Double_t fileBytesRead    = TFile::GetFileBytesRead();
  Double_t fileBytesWritten = TFile::GetFileBytesWritten();
  Double_t fileCounter      = TFile::GetFileCounter();
  Double_t fileReadCalls    = TFile::GetFileReadCalls();

  //const char *delim = "\t";
  const char *delim = " ";

  (*(Instance()->fSysWatch)) 
    << hname   <<delim               // hname - hostname  
    << sname    <<delim              // stamp name
    << id0      <<delim
    << id1      <<delim
    << id2      <<delim
    << id3      <<delim
    <<setprecision(15)<< first    <<delim              // first stamp               
    //
    <<setprecision(15)<< stamp.GetSec()+stamp.GetNanoSec()/1000000000.<<delim         // time  - time stamp in seconds
    << memInfo.fMemUsed<<delim       // system info 
    << memInfo.fSwapUsed<<delim      //
    << cpuInfo.fUser <<delim         //
    << cpuInfo.fSys  <<delim         //
    << cpuInfo.fLoad1m  <<"\t"         //
    << cpuInfo.fLoad5m  <<"\t"         //
    << cpuInfo.fLoad15m  <<"\t"         //
    // 
    <<setprecision(15)<< procInfo.fMemResident/1024.<<delim  // process info
    <<setprecision(15)<< procInfo.fMemVirtual/1024.<<delim   //    
    << procInfo.fCpuUser<<delim      //
    << procInfo.fCpuSys<<delim       //
    //
    <<setprecision(15)<< stampOld.GetSec()+stampOld.GetNanoSec()/1000000000.<<delim         // time  - time stamp in seconds
    << memInfoOld.fMemUsed<<delim       // system info - previous
    << memInfoOld.fSwapUsed<<delim      //
    << cpuInfoOld.fUser <<delim         //
    << cpuInfoOld.fSys  <<delim         //
    // 
    <<setprecision(15)<< procInfoOld.fMemResident/1024.<<delim  // process info -previous
    <<setprecision(15)<< procInfoOld.fMemVirtual/1024.<<delim   //    
    << procInfoOld.fCpuUser<<delim      //
    << procInfoOld.fCpuSys<<delim       //
    //
    <<fileBytesRead<<delim           // file IO information
    <<fileBytesWritten<<delim        //    
    <<fileCounter<<delim             //
    <<fileReadCalls                  //
    << endl;

  stampOld   = stamp;
  cpuInfoOld = cpuInfo;
  memInfoOld = memInfo;
  procInfoOld= procInfo;

  //  if (fInstance->fMemStat) fInstance->fMemStat->AddStamps(sname);
  for (Int_t icallback=0; icallback<Instance()->fNCallBack; icallback++){
    Instance()->fCallBackFunc[icallback](sname);
  }
  entry++;
}


TTree * AliSysInfo::MakeTree(const char *lname){
  // char * lname = "syswatch.log"
  TTree * tree = new TTree;
  tree->ReadFile(lname);
  tree->SetAlias("deltaT","stampSec-stampOldSec");
  tree->SetAlias("T","stampSec-first");
  tree->SetAlias("deltaVM","(pI.fMemVirtual-pIOld.fMemVirtual)");
  tree->SetAlias("VM","pI.fMemVirtual");
  return tree;
}


Bool_t AliSysInfo::Contain(const char * str1, const char * str2){
  //
  //
  //
  TString str(str1);
  return str.Contains(str2);
}



void AliSysInfo::OpenMemStat(){
  //
  //
  //
  //USE IFDEF if MEMSTAT ENABLED  
  //  Instance()->fMemStat = TMemStatManager::GetInstance();
  //   Instance()->fMemStat->SetAutoStamp(10000000, 10000000,1000000);
  //   Instance()->fMemStat->Enable();  
}

void AliSysInfo::CloseMemStat(){
  //
  //
  //
  //USE IFDEF if MEMSTAT ENABLED
  //if (Instance()->fMemStat  == TMemStatManager::GetInstance()) Instance()->fMemStat->Close();
  //Instance()->fMemStat=0;
}



void AliSysInfo::AddCallBack(StampCallback_t callback){
  //
  // add cal back function
  //
  AliSysInfo *info =  Instance();
  if (!info->fCallBackFunc)
    info->fCallBackFunc = new StampCallback_t[100];
  info->fCallBackFunc[info->fNCallBack]=callback;
  info->fNCallBack++;
}



TTree*  AliSysInfo::Test(){
  //
  // Test example for AliSysInfo:
  // 1. Make huge memory leak
  // 2. Slow down execution
  /*
    To use the test:
    TTree * tree = AliSysInfo::Test();
    // Make alias what we set as input
    tree->SetAlias("deltaVMIn","(id0*100000+id1*10000+id2*1000)/1000000.")
    tree->SetAlias("deltaVM","(pI.fMemVirtual-pIOld.fMemVirtual)");
    tree->SetAlias("deltaTIn","(id1+id0*10)");
    tree->SetAlias("deltaT","stampSec-stampOldSec");
    //
    tree->SetMarkerStyle(23); tree->SetMarkerSize(0.5);
    // Memory usage
    tree->Draw("deltaVM:deltaVMIn","Entry$>0");
    // or alternative
    tree->Draw("deltaVM:deltaVMIn","Entry$>0","prof");
    //
    // draw time usage
    tree->Draw("deltaT:deltaTIn","Entry$>0"); 
  */
  //
  // The delta of VM as obtained from the AliSysInfo starts to be proportional
  // to  the input allocation after 0.12 MBy (and it is system dependent) 
  // Bellow these limit the deltaVM can be used only in mean.
  // (compare first and  profile histogram)
  for (Int_t id0=0; id0<5; id0++)
    for (Int_t id1=1; id1<10; id1++)
      for (Int_t id2=0; id2<20; id2++){
	new Char_t[id2*1000+id1*10000+id0*100000];  // emulate memory leak
	gSystem->Sleep(id1+id0*10);         // emulate CPU usage 
	AliSysInfo::AddStamp("Leak",id0,id1,id2);
      }
  TTree * tree = AliSysInfo::MakeTree("syswatch.log");
  return tree;  
}

Double_t AliSysInfo::EstimateObjectSize(TObject* object){
  //
  // Estimate size of object as represented in the memory size in bytes
  // Warnings:
  //  1. Only data memebrs which are persistent are counted
  //  2. Local copy of the object is temporary created in memory
  //  3. Do not use it in standard programs, time and memory consument procedure
  //
  if (!object) return 0;
  TBufferFile * file = new TBufferFile(TBuffer::kWrite);
  file->WriteObject(object);
  Double_t size=file->Length();
  delete file;
  return size;
}
 AliSysInfo.cxx:1
 AliSysInfo.cxx:2
 AliSysInfo.cxx:3
 AliSysInfo.cxx:4
 AliSysInfo.cxx:5
 AliSysInfo.cxx:6
 AliSysInfo.cxx:7
 AliSysInfo.cxx:8
 AliSysInfo.cxx:9
 AliSysInfo.cxx:10
 AliSysInfo.cxx:11
 AliSysInfo.cxx:12
 AliSysInfo.cxx:13
 AliSysInfo.cxx:14
 AliSysInfo.cxx:15
 AliSysInfo.cxx:16
 AliSysInfo.cxx:17
 AliSysInfo.cxx:18
 AliSysInfo.cxx:19
 AliSysInfo.cxx:20
 AliSysInfo.cxx:21
 AliSysInfo.cxx:22
 AliSysInfo.cxx:23
 AliSysInfo.cxx:24
 AliSysInfo.cxx:25
 AliSysInfo.cxx:26
 AliSysInfo.cxx:27
 AliSysInfo.cxx:28
 AliSysInfo.cxx:29
 AliSysInfo.cxx:30
 AliSysInfo.cxx:31
 AliSysInfo.cxx:32
 AliSysInfo.cxx:33
 AliSysInfo.cxx:34
 AliSysInfo.cxx:35
 AliSysInfo.cxx:36
 AliSysInfo.cxx:37
 AliSysInfo.cxx:38
 AliSysInfo.cxx:39
 AliSysInfo.cxx:40
 AliSysInfo.cxx:41
 AliSysInfo.cxx:42
 AliSysInfo.cxx:43
 AliSysInfo.cxx:44
 AliSysInfo.cxx:45
 AliSysInfo.cxx:46
 AliSysInfo.cxx:47
 AliSysInfo.cxx:48
 AliSysInfo.cxx:49
 AliSysInfo.cxx:50
 AliSysInfo.cxx:51
 AliSysInfo.cxx:52
 AliSysInfo.cxx:53
 AliSysInfo.cxx:54
 AliSysInfo.cxx:55
 AliSysInfo.cxx:56
 AliSysInfo.cxx:57
 AliSysInfo.cxx:58
 AliSysInfo.cxx:59
 AliSysInfo.cxx:60
 AliSysInfo.cxx:61
 AliSysInfo.cxx:62
 AliSysInfo.cxx:63
 AliSysInfo.cxx:64
 AliSysInfo.cxx:65
 AliSysInfo.cxx:66
 AliSysInfo.cxx:67
 AliSysInfo.cxx:68
 AliSysInfo.cxx:69
 AliSysInfo.cxx:70
 AliSysInfo.cxx:71
 AliSysInfo.cxx:72
 AliSysInfo.cxx:73
 AliSysInfo.cxx:74
 AliSysInfo.cxx:75
 AliSysInfo.cxx:76
 AliSysInfo.cxx:77
 AliSysInfo.cxx:78
 AliSysInfo.cxx:79
 AliSysInfo.cxx:80
 AliSysInfo.cxx:81
 AliSysInfo.cxx:82
 AliSysInfo.cxx:83
 AliSysInfo.cxx:84
 AliSysInfo.cxx:85
 AliSysInfo.cxx:86
 AliSysInfo.cxx:87
 AliSysInfo.cxx:88
 AliSysInfo.cxx:89
 AliSysInfo.cxx:90
 AliSysInfo.cxx:91
 AliSysInfo.cxx:92
 AliSysInfo.cxx:93
 AliSysInfo.cxx:94
 AliSysInfo.cxx:95
 AliSysInfo.cxx:96
 AliSysInfo.cxx:97
 AliSysInfo.cxx:98
 AliSysInfo.cxx:99
 AliSysInfo.cxx:100
 AliSysInfo.cxx:101
 AliSysInfo.cxx:102
 AliSysInfo.cxx:103
 AliSysInfo.cxx:104
 AliSysInfo.cxx:105
 AliSysInfo.cxx:106
 AliSysInfo.cxx:107
 AliSysInfo.cxx:108
 AliSysInfo.cxx:109
 AliSysInfo.cxx:110
 AliSysInfo.cxx:111
 AliSysInfo.cxx:112
 AliSysInfo.cxx:113
 AliSysInfo.cxx:114
 AliSysInfo.cxx:115
 AliSysInfo.cxx:116
 AliSysInfo.cxx:117
 AliSysInfo.cxx:118
 AliSysInfo.cxx:119
 AliSysInfo.cxx:120
 AliSysInfo.cxx:121
 AliSysInfo.cxx:122
 AliSysInfo.cxx:123
 AliSysInfo.cxx:124
 AliSysInfo.cxx:125
 AliSysInfo.cxx:126
 AliSysInfo.cxx:127
 AliSysInfo.cxx:128
 AliSysInfo.cxx:129
 AliSysInfo.cxx:130
 AliSysInfo.cxx:131
 AliSysInfo.cxx:132
 AliSysInfo.cxx:133
 AliSysInfo.cxx:134
 AliSysInfo.cxx:135
 AliSysInfo.cxx:136
 AliSysInfo.cxx:137
 AliSysInfo.cxx:138
 AliSysInfo.cxx:139
 AliSysInfo.cxx:140
 AliSysInfo.cxx:141
 AliSysInfo.cxx:142
 AliSysInfo.cxx:143
 AliSysInfo.cxx:144
 AliSysInfo.cxx:145
 AliSysInfo.cxx:146
 AliSysInfo.cxx:147
 AliSysInfo.cxx:148
 AliSysInfo.cxx:149
 AliSysInfo.cxx:150
 AliSysInfo.cxx:151
 AliSysInfo.cxx:152
 AliSysInfo.cxx:153
 AliSysInfo.cxx:154
 AliSysInfo.cxx:155
 AliSysInfo.cxx:156
 AliSysInfo.cxx:157
 AliSysInfo.cxx:158
 AliSysInfo.cxx:159
 AliSysInfo.cxx:160
 AliSysInfo.cxx:161
 AliSysInfo.cxx:162
 AliSysInfo.cxx:163
 AliSysInfo.cxx:164
 AliSysInfo.cxx:165
 AliSysInfo.cxx:166
 AliSysInfo.cxx:167
 AliSysInfo.cxx:168
 AliSysInfo.cxx:169
 AliSysInfo.cxx:170
 AliSysInfo.cxx:171
 AliSysInfo.cxx:172
 AliSysInfo.cxx:173
 AliSysInfo.cxx:174
 AliSysInfo.cxx:175
 AliSysInfo.cxx:176
 AliSysInfo.cxx:177
 AliSysInfo.cxx:178
 AliSysInfo.cxx:179
 AliSysInfo.cxx:180
 AliSysInfo.cxx:181
 AliSysInfo.cxx:182
 AliSysInfo.cxx:183
 AliSysInfo.cxx:184
 AliSysInfo.cxx:185
 AliSysInfo.cxx:186
 AliSysInfo.cxx:187
 AliSysInfo.cxx:188
 AliSysInfo.cxx:189
 AliSysInfo.cxx:190
 AliSysInfo.cxx:191
 AliSysInfo.cxx:192
 AliSysInfo.cxx:193
 AliSysInfo.cxx:194
 AliSysInfo.cxx:195
 AliSysInfo.cxx:196
 AliSysInfo.cxx:197
 AliSysInfo.cxx:198
 AliSysInfo.cxx:199
 AliSysInfo.cxx:200
 AliSysInfo.cxx:201
 AliSysInfo.cxx:202
 AliSysInfo.cxx:203
 AliSysInfo.cxx:204
 AliSysInfo.cxx:205
 AliSysInfo.cxx:206
 AliSysInfo.cxx:207
 AliSysInfo.cxx:208
 AliSysInfo.cxx:209
 AliSysInfo.cxx:210
 AliSysInfo.cxx:211
 AliSysInfo.cxx:212
 AliSysInfo.cxx:213
 AliSysInfo.cxx:214
 AliSysInfo.cxx:215
 AliSysInfo.cxx:216
 AliSysInfo.cxx:217
 AliSysInfo.cxx:218
 AliSysInfo.cxx:219
 AliSysInfo.cxx:220
 AliSysInfo.cxx:221
 AliSysInfo.cxx:222
 AliSysInfo.cxx:223
 AliSysInfo.cxx:224
 AliSysInfo.cxx:225
 AliSysInfo.cxx:226
 AliSysInfo.cxx:227
 AliSysInfo.cxx:228
 AliSysInfo.cxx:229
 AliSysInfo.cxx:230
 AliSysInfo.cxx:231
 AliSysInfo.cxx:232
 AliSysInfo.cxx:233
 AliSysInfo.cxx:234
 AliSysInfo.cxx:235
 AliSysInfo.cxx:236
 AliSysInfo.cxx:237
 AliSysInfo.cxx:238
 AliSysInfo.cxx:239
 AliSysInfo.cxx:240
 AliSysInfo.cxx:241
 AliSysInfo.cxx:242
 AliSysInfo.cxx:243
 AliSysInfo.cxx:244
 AliSysInfo.cxx:245
 AliSysInfo.cxx:246
 AliSysInfo.cxx:247
 AliSysInfo.cxx:248
 AliSysInfo.cxx:249
 AliSysInfo.cxx:250
 AliSysInfo.cxx:251
 AliSysInfo.cxx:252
 AliSysInfo.cxx:253
 AliSysInfo.cxx:254
 AliSysInfo.cxx:255
 AliSysInfo.cxx:256
 AliSysInfo.cxx:257
 AliSysInfo.cxx:258
 AliSysInfo.cxx:259
 AliSysInfo.cxx:260
 AliSysInfo.cxx:261
 AliSysInfo.cxx:262
 AliSysInfo.cxx:263
 AliSysInfo.cxx:264
 AliSysInfo.cxx:265
 AliSysInfo.cxx:266
 AliSysInfo.cxx:267
 AliSysInfo.cxx:268
 AliSysInfo.cxx:269
 AliSysInfo.cxx:270
 AliSysInfo.cxx:271
 AliSysInfo.cxx:272
 AliSysInfo.cxx:273
 AliSysInfo.cxx:274
 AliSysInfo.cxx:275
 AliSysInfo.cxx:276
 AliSysInfo.cxx:277
 AliSysInfo.cxx:278
 AliSysInfo.cxx:279
 AliSysInfo.cxx:280
 AliSysInfo.cxx:281
 AliSysInfo.cxx:282
 AliSysInfo.cxx:283
 AliSysInfo.cxx:284
 AliSysInfo.cxx:285
 AliSysInfo.cxx:286
 AliSysInfo.cxx:287
 AliSysInfo.cxx:288
 AliSysInfo.cxx:289
 AliSysInfo.cxx:290
 AliSysInfo.cxx:291
 AliSysInfo.cxx:292
 AliSysInfo.cxx:293
 AliSysInfo.cxx:294
 AliSysInfo.cxx:295
 AliSysInfo.cxx:296
 AliSysInfo.cxx:297
 AliSysInfo.cxx:298
 AliSysInfo.cxx:299
 AliSysInfo.cxx:300
 AliSysInfo.cxx:301
 AliSysInfo.cxx:302
 AliSysInfo.cxx:303
 AliSysInfo.cxx:304
 AliSysInfo.cxx:305
 AliSysInfo.cxx:306
 AliSysInfo.cxx:307
 AliSysInfo.cxx:308
 AliSysInfo.cxx:309
 AliSysInfo.cxx:310
 AliSysInfo.cxx:311
 AliSysInfo.cxx:312
 AliSysInfo.cxx:313
 AliSysInfo.cxx:314
 AliSysInfo.cxx:315
 AliSysInfo.cxx:316
 AliSysInfo.cxx:317
 AliSysInfo.cxx:318
 AliSysInfo.cxx:319
 AliSysInfo.cxx:320
 AliSysInfo.cxx:321
 AliSysInfo.cxx:322
 AliSysInfo.cxx:323
 AliSysInfo.cxx:324
 AliSysInfo.cxx:325
 AliSysInfo.cxx:326
 AliSysInfo.cxx:327
 AliSysInfo.cxx:328
 AliSysInfo.cxx:329
 AliSysInfo.cxx:330
 AliSysInfo.cxx:331
 AliSysInfo.cxx:332
 AliSysInfo.cxx:333
 AliSysInfo.cxx:334
 AliSysInfo.cxx:335
 AliSysInfo.cxx:336
 AliSysInfo.cxx:337
 AliSysInfo.cxx:338
 AliSysInfo.cxx:339
 AliSysInfo.cxx:340
 AliSysInfo.cxx:341
 AliSysInfo.cxx:342
 AliSysInfo.cxx:343
 AliSysInfo.cxx:344
 AliSysInfo.cxx:345
 AliSysInfo.cxx:346
 AliSysInfo.cxx:347
 AliSysInfo.cxx:348
 AliSysInfo.cxx:349
 AliSysInfo.cxx:350
 AliSysInfo.cxx:351
 AliSysInfo.cxx:352
 AliSysInfo.cxx:353
 AliSysInfo.cxx:354
 AliSysInfo.cxx:355
 AliSysInfo.cxx:356
 AliSysInfo.cxx:357
 AliSysInfo.cxx:358
 AliSysInfo.cxx:359
 AliSysInfo.cxx:360
 AliSysInfo.cxx:361
 AliSysInfo.cxx:362
 AliSysInfo.cxx:363
 AliSysInfo.cxx:364
 AliSysInfo.cxx:365
 AliSysInfo.cxx:366
 AliSysInfo.cxx:367
 AliSysInfo.cxx:368
 AliSysInfo.cxx:369
 AliSysInfo.cxx:370
 AliSysInfo.cxx:371