手册页部分 1: 用户命令

退出打印视图

更新时间: 2014 年 7 月
 
 

madv.so.1(1)

名称

madv.so.1 - 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=advice

MADV 指定用于进程地址空间中所有堆、共享内存以及 mmap 区域的 VM 建议。此建议将应用于所有已创建进程。

advice 的值对应于 madvise(3C) 中使用的 <sys/mman.h> 中的值,以指定内存访问模式:

normal
random
sequential
access_lwp
access_many
access_many_pset
access_default
MADVCFGFILE=config-file

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 是逗号分隔的列表,为不同内存区域指定建议:

madv=advice

应用于进程地址空间中的所有堆、共享内存和 mmap 区域。

heap=advice

堆被定义为 brk 区域(请参见 brk(2))。应用于现有堆以及将来分配的任何其他堆内存。

shm=advice
ism=advice
dism=advice

分别使用任何标志、标志 SHM_SHARE_MMU 或标志 SHM_PAGEABLE 附加的共享内存区段(请参见 shmat(2))。选项 ismdism 优先于选项 shm

map=advice
mapshared=advice
mapprivate=advice
mapanon=advice

分别使用任何标志、标志 MAP_SHARED、标志 MAP_PRIVATE 或标志 MAP_ANON 通过 mmap(2) 建立的映射。选项 mapsharedmapprivatemapanon 优先于选项 map。选项 mapanon 优先于 mapsharedmapprivate

MADVERRFILE=pathname

缺省情况下,使用级别 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

文件

/etc/madv.conf

配置文件

属性

有关下列属性的说明,请参见 attributes(5)

属性类型
属性值
可用性
system/extended-system-utilities
接口稳定性
Uncommitted(未确定)

另请参见

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 分配)的系统库建立的那些区域不会受到影响。