diff options
-rw-r--r-- | base/hostinfo.cc | 65 | ||||
-rw-r--r-- | base/hostinfo.hh | 39 | ||||
-rw-r--r-- | base/intmath.hh | 23 | ||||
-rw-r--r-- | base/misc.cc | 9 | ||||
-rw-r--r-- | sim/prog.cc | 3 | ||||
-rw-r--r-- | sim/sim_events.cc | 3 |
6 files changed, 135 insertions, 7 deletions
diff --git a/base/hostinfo.cc b/base/hostinfo.cc new file mode 100644 index 000000000..48c876122 --- /dev/null +++ b/base/hostinfo.cc @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2003 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdarg.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <math.h> + +#include "host.hh" + +uint64_t +procInfo(char *filename, char *target) +{ + int done = 0; + char line[80]; + char format[80]; + uint64_t usage; + + FILE *fp = fopen(filename, "r"); + + while (fp && !feof(fp) && !done) { + if (fgets(line, 80, fp)) { + if (strncmp(line, target, strlen(target)) == 0) { + sprintf(format, "%s %%ld", target); + sscanf(line, format, &usage); + + fclose(fp); + return usage ; + } + } + } + + if (fp) + fclose(fp); + + return 0; +} diff --git a/base/hostinfo.hh b/base/hostinfo.hh new file mode 100644 index 000000000..3a5d1a61e --- /dev/null +++ b/base/hostinfo.hh @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2003 The Regents of The University of Michigan + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer; + * redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution; + * neither the name of the copyright holders nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __HOSTINFO_HH__ +#define __HOSTINFO_HH__ + +#include "host.hh" + +uint64_t procInfo(char *filename, char *target); + +inline uint64_t memUsage() +{ return procInfo("/proc/self/status", "VmSize:"); } + +#endif // __HOSTINFO_HH__ diff --git a/base/intmath.hh b/base/intmath.hh index 16467426d..a17492728 100644 --- a/base/intmath.hh +++ b/base/intmath.hh @@ -107,6 +107,29 @@ CeilPow2(T n) return (T)1 << CeilLog2(n); } +template <class T> +inline T +DivCeil(T a, T b) +{ + return (a + b - 1) / b; +} + +template <class T> +inline T +RoundUp(T val, T align) +{ + T mask = align - 1; + return (val + mask) & ~mask; +} + +template <class T> +inline T +RoundDown(T val, T align) +{ + T mask = align - 1; + return val & ~mask; +} + inline bool IsHex(char c) { diff --git a/base/misc.cc b/base/misc.cc index 0ce9f7be9..4a8facca8 100644 --- a/base/misc.cc +++ b/base/misc.cc @@ -29,11 +29,12 @@ #include <iostream> #include <string> -#include "host.hh" #include "cprintf.hh" +#include "host.hh" +#include "hostinfo.hh" #include "misc.hh" -#include "universe.hh" #include "trace.hh" +#include "universe.hh" using namespace std; @@ -61,8 +62,6 @@ void __fatal(const string &format, cp::ArgList &args, const char *func, const char *file, int line) { - long mem_usage(); - string fmt = "fatal: " + format + " [%s:%s, line %d]\n" "\n%d\nMemory Usage: %ld KBytes\n"; @@ -70,7 +69,7 @@ __fatal(const string &format, cp::ArgList &args, const char *func, args.append(file); args.append(line); args.append(curTick); - args.append(mem_usage()); + args.append(memUsage()); args.dump(cerr, fmt); delete &args; diff --git a/sim/prog.cc b/sim/prog.cc index 355e8d0a1..0c9191d5d 100644 --- a/sim/prog.cc +++ b/sim/prog.cc @@ -36,6 +36,7 @@ #include "prog.hh" #include "eio.hh" +#include "intmath.hh" #include "thread.hh" #include "fake_syscall.hh" #include "object_file.hh" @@ -251,7 +252,7 @@ LiveProcess::LiveProcess(const string &name, text_size = objFile->textSize(); data_base = objFile->dataBase(); data_size = objFile->dataSize() + objFile->bssSize(); - brk_point = ROUND_UP(data_base + data_size, VMPageSize); + brk_point = RoundUp<uint64_t>(data_base + data_size, VMPageSize); // load object file into target memory objFile->loadSections(memory); diff --git a/sim/sim_events.cc b/sim/sim_events.cc index ffabc3006..8a2481484 100644 --- a/sim/sim_events.cc +++ b/sim/sim_events.cc @@ -30,6 +30,7 @@ #include "cpu.hh" #include "eventq.hh" +#include "hostinfo.hh" #include "sim_events.hh" #include "sim_exit.hh" #include "sim_stats.hh" @@ -122,7 +123,7 @@ CheckSwapEvent::process() long swap; /* returns free swap in KBytes */ - swap = proc_info("/proc/meminfo", "SwapFree:"); + swap = procInfo("/proc/meminfo", "SwapFree:"); if (swap < 1000) ccprintf(cerr, "\a\a\aWarning! Swap space is low (%d)\n", swap); |