source: git/omalloc/omStats.c @ b085fba

spielwiese
Last change on this file since b085fba was 6ce030f, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
removal of the $Id$ svn tag from everywhere NOTE: the git SHA1 may be used instead (only on special places) NOTE: the libraries Singular/LIB/*.lib still contain the marker due to our current use of svn
  • Property mode set to 100644
File size: 5.0 KB
Line 
1/*******************************************************************
2 *  File:    omStats.c
3 *  Purpose: definitions of stats related stuff
4 *  Author:  obachman (Olaf Bachmann)
5 *  Created: 11/99
6 *******************************************************************/
7#include <unistd.h>
8#include <omalloc/omConfig.h>
9#include <omalloc/omDefaultConfig.h>
10#include <omalloc/omMalloc.h>
11#include <omalloc/omalloc.h>
12
13omInfo_t om_Info = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
14
15unsigned long om_SbrkInit = 0;
16
17void omInitInfo()
18{
19#ifdef HAVE_SBRK
20  om_SbrkInit = (unsigned long) sbrk(0);
21#endif
22}
23
24void omUpdateInfo()
25{
26#ifdef OM_MALLOC_UPDATE_INFO
27  OM_MALLOC_UPDATE_INFO;
28#endif
29
30  /* this can happen, since sizes are added as requested, and
31     subtracted as the real size of the memory */
32  if (om_Info.CurrentBytesFromMalloc < 0)
33    om_Info.CurrentBytesFromMalloc = 0;
34
35  om_Info.UsedBytesFromValloc = omGetUsedBinBytes();
36  om_Info.AvailBytesFromValloc = om_Info.CurrentBytesFromValloc - om_Info.UsedBytesFromValloc;
37
38#ifdef OM_MALLOC_USED_BYTES
39  om_Info.UsedBytesMalloc = OM_MALLOC_USED_BYTES;
40#else
41  om_Info.UsedBytesMalloc = om_Info.CurrentBytesFromMalloc;
42#endif
43#ifdef OM_MALLOC_AVAIL_BYTES
44  om_Info.AvailBytesMalloc = OM_MALLOC_AVAIL_BYTES;
45#endif
46
47  om_Info.UsedBytes = om_Info.UsedBytesMalloc + om_Info.UsedBytesFromValloc;
48  om_Info.AvailBytes = om_Info.AvailBytesMalloc + om_Info.AvailBytesFromValloc;
49
50#ifdef OM_HAVE_VALLOC_MMAP
51  om_Info.CurrentBytesMmap = om_Info.CurrentBytesFromValloc;
52  om_Info.MaxBytesMmap = om_Info.MaxBytesFromValloc;
53#endif
54#ifdef OM_MALLOC_CURRENT_BYTES_MMAP
55  om_Info.CurrentBytesMmap += OM_MALLOC_CURRENT_BYTES_MMAP;
56#endif
57#ifdef OM_MALLOC_MAX_BYTES_MMAP
58  om_Info.MaxBytesMmap += OM_MALLOC_MAX_BYTES_MMAP;
59#endif
60
61#ifndef OM_MALLOC_CURRENT_BYTES_SBRK
62#ifdef HAVE_SBRK
63  if (om_SbrkInit)
64  {
65    om_Info.CurrentBytesSbrk = (unsigned long) sbrk(0) - om_SbrkInit;
66    if (om_Info.CurrentBytesSbrk > om_Info.MaxBytesSbrk)
67      om_Info.MaxBytesSbrk = om_Info.CurrentBytesSbrk;
68  }
69  else
70  {
71    om_SbrkInit = (unsigned long) sbrk(0);
72  }
73#endif
74#else
75  om_Info.CurrentBytesSbrk = OM_MALLOC_CURRENT_BYTES_SBRK;
76#ifdef OM_MALLOC_MAX_BYTES_SBRK
77  om_Info.MaxBytesSbrk = OM_MALLOC_MAX_BYTES_SBRK;
78#else
79    if (om_Info.CurrentBytesSbrk > om_Info.MaxBytesSbrk)
80      om_Info.MaxBytesSbrk = om_Info.CurrentBytesSbrk;
81#endif
82#endif
83
84#ifdef OM_MALLOC_CURRENT_BYTES_SYSTEM
85  om_Info.CurrentBytesSystem = OM_MALLOC_CURRENT_BYTES_SYSTEM;
86#else
87  om_Info.CurrentBytesSystem =
88    (om_Info.CurrentBytesSbrk > om_Info.UsedBytesMalloc ?
89     om_Info.CurrentBytesSbrk : om_Info.UsedBytesMalloc);
90#endif
91#ifdef OM_HAVE_VALLOC_MMAP
92  om_Info.CurrentBytesSystem += om_Info.CurrentBytesFromValloc;
93#endif
94
95#if ! (defined(OM_HAVE_VALLOC_MMAP) && defined(OM_MALLOC_MAX_BYTES_SYSTEM))
96#ifdef OM_MALLOC_MAX_BYTES_SYSTEM
97  om_Info.MaxBytesSystem = OM_MALLOC_MAX_BYTES_SYSTEM;
98#else
99  om_Info.MaxBytesSystem =
100    (om_Info.MaxBytesSbrk + om_Info.MaxBytesMmap >
101     om_Info.MaxBytesFromMalloc + om_Info.MaxBytesFromValloc ?
102     om_Info.MaxBytesSbrk + om_Info.MaxBytesMmap :
103     om_Info.MaxBytesFromMalloc + om_Info.MaxBytesFromValloc);
104#endif
105#endif
106}
107
108omInfo_t omGetInfo()
109{
110  omUpdateInfo();
111  return om_Info;
112}
113
114void omPrintStats(FILE* fd)
115{
116  omUpdateInfo();
117  fprintf(fd, "System %ldk:%ldk Appl %ldk/%ldk Malloc %ldk/%ldk Valloc %ldk/%ldk Pages %ld/%ld Regions %ld:%ld\n",
118          om_Info.CurrentBytesSystem/1024, om_Info.MaxBytesSystem/1024,
119          om_Info.UsedBytes/1024, om_Info.AvailBytes/1024,
120          om_Info.UsedBytesMalloc/1024, om_Info.AvailBytesMalloc/1024,
121          om_Info.CurrentBytesFromValloc/1024, om_Info.AvailBytesFromValloc/1024,
122          om_Info.UsedPages, om_Info.AvailPages,
123          om_Info.CurrentRegionsAlloc, om_Info.MaxRegionsAlloc);
124}
125
126
127void omPrintInfo(FILE* fd)
128{
129  omUpdateInfo();
130  fprintf(fd, "                  Current:       Max:\n");
131  fprintf(fd, "BytesSystem:     %8ldk  %8ldk\n", om_Info.CurrentBytesSystem/1024, om_Info.MaxBytesSystem/1024);
132  fprintf(fd, "BytesSbrk:       %8ldk  %8ldk\n", om_Info.CurrentBytesSbrk/1024, om_Info.MaxBytesSbrk/1024);
133  fprintf(fd, "BytesMmap:       %8ldk  %8ldk\n", om_Info.CurrentBytesMmap/1024, om_Info.MaxBytesMmap/1024);
134  fprintf(fd, "BytesFromMalloc: %8ldk  %8ldk\n", om_Info.CurrentBytesFromMalloc/1024, om_Info.MaxBytesFromMalloc/1024);
135  fprintf(fd, "BytesFromValloc: %8ldk  %8ldk\n", om_Info.CurrentBytesFromValloc/1024, om_Info.MaxBytesFromValloc/1024);
136  fprintf(fd, "PagesAlloc:      %8ld   %8ld \n", om_Info.UsedPages, om_Info.MaxPages);
137  fprintf(fd, "RegionsAlloc:    %8ld   %8ld \n", om_Info.CurrentRegionsAlloc, om_Info.MaxRegionsAlloc);
138  fprintf(fd, "                     Used:     Avail:\n");
139  fprintf(fd, "BytesAppl:       %8ldk  %8ldk\n", om_Info.UsedBytes/1024, om_Info.AvailBytes/1024);
140  fprintf(fd, "BytesMalloc:     %8ldk  %8ldk\n", om_Info.UsedBytesMalloc/1024, om_Info.AvailBytesMalloc/1024);
141  fprintf(fd, "BytesValloc:     %8ldk  %8ldk\n", om_Info.UsedBytesFromValloc/1024, om_Info.AvailBytesFromValloc/1024);
142  fprintf(fd, "Pages:           %8ld   %8ld\n", om_Info.UsedPages, om_Info.AvailPages);
143}
Note: See TracBrowser for help on using the repository browser.