man usemem




NAME

  usemem  - Allocate memory until failure or paging


SYNOPSIS

  usemem [-b base] [-i increment] [-options]


DESCRIPTION

  Allocates  memory  (megabyte  units)  until  failure or until paging
  occurs.

  Knowing maximum viable program size is useful for  any  environment.
  Unfortunately,  many  operating systems (OS) behave poorly to exces-
  sive paging.  Once memory has been exhasuted an  OS  will  typically
  page  older pages/programs out to disk.  This can be a slow process.
  Responsiveness to the paged programs will certainly suffer.  If sys-
  tem  daemons  are paged, responsiveness of the system can suffer and
  can break any time sensitive daemons or programs.  If  paging  space
  is exhausted entirely, the OS will kill processes typically using an
  algorithm based on least referenced pages not who is consuming  mem-
  ory.   Unrelated  programs  and also critical system daemons may get
  killed.

  This program is intented to run to gauge available memory for a sin-
  gle  program,  typically  it  is  run on an unloaded system.  If the
  operating system does not support maxrss from getrusage()  then  the
  -f  (force) flag must be used and the program should be monitored in
  another window via a tool like top or vmstat to know when to  inter-
  rupt this program before it can debilitate a system.

  Systems which do report maxrss from getrusage():
    AIX
    IRIX
    UNICOS/mp

  Systems which do not report maxrss:
    Mac OSX
    SunOS
    Linux

  Default invocation is quivalent to:
    usemem -b 100 -i 10 -p -z 1


OPTIONS

  -base size
         Establish  initial  allocation  (heap/data) size in megabyte.
         Defaults to 100mb.

  -increment size
         Establish  allocation  increment  (heap/data)  in  megabytes.
         Defaults to 10mb.

  -max size
         Establish   maximum   allocation  (heap/data)  in  megabytes.
         Implies -force.

  -zzz seconds
         Sleep time between allocations, defaults to  1  second.   One
         second  is  added on systems which do not support maxrss from
         getrusage().

  -wait seconds
         Wait time after allocation completes before  exit.   Enter  a
         wait loop using -zzz seconds +4 re-referencing allocated mem-
         ory before exiting program.

  -stack Also grow stack by 1mb per allocation.

  -force Force allocation to continue for systems which do not support
         maxrss or when paging is ocurring.

  -pend  Stop  allocation  when  maxrss  is less than allocated memory
         (e.g., paging is ocurring).  This option is a default  except
         when  -max  specified,  specify after -max if desired.  Note,
         operating  systems  which  do   not   support   maxrss   from
         getrusage() cannot detect paging.

  -quiet Run  quieter,  do not show allocation loops which complete in
         -z seconds+1.

  -reference
         Reference (read) all allocated pages after each  new  alloca-
         tion (e.g., ensure they are paged in).

  -use   Use  pid in output to identify multi-process (e.g., mpi) exe-
         cution.

  -verbose
         Run verbose, with -r show memory reference loops.

  -?|-help
         Display terse usage information.


EXAMPLES

  An example from a 16gb AIX 5.3 p575 compute node:

   f4n3: uname -a
   AIX f4n3 3 5 00C33E9F4C00
   f4n3: ulimit -a
   time(seconds)        1800
   file(blocks)         unlimited
   data(kbytes)         262144
   stack(kbytes)        unlimited
   memory(kbytes)       262144
   coredump(blocks)     20000
   nofiles(descriptors) 2000
   f4n3: ulimit -d unlimited
   f4n3: cc -q64 -o usemem usemem.c
   f4n3: ./usemem -b 2000 -i 200
   heap   -1.0:soft   -1.0:hard
   stack  -1.0:soft   -1.0:hard
   rss   256.0:soft 1024.0:hard
   #     1.3:rss     364:min 0:maj # 10:42:18
   #  2002.3:rss  513615:min 0:maj # 10:42:20  2000mb (0, 0)
   #  2202.3:rss  564912:min 0:maj # 10:42:22  2200mb (0, 1)
   #  2402.3:rss  616215:min 0:maj # 10:42:23  2400mb (0, 2)
   ...
   # 13602.3:rss 3489047:min 0:maj # 10:43:33 13600mb (0,58)
   # 13802.3:rss 3540349:min 0:maj # 10:43:34 13800mb (0,59)
   # 13894.1:rss 3591644:min 2:maj ! 10:44:29 14000mb (0,60)
   f4n3: date
   Thu Sep 29 10:47:44 ADT 2005

  Things to note above:
    Raised ulimit data to unlimited
    Compiled with -q64
    AIX supports maxrss, usemem stopped itself
    Long pause after 13800 indicates
      other programs being paged out
    Took 3 minutes to end (OS cleaning up)

  A second example from the same node with a parallel  vmstat  to  get
  the OS perspective:

   f4n3: ./usemem -b 2000 -i 200
   heap   -1.0:soft   -1.0:hard
   stack  -1.0:soft   -1.0:hard
   rss   256.0:soft 1024.0:hard
   #     1.3:rss     362:min 0:maj # 10:49:07
   #  2002.3:rss  513622:min 0:maj # 10:49:10  2000mb (0, 0)
   #  2202.3:rss  564923:min 0:maj # 10:49:11  2200mb (0, 1)
   ...
   # 13402.3:rss 3437737:min 0:maj # 10:50:21 13400mb (0,57)
   # 13602.3:rss 3489037:min 0:maj # 10:50:22 13600mb (0,58)
   # 13797.1:rss 3540317:min 6:maj ! 10:50:37 13800mb (0,59)

   f4n3: vmstat 1 200

   System configuration: lcpu=16 mem=15744MB

   kthr   memory            page           faults        cpu
   ---- ---------- -------------------- ----------- --------
   0 0  421k 3599k 0  0    0   0    0 0   4  29 309  0  0 88
   1 0  421k 3599k 0  0    0   0    0 0   3  21 307  0  0 88
   0 0  421k 3599k 0  0    0   0    0 0   1  14 302  0  0 88
   1 0  534k 3486k 0  0    0   0    0 0   5  82 316  7  0 81
   1 0  749k 3271k 0  0    0   0    0 0   2  19 307 13  0 76
   0 0 3691k  330k 0  0    0   0    0 0   1  25 297  2  0 86
   0 0 3705k  315k 0  0    0   0    0 0   2  21 305  1  0 87
   0 0 3756k  264k 0  0    0   0    0 0   2  20 298  3  0 85
   0 0 3808k  213k 0  0    0   0    0 0   2  20 300  3  0 85
   1 0 3859k  161k 0  0    0   0    0 0   3  21 298  3  0 85
   1 0 3892k  128k 0  0    0   0    0 0   1  20 298  2  0 86
   0 0 3910k  110k 0  1    0   0    0 0   3 266 308  1  0 86
   0 0 3941k   82k 0  5  438  6k  52k 0 414  19 279  2  1 81
   0 1 3941k   82k 0  0  333   0    0 0 498  17 298  0  0 82
   0 1 3941k   83k 0  0  307   0    0 0 508  16 302  0  0 82
   0 1 3941k   83k 0  0  413   0    0 0 547  14 327  0  0 82
   0 1 3941k   83k 0  0  305   0    0 0 509  15 302  0  0 82
   0 1 3941k   84k 0  1  387   0    0 0 531  74 338  0  0 82
   0 1 3941k   84k 0  0  341   0    0 0 571  14 298  0  0 82
   0 1 3941k   85k 0  0  393   0    0 0 486  14 299  0  0 82
   2 0 3950k   81k 0 12  514 10k 509k 0 569  14 286  1  8 75
   0 1 3950k   83k 0  2 2572   0    0 0 749  98 323  0  1 81
   0 1 3950k   86k 0  2 2329   0    0 0 745  15 295  0  1 79
   0 2 3957k   82k 0  3 1241  6k 250k 0 568  16 304  0  5 77
   0 1 3957k   84k 0  3 1789   0    0 0 626  14 294  0  1 82
   0 1 3957k   85k 0  0  891   0    0 0 635  18 307  0  0 82
   0 0 3962k   81k 0  2  717   0    0 0 349  28 320  0  0 82
   1 0 3597k  446k 0  0    0   0    0 0   1  17 301  0  9 77
   1 0 3066k  976k 0  0    0   0    0 0   1  14 301  0 12 75
   1 0 2532k 1509k 0  0    0   0    0 0   1  32 312  0 13 76
   1 0 2010k 2031k 0  0    0   0    0 0   1  16 309  0 13 76
   1 0 1440k 2601k 0  0    0   0    0 0   1  14 307  0 13 76
   1 0  859k 3182k 0  0    0   0    0 0   2  17 302  0 13 76
   0 0  421k 3620k 0  3    0   0    0 0   7  41 314  0  9 79
   0 0  421k 3620k 0  0    0   0    0 0   1  16 299  0  0 88

  Things to note above:
    Paging activity gets a bit dramatic.

  The  following example is from a Macintosh OSX system which does not
  support maxrss from getrusage().  The  program  was  monitored  with
  'top' and the results are interleaved with usemem execution:

   macosx: uname -nmpsr
   Darwin dorado-e0.arsc.edu 7.9.0 Power Macintosh powerpc
   macosx: top

   macosx: ./usemem -f -r
   heap   6.0:soft  -1.0:hard
   stack  8.0:soft  64.0:hard
   rss   -1.0:soft  -1.0:hard
   !
   ! Warning:
   !
   ! This OS does not return maxrss from getrusage(), this
   !   program cannot determine when paging is occuring.
   ! Use -f to force the allocation loop to occur.
   ! Monitor with 'vmstat 1 120' or 'top' in another window,
   !   interrupt before paging debilitates the system.
   ! One second added to the -z sleep between allocations.
   !
   #    -1.0:rss  # 10:14:45
   #    -1.0:rss  ? 10:14:45   100mb ( 0, 0)
   #    -1.0:rss  ? 10:14:47   110mb ( 0, 1)
   ...
   #    -1.0:rss  ? 10:14:59   160mb ( 0, 6)
   #    -1.0:rss  ? 10:15:02   170mb ( 0, 7)

   Processes:  111 total, 2 running, 227 threads   10:15:02
   CPU usage:  41.6% user, 12.4% sys, 46.0% idle
   MemRegions: num= 9494, res= 296M+16.4M priv
   PhysMem: 144M active 468M inact  723M used     300M free
   VM: 7.04G + 95.6M   87872(0) pageins,  18312(0) pageouts

    PID COMMAND %CPU  TIME  #PRTS #MREGS RPRVT RSIZE VSIZE
   4163 usemem 36.1% 0:02.80   12    30   172M+ 172M+ 196M+
   4154 top     9.7% 0:43.20   17    26   540K  928K 27.1M

   #    -1.0:rss  ? 10:15:04   180mb ( 0, 8)
   #    -1.0:rss  ? 10:15:07   190mb ( 0, 9)
   ...
   #    -1.0:rss  ? 10:16:23   450mb ( 0,35)
   #    -1.0:rss  ? 10:16:27   460mb ( 0,36)
   #    -1.0:rss  ? 10:16:31   470mb ( 0,37)
   #    -1.0:rss  ? 10:16:35   480mb ( 0,38)

   Processes:  111 total, 3 running, 224 threads   10:16:36
   CPU usage:  58.0% user, 17.5% sys, 24.5% idle
   MemRegions: num= 9526, res= 590M+16.4M priv
   PhysMem: 157M active 738M inact 1007M used    16.6M free
   VM: 7.34G + 95.6M 87873(0) pageins, 26330(2894) pageouts

    PID COMMAND %CPU  TIME  #PRTS #MREGS RPRVT RSIZE VSIZE
   4163 usemem 59.9% 0:26.73   12    61   482M+ 482M+ 506M
   4154 top    10.3% 0:52.69   17    26   540K  928K 27.1M

   #    -1.0:rss  ? 10:16:39   490mb ( 0,39)
   #    -1.0:rss  ? 10:16:44   500mb ( 0,40)
   #    -1.0:rss  ? 10:16:49   510mb ( 0,41)
   #    -1.0:rss  ? 10:16:54   520mb ( 0,42)
   #    -1.0:rss  ? 10:16:58   530mb ( 0,43)
   #    -1.0:rss  ? 10:17:06   540mb ( 0,44)
   #    -1.0:rss  ? 10:17:10   550mb ( 0,45)

   Processes:  111 total, 2 running, 224 threads   10:17:10
   CPU usage:  6.2% user, 14.2% sys, 79.6% idle
   MemRegions: num= 9465, res= 618M+16.1M priv
   PhysMem: 597M active 298M inact 1009M used    14.4M free
   VM: 7.39G + 95.6M   89846(41) pageins, 43533(0) pageouts

    PID COMMAND %CPU  TIME  #PRTS #MREGS RPRVT RSIZE VSIZE
   4163 usemem  0.0% 0:34.74   12    67   535M  529M  566M
   4154 top    10.6% 0:55.56   17    26   516K  812K 27.1M

   (ctrl/c)

  Things to note above:
    Needed -f to run, added -r for re-referencing
    The to RSIZE tracks usemem allocation until >500mb
    Had to interrupt or would have malloc'd until Mac broke.


NOTES

  Compile with -DUSE_MPI to enable mpi.


ACKNOWLEDGEMENTS

  Written  at  the  University  of Alaska Arctic Region Supercomputing
  Center (ARSC).


RELATED INFORMATION

  Commands: ulimit(shell), getrusage(3), vmstat, top, topas(AIX).