Skip Navigation Links | |
Exit Print View | |
Memory and Thread Placement Optimization Developer's Guide Oracle Solaris 11.1 Information Library |
1. Overview of Locality Groups
Specifying Process and Thread Arguments
Functions in the Solaris::lgrp Module
The madv.so.1 shared object enables the selective configuration of virtual memory advice for launched processes and their descendants. To use the shared object, the following string must be present in the environment:
LD_PRELOAD=$LD_PRELOAD:madv.so.1
The madv.so.1 shared object applies memory advice as specified by the value of the MADV environment variable. The MADV environment variable specifies the virtual memory advice to use for all heap, shared memory, and mmap regions in the process address space. This advice is applied to all created processes. The following values of the MADV environment variable affect resource allocation among lgroups:
This value resets the kernel's expected access pattern to the default.
This value advises the kernel that the next LWP to touch an address range is the LWP that will access that range the most. The kernel allocates the memory and other resources for this range and the LWP accordingly.
This value advises the kernel that many processes or LWPs will access memory randomly across the system. The kernel allocates the memory and other resources accordingly.
The value of the MADVCFGFILE environment variable is the name of a text file that contains one or more memory advice configuration entries in the form exec-name:advice-opts.
The value of exec-name is the name of an application or executable. The value of exec-name can be a full pathname, a base name, or a pattern string.
The value of advice-opts is of the form region=advice. The values of advice are the same as the values for the MADV environment variable. Replace region with any of the following legal values:
Advice applies to all heap, shared memory, and mmap(2) regions in the process address space.
The heap is defined to be the brk(2) area. Advice applies to the existing heap and to any additional heap memory allocated in the future.
Advice applies to shared memory segments. See shmat(2) for more information on shared memory operations.
Advice applies to shared memory segments that are using the SHM_SHARE_MMU flag. The ism option takes precedence over shm.
Advice applies to shared memory segments that are using the SHM_PAGEABLE flag. The dsm option takes precedence over shm.
Advice applies to mappings established by the mmap() system call using the MAP_SHARED flag.
Advice applies to mappings established by the mmap() system call using the MAP_PRIVATE flag.
Advice applies to mappings established by the mmap() system call using the MAP_ANON flag. The mapanon option takes precedence when multiple options apply.
The value of the MADVERRFILE environment variable is the name of the path where error messages are logged. In the absence of a MADVERRFILE location, the madv.so.1 shared object logs errors by using syslog(3C) with a LOG_ERR as the severity level and LOG_USER as the facility descriptor.
Memory advice is inherited. A child process has the same advice as its parent. The advice is set back to the system default advice after a call to exec(2) unless a different level of advice is configured using the madv.so.1 shared object. Advice is only applied to mmap() regions explicitly created by the user program. Regions established by the run-time linker or by system libraries that make direct system calls are not affected.
The following examples illustrate specific aspects of the madv.so.1 shared object.
Example 2-1 Setting Advice for a Set of Applications
This configuration applies advice to all ISM segments for applications with exec names that begin with foo.
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE foo*:ism=access_lwp
Example 2-2 Excluding a Set of Applications From Advice
This configuration sets advice for all applications with the exception of ls.
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADV=access_many $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADV MADVCFGFILE $ cat $MADVCFGFILE ls:
Example 2-3 Pattern Matching in a Configuration File
Because the configuration specified in MADVCFGFILE takes precedence over the value set in MADV, specifying * as the exec-name of the last configuration entry is equivalent to setting MADV. This example is equivalent to the previous example.
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE ls: *:madv=access_many
Example 2-4 Advice for Multiple Regions
This configuration applies one type of advice for mmap() regions and different advice for heap and shared memory regions for applications whose exec() names begin with foo.
$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 $ MADVCFGFILE=madvcfg $ export LD_PRELOAD MADVCFGFILE $ cat $MADVCFGFILE foo*:madv=access_many,heap=sequential,shm=access_lwp