File: omStats.c

package info (click to toggle)
singular 1%3A4.0.3-p3%2Bds-5
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 33,040 kB
  • ctags: 19,347
  • sloc: cpp: 271,589; ansic: 13,500; lisp: 4,242; yacc: 1,656; lex: 1,377; makefile: 1,264; perl: 632; sh: 467; python: 233; xml: 182
file content (143 lines) | stat: -rw-r--r-- 5,136 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/*******************************************************************
 *  File:    omStats.c
 *  Purpose: definitions of stats related stuff
 *  Author:  obachman (Olaf Bachmann)
 *  Created: 11/99
 *******************************************************************/
#include <unistd.h>
#include "omConfig.h"
#include "omDefaultConfig.h"
#include "omMalloc.h"
#include "omalloc.h"

omInfo_t om_Info = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

unsigned long om_SbrkInit = 0;

void omInitInfo()
{
#ifdef HAVE_SBRK
  om_SbrkInit = (unsigned long) sbrk(0);
#endif
}

void omUpdateInfo()
{
#ifdef OM_MALLOC_UPDATE_INFO
  OM_MALLOC_UPDATE_INFO;
#endif

  /* this can happen, since sizes are added as requested, and
     subtracted as the real size of the memory */
  if (om_Info.CurrentBytesFromMalloc < 0)
    om_Info.CurrentBytesFromMalloc = 0;

  om_Info.UsedBytesFromValloc = omGetUsedBinBytes();
  om_Info.AvailBytesFromValloc = om_Info.CurrentBytesFromValloc - om_Info.UsedBytesFromValloc;

#ifdef OM_MALLOC_USED_BYTES
  om_Info.UsedBytesMalloc = OM_MALLOC_USED_BYTES;
#else
  om_Info.UsedBytesMalloc = om_Info.CurrentBytesFromMalloc;
#endif
#ifdef OM_MALLOC_AVAIL_BYTES
  om_Info.AvailBytesMalloc = OM_MALLOC_AVAIL_BYTES;
#endif

  om_Info.UsedBytes = om_Info.UsedBytesMalloc + om_Info.UsedBytesFromValloc;
  om_Info.AvailBytes = om_Info.AvailBytesMalloc + om_Info.AvailBytesFromValloc;

#ifdef OM_HAVE_VALLOC_MMAP
  om_Info.CurrentBytesMmap = om_Info.CurrentBytesFromValloc;
  om_Info.MaxBytesMmap = om_Info.MaxBytesFromValloc;
#endif
#ifdef OM_MALLOC_CURRENT_BYTES_MMAP
  om_Info.CurrentBytesMmap += OM_MALLOC_CURRENT_BYTES_MMAP;
#endif
#ifdef OM_MALLOC_MAX_BYTES_MMAP
  om_Info.MaxBytesMmap += OM_MALLOC_MAX_BYTES_MMAP;
#endif

#ifndef OM_MALLOC_CURRENT_BYTES_SBRK
#ifdef HAVE_SBRK
  if (om_SbrkInit)
  {
    om_Info.CurrentBytesSbrk = (unsigned long) sbrk(0) - om_SbrkInit;
    if (om_Info.CurrentBytesSbrk > om_Info.MaxBytesSbrk)
      om_Info.MaxBytesSbrk = om_Info.CurrentBytesSbrk;
  }
  else
  {
    om_SbrkInit = (unsigned long) sbrk(0);
  }
#endif
#else
  om_Info.CurrentBytesSbrk = OM_MALLOC_CURRENT_BYTES_SBRK;
#ifdef OM_MALLOC_MAX_BYTES_SBRK
  om_Info.MaxBytesSbrk = OM_MALLOC_MAX_BYTES_SBRK;
#else
    if (om_Info.CurrentBytesSbrk > om_Info.MaxBytesSbrk)
      om_Info.MaxBytesSbrk = om_Info.CurrentBytesSbrk;
#endif
#endif

#ifdef OM_MALLOC_CURRENT_BYTES_SYSTEM
  om_Info.CurrentBytesSystem = OM_MALLOC_CURRENT_BYTES_SYSTEM;
#else
  om_Info.CurrentBytesSystem =
    (om_Info.CurrentBytesSbrk > om_Info.UsedBytesMalloc ?
     om_Info.CurrentBytesSbrk : om_Info.UsedBytesMalloc);
#endif
#ifdef OM_HAVE_VALLOC_MMAP
  om_Info.CurrentBytesSystem += om_Info.CurrentBytesFromValloc;
#endif

#if ! (defined(OM_HAVE_VALLOC_MMAP) && defined(OM_MALLOC_MAX_BYTES_SYSTEM))
#ifdef OM_MALLOC_MAX_BYTES_SYSTEM
  om_Info.MaxBytesSystem = OM_MALLOC_MAX_BYTES_SYSTEM;
#else
  om_Info.MaxBytesSystem =
    (om_Info.MaxBytesSbrk + om_Info.MaxBytesMmap >
     om_Info.MaxBytesFromMalloc + om_Info.MaxBytesFromValloc ?
     om_Info.MaxBytesSbrk + om_Info.MaxBytesMmap :
     om_Info.MaxBytesFromMalloc + om_Info.MaxBytesFromValloc);
#endif
#endif
}

omInfo_t omGetInfo()
{
  omUpdateInfo();
  return om_Info;
}

void omPrintStats(FILE* fd)
{
  omUpdateInfo();
  fprintf(fd, "System %ldk:%ldk Appl %ldk/%ldk Malloc %ldk/%ldk Valloc %ldk/%ldk Pages %ld/%ld Regions %ld:%ld\n",
          om_Info.CurrentBytesSystem/1024, om_Info.MaxBytesSystem/1024,
          om_Info.UsedBytes/1024, om_Info.AvailBytes/1024,
          om_Info.UsedBytesMalloc/1024, om_Info.AvailBytesMalloc/1024,
          om_Info.CurrentBytesFromValloc/1024, om_Info.AvailBytesFromValloc/1024,
          om_Info.UsedPages, om_Info.AvailPages,
          om_Info.CurrentRegionsAlloc, om_Info.MaxRegionsAlloc);
}


void omPrintInfo(FILE* fd)
{
  omUpdateInfo();
  fprintf(fd, "                  Current:       Max:\n");
  fprintf(fd, "BytesSystem:     %8ldk  %8ldk\n", om_Info.CurrentBytesSystem/1024, om_Info.MaxBytesSystem/1024);
  fprintf(fd, "BytesSbrk:       %8ldk  %8ldk\n", om_Info.CurrentBytesSbrk/1024, om_Info.MaxBytesSbrk/1024);
  fprintf(fd, "BytesMmap:       %8ldk  %8ldk\n", om_Info.CurrentBytesMmap/1024, om_Info.MaxBytesMmap/1024);
  fprintf(fd, "BytesFromMalloc: %8ldk  %8ldk\n", om_Info.CurrentBytesFromMalloc/1024, om_Info.MaxBytesFromMalloc/1024);
  fprintf(fd, "BytesFromValloc: %8ldk  %8ldk\n", om_Info.CurrentBytesFromValloc/1024, om_Info.MaxBytesFromValloc/1024);
  fprintf(fd, "PagesAlloc:      %8ld   %8ld \n", om_Info.UsedPages, om_Info.MaxPages);
  fprintf(fd, "RegionsAlloc:    %8ld   %8ld \n", om_Info.CurrentRegionsAlloc, om_Info.MaxRegionsAlloc);
  fprintf(fd, "                     Used:     Avail:\n");
  fprintf(fd, "BytesAppl:       %8ldk  %8ldk\n", om_Info.UsedBytes/1024, om_Info.AvailBytes/1024);
  fprintf(fd, "BytesMalloc:     %8ldk  %8ldk\n", om_Info.UsedBytesMalloc/1024, om_Info.AvailBytesMalloc/1024);
  fprintf(fd, "BytesValloc:     %8ldk  %8ldk\n", om_Info.UsedBytesFromValloc/1024, om_Info.AvailBytesFromValloc/1024);
  fprintf(fd, "Pages:           %8ld   %8ld\n", om_Info.UsedPages, om_Info.AvailPages);
}