1 TB 段重叠

1 TB 段重叠通过在使用 256 MB 段大小的“共享内存区域”上使用 1 TB 段转换,改进性能。 在所有使用“共享内存区域”的 64 位应用程序上都提供这个支持。 定向和未定向共享内存附件都可用于 1 TB 段重叠。

如果应用程序可以使它的“共享内存区域”使用 1 TB 重叠,那么 AIX 操作系统使用 1 TB 段转换,而不更改应用程序。 这需要使用 shm_1tb_shared VMO 可调参数, shm_1tb_unshared VMO 可调参数和 esid_allocator VMO 可调参数。

shm_1tb_shared VMO 可调变量可使用"SHM_1TB_SHARED=" VMM_CNTRL 环境变量按进程设置。 在引导时根据处理器的能力动态设置缺省值。 如果单个“共享内存区域”包含所需要数目的 ESID,那么它自动更改为共享重叠。 可接受值的范围是 0 到 4KB(1 TB 范围大约需要 256 MB ESID)。

shm_1tb_unshared VMO 可调变量可使用"SHM_1TB_UNSHARED=" VMM_CNTRL 环境变量按进程设置。 缺省值设置为 256。 可接受值的范围是 0 到 4 KB。 小心设置缺省值(总共需要达 64 GB 地址空间),然后移动到未共享的 1 TB 重叠。 阈值数目设置为 256 MB 段,此时共享内存区域升级为使用 1 TB 重叠。 更低的值必须小心使用共享内存区域,以使用 1 TB 重叠。 如果重叠了在进程中没有使用的许多共享内存区域,那么这可以降低段旁视缓冲区 (SLB) 未命中,但是也可以增加页表条目 (PTE) 未命中。

可以使用 "ESID_ALLOCATOR =" VMM_CNTRL 环境变量按进程设置 esid_allocator VMO 可调参数。 对于 AIX V6.1,缺省值设置为 0,而对于 AIX V7.0,设置为 1。 值可以是 0 或 1。 设置为 0 时,将启用无向附件的旧分配器。 否则,将新地址空间分配策略用于未定向附件。 这个新地址空间分配程序将任何未定向分配(例如 SHM 和 MMAP),连接到应用程序地址空间中的新地址范围 0x0A00000000000000 - 0x0AFFFFFFFFFFFFFF。 分配程序会优化分配,以便为 1TB 重叠升级提供最可能的机会。 这种优化可能导致地址空间产生“空洞”,当使用未定向附件时,这视为正常。 定向附件在 0x0700000000000000 - 0x07FFFFFFFFFFFFFF 范围内完成,因此保留了与更早版本的兼容性。 在某些情况下,这个新分配策略创建二进制兼容性问题,可以通过将可调参数设置为 0,恢复旧分配程序行为。

不可用于共享重叠升级的共享内存区域分组为 1 TB 区域。 在应用程序地址空间的 1 TB 区域中的一组共享内存区域内,如果应用程序超过阈值 256 MB 段,那么会对它们进行升级以使用非共享 1 TB 重叠。 在经常连接和拆离共享内存的应用程序中,较低的未共享别名阈值将导致性能降级。

要避免损坏环境名称空间,在主可调参数 VMM_CNTRL 下使用所有环境可调参数。 指定的主可调参数使用 @ 符号分隔命令。 使用 VMM_CNTRL 的示例为:
VMM_CNTRL=SHM_1TB_UNSHARED=32@SHM_1TB_SHARED=5

所有环境变量设置都由 fork() 上的子项继承,且继承自 exec() 的系统缺省值。 所有 32 位应用程序都不会受到 VMO 或环境变量可调参数更改影响。

所有 VMO 可调参数和环境变数都包含类似的 vm_pattr 命令。 esid_allocator 可调参数是例外。 这个可调参数不显示在 vm_pattr 选项中以避免以下状况:在运行命令前分配部分共享内存地址空间。