Gaudi Framework, version v22r1

Home   Generated: Mon Feb 28 2011

Memory.cpp

Go to the documentation of this file.
00001 // $Header: /tmp/svngaudi/tmp.jEpFh25751/Gaudi/GaudiKernel/src/Lib/Memory.cpp,v 1.1 2001/03/14 15:30:16 mato Exp $
00002 //====================================================================
00003 //      Memory.cpp
00004 //--------------------------------------------------------------------
00005 //
00006 //      Package    : System (The LHCb System service)
00007 //
00008 //  Description: Information of memory usage from a given process
00009 //
00010 //      Author     : M.Frank
00011 //  Created    : 13/11/00
00012 //      Changes    : 
00013 //
00014 //====================================================================
00015 #define GAUDIKERNEL_MEMORY_CPP
00016 
00017 #ifdef _WIN32
00018 #include "process.h"
00019   #define getpid _getpid
00020 #else
00021   #include <errno.h>
00022   #include <string.h>
00023   #include "sys/times.h"
00024   #include "unistd.h"
00025   #include "libgen.h"
00026   #include <cstdio>
00027 #endif
00028 
00029 // Framework include files
00030 #include <limits.h>
00031 #include "GaudiKernel/Memory.h"
00032 #include "ProcessDescriptor.h"
00033 
00035 long System::adjustMemory( MemoryUnit unit, long value )    {
00036   if ( value != -1 )    {
00037     switch ( unit )   {
00038     case Byte:      value =       value;    break;
00039     case kByte:     value =       value/1024;    break;
00040     case MByte:     value =      (value/1024)/1024;    break;
00041     case GByte:     value =     ((value/1024)/1024)/1024;    break;
00042     case TByte:     value =    (((value/1024)/1024)/1024)/1024;    break;
00043     case PByte:     value =   ((((value/1024)/1024)/1024)/1024)/1024;    break;
00044     case EByte:     value =  (((((value/1024)/1024)/1024)/1024)/1024)/1024;    break;
00045     default:        value =  -1;    break;
00046     }
00047   }
00048   return value;
00049 }
00050 
00052 long System::basePriority(InfoType fetch, long pid)   {
00053   PROCESS_BASIC_INFORMATION info;
00054   if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
00055     return info.BasePriority;
00056   return 0;
00057 }
00058 
00060 long System::procID()   {
00061   static long s_pid = ::getpid();
00062   return s_pid;
00063 }
00064 
00066 long System::parentID(InfoType fetch, long pid)   {
00067   PROCESS_BASIC_INFORMATION info;
00068   if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
00069     return info.InheritedFromUniqueProcessId;
00070   return 0;
00071 }
00072 
00074 long System::affinityMask(InfoType fetch, long pid)   {
00075   PROCESS_BASIC_INFORMATION info;
00076   if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
00077     return info.AffinityMask;
00078   return 0;
00079 }
00080 
00082 long System::exitStatus(InfoType fetch, long pid)   {
00083   PROCESS_BASIC_INFORMATION info;
00084   if ( fetch != NoFetch && getProcess()->query(pid, ProcessBasics, &info) )
00085     return info.ExitStatus;
00086   return -2;
00087 }
00088 
00090 long System::priorityBoost(InfoType fetch, long pid)   {
00091   long info;
00092   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00093     return info;
00094   return -2;
00095 }
00096 
00098 long System::nonPagedMemoryPeak(MemoryUnit unit, InfoType fetch, long pid)   {
00099   VM_COUNTERS info;
00100   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00101     return adjustMemory(unit, info.QuotaPeakNonPagedPoolUsage);
00102   return -2;
00103 }
00104 
00106 long System::nonPagedMemory(MemoryUnit unit, InfoType fetch, long pid)   {
00107   VM_COUNTERS info;
00108   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00109     return adjustMemory(unit, info.QuotaNonPagedPoolUsage);
00110   return -2;
00111 }
00112 
00114 long System::nonPagedMemoryLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00115   POOLED_USAGE_AND_LIMITS quota;
00116   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
00117     return adjustMemory(unit, quota.NonPagedPoolLimit);
00118   return 0;
00119 }
00120 
00122 long System::pagedMemory(MemoryUnit unit, InfoType fetch, long pid)   {
00123   VM_COUNTERS info;
00124   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00125     return adjustMemory(unit, info.QuotaPagedPoolUsage);
00126   return -2;
00127 }
00128 
00130 long System::pagedMemoryPeak(MemoryUnit unit, InfoType fetch, long pid)   {
00131   VM_COUNTERS info;
00132   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00133     return adjustMemory(unit, info.QuotaPeakPagedPoolUsage);
00134   return -2;
00135 }
00136 
00138 long System::pagedMemoryLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00139   POOLED_USAGE_AND_LIMITS quota;
00140   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
00141     return adjustMemory(unit, quota.PagedPoolLimit);
00142   return 0;
00143 }
00144 
00146 long System::numPageFault(InfoType fetch, long pid)   {
00147   VM_COUNTERS info;
00148   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00149     return info.PageFaultCount;
00150   return -2;
00151 }
00152 
00154 long System::pagefileUsage(MemoryUnit unit, InfoType fetch, long pid)   {
00155   VM_COUNTERS info;
00156   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00157     return adjustMemory(unit, info.PagefileUsage);
00158   return -2;
00159 }
00160 
00162 long System::pagefileUsagePeak(MemoryUnit unit, InfoType fetch, long pid)   {
00163   VM_COUNTERS info;
00164   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00165     return adjustMemory(unit, info.PeakPagefileUsage);
00166   return -2;
00167 }
00168 
00170 long System::pagefileUsageLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00171   POOLED_USAGE_AND_LIMITS quota;
00172   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )    {
00173     if ( long(quota.PagefileLimit) < 0 )
00174       return -1;//LONG_MAX;
00175     return adjustMemory(unit, quota.PagefileLimit);
00176   }
00177   return -2;
00178 }
00179 
00181 long System::mappedMemory(MemoryUnit unit, InfoType fetch, long pid)   {
00182   VM_COUNTERS info;
00183   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00184     return adjustMemory(unit, info.WorkingSetSize);
00185   return -2;
00186 }
00187 
00189 long System::mappedMemoryPeak(MemoryUnit unit, InfoType fetch, long pid)   {
00190   VM_COUNTERS info;
00191   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00192     return adjustMemory(unit, info.PeakWorkingSetSize);
00193   return -2;
00194 }
00195 
00197 long System::minMemoryLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00198   QUOTA_LIMITS quota;
00199   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
00200     return adjustMemory(unit, quota.MinimumWorkingSetSize);
00201   return 0;
00202 }
00203 
00205 long System::maxMemoryLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00206   QUOTA_LIMITS quota;
00207   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )
00208     return adjustMemory(unit, quota.MaximumWorkingSetSize);
00209   return 0;
00210 }
00211 
00213 long System::virtualMemory(MemoryUnit unit, InfoType fetch, long pid)   {
00214   VM_COUNTERS info;
00215   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00216     return adjustMemory(unit, info.VirtualSize);
00217   return -2;
00218 }
00219 
00221 long System::virtualMemoryPeak(MemoryUnit unit, InfoType fetch, long pid)   {
00222   VM_COUNTERS info;
00223   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &info) )
00224     return adjustMemory(unit, info.PeakVirtualSize);
00225   return -2;
00226 }
00227 
00229 long System::virtualMemoryLimit(MemoryUnit unit, InfoType fetch, long pid)   {
00230   QUOTA_LIMITS quota;
00231   if ( fetch != NoFetch && getProcess()->query(pid, fetch, &quota) )    {
00232     if ( long(quota.PagefileLimit) == -1 )
00233       return -1;//LONG_MAX;
00234     return adjustMemory(unit, quota.PagefileLimit);
00235   }
00236   return 0;
00237 }
00238 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Feb 28 2011 18:27:13 for Gaudi Framework, version v22r1 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004