1 '\" te
   2 .\" Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved.
   3 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
   4 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
   5 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
   6 .TH PMADVISE 1 "Sep 25, 2008"
   7 .SH NAME
   8 pmadvise \- applies advice about memory to a process
   9 .SH SYNOPSIS
  10 .LP
  11 .nf
  12 \fBpmadvise\fR \fB-o\fR \fIoption\fR[,\fIoption\fR] [\fB-F\fR] [\fB-l\fR] [\fB-v\fR] \fIpid\fR...
  13 .fi
  14 
  15 .SH DESCRIPTION
  16 .LP
  17 \fBpmadvise\fR applies advice about how memory is used in the specified process
  18 using \fBmadvise\fR(3C).
  19 .sp
  20 .LP
  21 \fBpmadvise\fR allows users to apply advice to a specific sub-range at a
  22 specific instant in time. \fBpmadvise\fR differs from \fBmadv.so.1\fR(1) in
  23 that \fBmadv.so.1\fR(1) applies the advice throughout execution of the target
  24 program to all segments of a specified type.
  25 .SH OPTIONS
  26 .LP
  27 The following options are supported:
  28 .sp
  29 .ne 2
  30 .na
  31 \fB\fB-F\fR\fR
  32 .ad
  33 .RS 6n
  34 Force by grabbing the target process even if another process has control.
  35 .sp
  36 You should exercise caution when using the \fB-F\fR option. See \fBproc\fR(1).
  37 .RE
  38 
  39 .sp
  40 .ne 2
  41 .na
  42 \fB\fB-l\fR\fR
  43 .ad
  44 .RS 6n
  45 Show unresolved dynamic linker map names.
  46 .RE
  47 
  48 .sp
  49 .ne 2
  50 .na
  51 \fB\fB-o\fR\fR
  52 .ad
  53 .RS 6n
  54 Specify advice to apply in the following form:
  55 .sp
  56 .in +2
  57 .nf
  58 private=\fBadvice\fR
  59 shared=\fBadvice\fR
  60 heap=\fBadvice\fR
  61 stack=\fBadvice\fR
  62 \fBaddress\fR[:\fBlength\fR]=\fBadvice\fR
  63 .fi
  64 .in -2
  65 .sp
  66 
  67 where the \fBadvice\fR can be one of the following:
  68 .sp
  69 .in +2
  70 .nf
  71 normal
  72 random
  73 sequential
  74 willneed
  75 dontneed
  76 free
  77 access_lwp
  78 access_many
  79 access_default
  80 purge
  81 .fi
  82 .in -2
  83 .sp
  84 
  85 An \fBaddress\fR and \fBlength\fR can be given to specify a subrange to apply
  86 the advice.The \fBaddress\fR should be hexadecimal and the \fBlength\fR should
  87 be in bytes by default.
  88 .sp
  89 If \fBlength\fR is not specified and the starting address refers to the start
  90 of a segment, the advice is applied to that segment. \fBlength\fR can be
  91 qualified by \fBK\fR, \fBM\fR, \fBG\fR, \fBT\fR, \fBP\fR, or \fBE\fR to specify
  92 kilobytes, megabytes, gigabytes, terabytes, or exabytes respectively as the
  93 unit of measure.
  94 .RE
  95 
  96 .sp
  97 .ne 2
  98 .na
  99 \fB\fB-v\fR\fR
 100 .ad
 101 .RS 6n
 102 Print verbose output. Display output as \fBpmap\fR(1) does, showing what advice
 103 is being applied where. This can be useful when the advice is being applied to
 104 a named region (for example, private, shared, and so forth) to get feedback on
 105 exactly where the advice is being applied.
 106 .RE
 107 
 108 .sp
 109 .LP
 110 \fBpmadvise\fR tries to process all legal options. If an illegal address range
 111 is specified, an error message is printed and the offending option is skipped.
 112 \fBpmadvise\fR quits without processing any options and prints a usage message
 113 when there is a syntax error.
 114 .sp
 115 .LP
 116 If conflicting advice is given on a region, the order of precedence is from
 117 most specific advice to least, that is, most general. In other words, advice
 118 specified for a particular address range takes precedence over advice for heap
 119 and stack which in turn takes precedence over advice for private and shared
 120 memory.
 121 .sp
 122 .LP
 123 Moreover, the advice in each of the following groups are mutually exclusive
 124 from the other advice within the same group:
 125 .sp
 126 .in +2
 127 .nf
 128 MADV_NORMAL, MADV_RANDOM, MADV_SEQUENTIAL
 129 MADV_WILLNEED, MADV_DONTNEED, MADV_FREE, MADV_PURGE
 130 MADV_ACCESS_DEFAULT, MADV_ACCESS_LWP, MADV_ACCESS_MANY
 131 .fi
 132 .in -2
 133 .sp
 134 
 135 .SH OPERANDS
 136 .LP
 137 The following operands are supported:
 138 .sp
 139 .ne 2
 140 .na
 141 \fB\fIpid\fR\fR
 142 .ad
 143 .RS 7n
 144 Process ID.
 145 .RE
 146 
 147 .SH EXAMPLES
 148 \fBExample 1 \fRApplying Advice to a Segment at Specified Address
 149 .sp
 150 .LP
 151 The following example applies advice to a segment at a specified address:
 152 
 153 .sp
 154 .in +2
 155 .nf
 156 % pmap $$
 157 100666: tcsh
 158 00010000     312K r-x--  /usr/bin/tcsh
 159 0006C000      48K rwx--  /usr/bin/tcsh
 160 00078000     536K rwx--    [ heap ]
 161 FF100000     856K r-x--  /lib/libc.so.1
 162 FF1E6000      32K rwx--  /lib/libc.so.1
 163 FF1EE000       8K rwx--  /lib/libc.so.1
 164 FF230000     168K r-x--  /lib/libcurses.so.1
 165 FF26A000      32K rwx--  /lib/libcurses.so.1
 166 FF272000       8K rwx--  /lib/libcurses.so.1
 167 FF280000     576K r-x--  /lib/libnsl.so.1
 168 FF310000      40K rwx--  /lib/libnsl.so.1
 169 FF31A000      24K rwx--  /lib/libnsl.so.1
 170 FF364000       8K rwxs-    [ anon ]
 171 FF370000      48K r-x--  /lib/libsocket.so.1
 172 FF38C000       8K rwx--  /lib/libsocket.so.1
 173 FF3A0000       8K r-x--  /platform/sun4u-us3/lib/libc_psr.so.1
 174 FF3B0000     176K r-x--  /lib/ld.so.1
 175 FF3EC000       8K rwx--  /lib/ld.so.1
 176 FF3EE000       8K rwx--  /lib/ld.so.1
 177 FFBE6000     104K rw---    [ stack ]
 178 %
 179 % pmadvise -o 78000=access_lwp $$
 180 
 181 %
 182 .fi
 183 .in -2
 184 .sp
 185 
 186 .LP
 187 \fBExample 2 \fRUsing the \fB-v\fR Option
 188 .sp
 189 .LP
 190 The following example displays verbose output from \fBpmadvise\fR:
 191 
 192 .sp
 193 .in +2
 194 .nf
 195 
 196 % pmadvise -o heap=access_lwp,stack=access_default -v $$
 197 1720:   -sh
 198 00010000      88K r-x--  /sbin/sh
 199 00036000       8K rwx--  /sbin/sh
 200 00038000      16K rwx--    [ heap ]           <= access_lwp
 201 FF250000      24K r-x--  /lib/libgen.so.1
 202 FF266000       8K rwx--  /lib/libgen.so.1
 203 FF272000       8K rwxs-    [ anon ]
 204 FF280000     840K r-x--  /lib/libc.so.1
 205 FF362000      32K rwx--  /lib/libc.so.1
 206 FF36A000      16K rwx--  /lib/libc.so.1
 207 FF380000       8K r-x--  /platform/sun4u-us3/lib/libc_psr.so.1
 208 FF390000      64K rwx--    [ anon ]
 209 FF3B0000     168K r-x--  /lib/ld.so.1
 210 FF3EA000       8K rwx--  /lib/ld.so.1
 211 FF3EC000       8K rwx--  /lib/ld.so.1
 212 FFBFE000       8K rw---    [ stack ]          <= access_default
 213 .fi
 214 .in -2
 215 .sp
 216 
 217 .SH EXIT STATUS
 218 .LP
 219 The following exit values are returned:
 220 .sp
 221 .ne 2
 222 .na
 223 \fB\fB0\fR\fR
 224 .ad
 225 .RS 12n
 226 Successful completion.
 227 .RE
 228 
 229 .sp
 230 .ne 2
 231 .na
 232 \fB\fBnon-zero\fR\fR
 233 .ad
 234 .RS 12n
 235 An error occurred.
 236 .RE
 237 
 238 .SH FILES
 239 .ne 2
 240 .na
 241 \fB\fB/proc/*\fR\fR
 242 .ad
 243 .RS 19n
 244 Process files
 245 .RE
 246 
 247 .sp
 248 .ne 2
 249 .na
 250 \fB\fB/usr/prob/lib/*\fR\fR
 251 .ad
 252 .RS 19n
 253 \fBproc\fR tools support files
 254 .RE
 255 
 256 .SH ATTRIBUTES
 257 .LP
 258 See \fBattributes\fR(5) for descriptions of the following attributes:
 259 .sp
 260 
 261 .sp
 262 .TS
 263 box;
 264 c | c
 265 l | l .
 266 ATTRIBUTE TYPE  ATTRIBUTE VALUE
 267 _
 268 Interface Stability     See below.
 269 .TE
 270 
 271 .sp
 272 .LP
 273 The command syntax is Evolving. The output formats are Unstable.
 274 .SH SEE ALSO
 275 .LP
 276 \fBmadv.so.1\fR(1), \fBpmap\fR(1), \fBproc\fR(1), \fBmadvise\fR(3C),
 277 \fBattributes\fR(5)