PMADVISE(1) User Commands PMADVISE(1)

NAME


pmadvise - applies advice about memory to a process

SYNOPSIS


pmadvise -o option[,option] [-F] [-l] [-v] pid...


DESCRIPTION


pmadvise applies advice about how memory is used in the specified process
using madvise(3C).


pmadvise allows users to apply advice to a specific sub-range at a
specific instant in time. pmadvise differs from madv.so.1(1) in that
madv.so.1(1) applies the advice throughout execution of the target
program to all segments of a specified type.

OPTIONS


The following options are supported:

-F
Force by grabbing the target process even if another process has
control.

You should exercise caution when using the -F option. See proc(1).


-l
Show unresolved dynamic linker map names.


-o
Specify advice to apply in the following form:

private=advice
shared=advice
heap=advice
stack=advice
address[:length]=advice


where the advice can be one of the following:

normal
random
sequential
willneed
dontneed
free
access_lwp
access_many
access_default
purge


An address and length can be given to specify a subrange to apply
the advice.The address should be hexadecimal and the length should
be in bytes by default.

If length is not specified and the starting address refers to the
start of a segment, the advice is applied to that segment. length
can be qualified by K, M, G, T, P, or E to specify kilobytes,
megabytes, gigabytes, terabytes, or exabytes respectively as the
unit of measure.


-v
Print verbose output. Display output as pmap(1) does, showing what
advice is being applied where. This can be useful when the advice
is being applied to a named region (for example, private, shared,
and so forth) to get feedback on exactly where the advice is being
applied.


pmadvise tries to process all legal options. If an illegal address range
is specified, an error message is printed and the offending option is
skipped. pmadvise quits without processing any options and prints a
usage message when there is a syntax error.


If conflicting advice is given on a region, the order of precedence is
from most specific advice to least, that is, most general. In other
words, advice specified for a particular address range takes precedence
over advice for heap and stack which in turn takes precedence over advice
for private and shared memory.


Moreover, the advice in each of the following groups are mutually
exclusive from the other advice within the same group:

MADV_NORMAL, MADV_RANDOM, MADV_SEQUENTIAL
MADV_WILLNEED, MADV_DONTNEED, MADV_FREE, MADV_PURGE
MADV_ACCESS_DEFAULT, MADV_ACCESS_LWP, MADV_ACCESS_MANY


OPERANDS


The following operands are supported:

pid
Process ID.


EXAMPLES


Example 1: Applying Advice to a Segment at Specified Address




The following example applies advice to a segment at a specified address:


% pmap $$
100666: tcsh
00010000 312K r-x-- /usr/bin/tcsh
0006C000 48K rwx-- /usr/bin/tcsh
00078000 536K rwx-- [ heap ]
FF100000 856K r-x-- /lib/libc.so.1
FF1E6000 32K rwx-- /lib/libc.so.1
FF1EE000 8K rwx-- /lib/libc.so.1
FF230000 168K r-x-- /lib/libcurses.so.1
FF26A000 32K rwx-- /lib/libcurses.so.1
FF272000 8K rwx-- /lib/libcurses.so.1
FF280000 576K r-x-- /lib/libnsl.so.1
FF310000 40K rwx-- /lib/libnsl.so.1
FF31A000 24K rwx-- /lib/libnsl.so.1
FF364000 8K rwxs- [ anon ]
FF370000 48K r-x-- /lib/libsocket.so.1
FF38C000 8K rwx-- /lib/libsocket.so.1
FF3A0000 8K r-x-- /platform/sun4u-us3/lib/libc_psr.so.1
FF3B0000 176K r-x-- /lib/ld.so.1
FF3EC000 8K rwx-- /lib/ld.so.1
FF3EE000 8K rwx-- /lib/ld.so.1
FFBE6000 104K rw--- [ stack ]
%
% pmadvise -o 78000=access_lwp $$

%


Example 2: Using the -v Option




The following example displays verbose output from pmadvise:


% pmadvise -o heap=access_lwp,stack=access_default -v $$
1720: -sh
00010000 88K r-x-- /sbin/sh
00036000 8K rwx-- /sbin/sh
00038000 16K rwx-- [ heap ] <= access_lwp
FF250000 24K r-x-- /lib/libgen.so.1
FF266000 8K rwx-- /lib/libgen.so.1
FF272000 8K rwxs- [ anon ]
FF280000 840K r-x-- /lib/libc.so.1
FF362000 32K rwx-- /lib/libc.so.1
FF36A000 16K rwx-- /lib/libc.so.1
FF380000 8K r-x-- /platform/sun4u-us3/lib/libc_psr.so.1
FF390000 64K rwx-- [ anon ]
FF3B0000 168K r-x-- /lib/ld.so.1
FF3EA000 8K rwx-- /lib/ld.so.1
FF3EC000 8K rwx-- /lib/ld.so.1
FFBFE000 8K rw--- [ stack ] <= access_default


EXIT STATUS


The following exit values are returned:

0
Successful completion.


non-zero
An error occurred.


FILES


/proc/*
Process files


ATTRIBUTES


See attributes(7) for descriptions of the following attributes:


+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | See below. |
+--------------------+-----------------+


The command syntax is Evolving. The output formats are Unstable.

SEE ALSO


madv.so.1(1), pmap(1), proc(1), madvise(3C), attributes(7)

July 17, 2023 PMADVISE(1)