From: Benjamin Kaduk Date: Fri, 10 Jan 2014 17:33:18 +0000 (-0500) Subject: Add a routine to get the size of the current process X-Git-Tag: upstream/1.8.0_pre1^2~835 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=5c4e555f93b8db4f36667966a897fae0acd763e5;p=packages%2Fo%2Fopenafs.git Add a routine to get the size of the current process Use rusage when available, and fall back to the very old sbrk(0) hack otherwise. Change-Id: Ic986fd6b93476b80008908a95f8b8e0c76d9ed9a Reviewed-on: http://gerrit.openafs.org/10695 Tested-by: BuildBot Reviewed-by: Derrick Brashear --- diff --git a/acinclude.m4 b/acinclude.m4 index ddb11732f..272f0f513 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1944,6 +1944,11 @@ OPENAFS_HAVE_STRUCT_FIELD(DIR, dd_fd, [#include #include #endif]) +OPENAFS_HAVE_STRUCT_FIELD(struct rusage, ru_idrss, +[#ifdef HAVE_SYS_RESOURCE_H +#include +#endif]) + dnl Eventually, this will look for the system one, or for OpenSSL LIB_hcrypto="-lafshcrypto" LDFLAGS_hcrypto="-L\$(TOP_LIBDIR)" diff --git a/src/opr/Makefile.in b/src/opr/Makefile.in index b15350857..a896dbcef 100644 --- a/src/opr/Makefile.in +++ b/src/opr/Makefile.in @@ -3,7 +3,7 @@ include @TOP_OBJDIR@/src/config/Makefile.config include @TOP_OBJDIR@/src/config/Makefile.pthread include @TOP_OBJDIR@/src/config/Makefile.libtool -LT_objs = assert.lo casestrcpy.lo dict.lo rbtree.lo uuid.lo +LT_objs = assert.lo casestrcpy.lo dict.lo proc.lo rbtree.lo uuid.lo LT_libs = $(LIB_hcrypto) $(LIB_roken) HEADERS = $(TOP_INCDIR)/afs/opr.h \ @@ -12,6 +12,7 @@ HEADERS = $(TOP_INCDIR)/afs/opr.h \ $(TOP_INCDIR)/opr/jhash.h \ $(TOP_INCDIR)/opr/lock.h \ $(TOP_INCDIR)/opr/lockstub.h \ + $(TOP_INCDIR)/opr/proc.h \ $(TOP_INCDIR)/opr/queue.h \ $(TOP_INCDIR)/opr/rbtree.h \ $(TOP_INCDIR)/opr/time.h \ @@ -50,6 +51,9 @@ $(TOP_INCDIR)/opr/jhash.h: ${srcdir}/jhash.h $(TOP_INCDIR)/opr/lockstub.h: ${srcdir}/lockstub.h $(INSTALL_DATA) $? $@ +$(TOP_INCDIR)/opr/proc.h: ${srcdir}/proc.h + $(INSTALL_DATA) $? $@ + $(TOP_INCDIR)/opr/queue.h: ${srcdir}/queue.h $(INSTALL_DATA) $? $@ diff --git a/src/opr/NTMakefile b/src/opr/NTMakefile index f267dcd5e..9fc9b0911 100644 --- a/src/opr/NTMakefile +++ b/src/opr/NTMakefile @@ -15,6 +15,7 @@ INCFILES = \ $(INCFILEDIR)\opr_assert.h \ $(DESTDIR)\include\opr\dict.h \ $(DESTDIR)\include\opr\jhash.h \ + $(DESTDIR)\include\opr\proc.h \ $(DESTDIR)\include\opr\queue.h \ $(DESTDIR)\include\opr\rbtree.h \ $(DESTDIR)\include\opr\time.h \ @@ -34,6 +35,7 @@ LIBOBJS = \ $(OUT)\assert.obj \ $(OUT)\casestrcpy.obj \ $(OUT)\dict.obj \ + $(OUT)\proc.obj \ $(OUT)\rbtree.obj \ $(OUT)\uuid.obj \ $(OUT)\AFS_component_version_number.obj diff --git a/src/opr/liboafs_opr.la.sym b/src/opr/liboafs_opr.la.sym index cc0466dd2..d95b3162b 100644 --- a/src/opr/liboafs_opr.la.sym +++ b/src/opr/liboafs_opr.la.sym @@ -2,6 +2,7 @@ opr_AssertionFailed opr_dict_Free opr_dict_Init opr_lcstring +opr_procsize opr_rbtree_first opr_rbtree_init opr_rbtree_insert diff --git a/src/opr/proc.c b/src/opr/proc.c new file mode 100644 index 000000000..ede021f0d --- /dev/null +++ b/src/opr/proc.c @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2014 by the Massachusetts Institute of Technology. + * 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. + * + * 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 HOLDER 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 +#include + + +#ifndef AFS_NT40_ENV +#include +#endif +#ifdef HAVE_SYS_RESOURCE_H +#include +#endif + +/* + * Return a measure of the size of the process, in kilobytes. + * This is inherently a vague sort of measure, and the different paths + * have different actual meanings, but perhaps it is useful for comparing + * different logs on the same host. + */ +afs_int32 +opr_procsize(void) +{ +#ifdef AFS_NT40_ENV + return -1; +#elif HAVE_STRUCT_RUSAGE_RU_IDRSS + struct rusage usage; + if (getrusage(RUSAGE_SELF, &usage) != 0) + return -1; + else + return usage.ru_idrss; +#else + return (int)((long)sbrk(0) >> 10); +#endif +} diff --git a/src/opr/proc.h b/src/opr/proc.h new file mode 100644 index 000000000..078c55ea4 --- /dev/null +++ b/src/opr/proc.h @@ -0,0 +1,8 @@ +/* Process information and manipulation tools. */ + +#ifndef OPENAFS_OPR_PROC_H +#define OPENAFS_OPR_PROC_H 1 + +afs_int32 opr_procsize(void); + +#endif