ppgsz - set preferred stack and/or heap page size
/usr/bin/ppgsz [-F] -o option[,option] cmd | -p pid...
The ppgsz utility sets the preferred stack and/or heap page
size for the target process(es), that is, the launched cmd
or the process(es) in the pid list. ppgsz stops the target
process(es) while changing the page size. See memcntl(2).
The following options are supported:
-F Force. Sets the preferred page size options(s) for
target process(es) even if controlled by other
process(es). Caution should be exercised when using
the -F flag. See proc(1).
Sets the preferred page size option(s) for the target
process(es) in the process-id (pid) list following the
-p option. The pid list can also consist of names in
the /proc directory. Only the process owner or the
super-user is permitted to set page size.
cmd is interpreted if -p is not specified. ppgsz
launches cmd and applies page size option(s) to the
The heap and stack preferred page sizes are inherited.
Child process(es) created (see fork(2)) from the
launched process or the target process(es) in the pid
list after ppgsz completes will inherit the preferred
heap and stack page sizes. The preferred page sizes
are set back to the default system page size on
exec(2) (see getpagesize(3C)).
The options are:
This option specifies the preferred page size
for the heap of the target process(es). heap is
defined to be the bss (uninitialized data) and
the brk area that immediately follows the bss
(see brk(2)). The preferred heap page size is
set for the existing heap and for any additional
heap memory allocated in the future. See NOTES.
This option specifies the preferred page size
for the stack of the target process(es). The
preferred stack page size is set for the exist-
ing stack and newly allocated parts of the stack
as it expands.
At least one of the above options must be specified.
size must be a supported page size (see pagesize(1)) or 0,
in which case the system will select an appropriate page
size (see memcntl(2)).
size defaults to bytes and can be specified in octal
(0), decimal, or hexadecimal (0x). The numeric value
can be qualified with K, M, G, or T to specify Kilo-
bytes, Megabytes, Gigabytes, or Terabytes, respec-
tively. 4194304, 0x400000, 4096K, 0x1000K, and 4M are
different ways to specify 4 Megabytes.
Example 1: Setting the preferred heap and stack page size
The following example sets the preferred heap page size to
4M and the preferred stack page size to 512K for all ora-
owned processes running commands that begin with ora:
example% ppgsz -o heap=4M,stack=512K -p `pgrep -u ora '^ora'`
If cmd is specified and successfully invoked (see exec(2)),
the exit status of ppgsz will be the exit status of cmd.
Otherwise, ppgsz will exit with one of the following values:
0 Successfully set preferred page size(s) for processes
in the pid list.
125 An error occurred in ppgsz. Errors include: invalid
argument, invalid page size(s) specified, and
failure to set preferred page size(s) for one or more
processes in the pid list or cmd.
126 cmd was found but could not be invoked.
127 cmd could not be found.
A template link-editor mapfile for aligning bss (see
See attributes(5) for descriptions of the following attri-
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
| Availability | SUNWesu (32-bit) |
| | SUNWesxu (64-bit) |
| Interface Stability | Evolving |
ld(1), mpss.so.1(1), pagesize(1), pgrep(1), pmap(1),
proc(1), brk(2), exec(2), fork(2), memcntl(2), sbrk(2),
getpagesize(3C), proc(4), attributes(5)
Linker and Libraries Guide
Due to resource constraints, the setting of the preferred
page size does not necessarily guarantee that the target
process(es) will get the preferred page size. Use pmap(1) to
view the actual heap and stack page sizes of the target
process(es) (see pmap -s option).
Large pages are required to be mapped at addresses that are
multiples of the size of the large page. Given that the heap
is typically not large page aligned, the starting portions
of the heap (below the first large page aligned address) are
mapped with the system memory page size. See
To provide a heap that will be mapped with a large page
size, an application can be built using a link-editor
(ld(1)) mapfile containing the bss segment declaration
directive. Refer to the section ``Mapfile Option'' in the
Linker and Libraries Guide for more details of this direc-
tive and the template mapfile provided in
/usr/lib/ld/map.bssalign. Users are cautioned that an align-
ment specification may be machine-specific and may lose its
benefit on different hardware platforms. A more flexible
means of requesting the most optimal underlying page size
may evolve in future releases.
mpss.so.1(1), a preloadable shared object, can also be used
to set the preferred stack and/or heap page sizes.
Man(1) output converted with