跳过导航链接 | |
退出打印视图 | |
手册页第 1 部分:用户命令 Oracle Solaris 11.1 Information Library (简体中文) |
- madv 库
/usr/lib/madv.so.1
madv.so.1 共享目标文件为已启动的进程及其子孙进程提供一种选择性配置 VM 建议的方法。要启用 madv.so.1,环境中需要存在以下字符串(请参见 ld.so.1(1))以及一个或多个 MADV 环境变量:
LD_PRELOAD=$LD_PRELOAD:madv.so.1
如果在 LD_PRELOAD 中指定了 madv.so.1 共享目标文件,madv 共享目标文件会读取以下环境变量,以确定哪些已创建进程应用指定建议。
MADV 指定用于进程地址空间中所有堆、共享内存以及 mmap 区域的 VM 建议。此建议将应用于所有已创建进程。
advice 的值对应于 madvise(3C) 中使用的 <sys/mman.h> 中的值,以指定内存访问模式:
|
config-file 是包含一个或多个以下形式的 madv 配置项的文本文件。
exec-name exec-args:advice-opts
config-file 中指定的建议优先于 MADV 环境变量所指定的建议。没有设置 MADVCFGFILE 时,会从文件 /etc/madv.conf 中提取建议(如果存在)。
exec-name 指定应用程序或可执行文件的名称。对应的建议是为与文件中找到的第一个 exec-name 相匹配的新建进程(请参见 getexecname(3C))而设置的。
exec-name 可能为全路径名、基名或模式字符串。有关模式匹配的讨论,请参见 sh(1) 中的“生成文件名”。
exec-args 是与参数相匹配的选择性指定模式字符串。仅当未指定 exec-args 或其出现在 exec-name 的参数内时,才会设置建议。
advice-opts 是逗号分隔的列表,为不同内存区域指定建议:
应用于进程地址空间中的所有堆、共享内存和 mmap 区域。
堆被定义为 brk 区域(请参见 brk(2))。应用于现有堆以及将来分配的任何其他堆内存。
分别使用任何标志、标志 SHM_SHARE_MMU 或标志 SHM_PAGEABLE 附加的共享内存区段(请参见 shmat(2))。选项 ism 和 dism 优先于选项 shm。
分别使用任何标志、标志 MAP_SHARED、标志 MAP_PRIVATE 或标志 MAP_ANON 通过 mmap(2) 建立的映射。选项 mapshared、mapprivate 和 mapanon 优先于选项 map。选项 mapanon 优先于 mapshared 和 mapprivate。
缺省情况下,使用级别 LOG_ERR 和工具 LOG_USER 通过syslog(3C) 记录错误消息。如果 MADVERRFILE 包含有效的路径名(例如 /dev/stderr),将在其中记录错误消息。
示例 1 将建议应用于所有 ISM 段
以下配置将建议应用于应用程序 /usr/bin/foo 的所有 ISM 段:
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE /usr/bin/foo:ism=access_lwp
示例 2 为所有应用程序设置建议且具有例外
以下配置为所有应用程序设置建议,除 ls 外。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADV=access_many example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADV MADVCFGFILE example$ cat $MADVCFGFILE ls:
示例 3 优先级规则(从“示例 2”继续)
由于 MADVCFGFILE 优先于 MADV,为最后一个 madv 配置项的 exec-name 指定 '*'(模式全匹配)相当于设置 MADV。以下等效于示例 2:
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE ls: *:madv=access_many
示例 4 为不同区域应用建议
以下配置为 mmap 区域应用一种类型的建议,并为具有执行名称(以 foo 开头)的一组选定应用程序的堆与共享内存区域应用不同建议。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE foo*:madv=access_many,heap=sequential,shm=access_lwp
示例 5 选择性地应用建议
以下配置为具有 ora1 作为参数并以 ora 开始的应用程序堆应用建议。
example$ LD_PRELOAD=$LD_PRELOAD:madv.so.1 example$ MADVCFGFILE=madvcfg example$ export LD_PRELOAD MADVCFGFILE example$ cat $MADVCFGFILE ora* ora1:heap=access_many
配置文件
有关下列属性的说明,请参见 attributes(5):
|
cat(1)、ld.so.1(1)、proc(1)、sh(1)、brk(2)、exec(2)、fork(2)、mmap(2)、memcntl(2)、shmat(2)、getexecname(3C)、madvise(3C)、syslog(3C)、proc(4)、attributes(5)
建议将被继承。子进程具有与其父进程相同的建议。有关 exec()(请参见 exec(2)),建议会重新设置为缺省系统建议,除非通过 madv 共享目标文件配置了不同建议。
建议只应用于由用户程序显式创建的 mmap 区域。由运行时链接程序或由进行直接系统调用(例如用于线程栈的 libthread 分配)的系统库建立的那些区域不会受到影响。