IntervalZero RTX64 4.x 帮助文档

⌘K
  1. 主页
  2. 文档
  3. IntervalZero RTX64 4.x 帮助...
  4. 配置实时子系统 (RTSS)...
  5. 内存管理

内存管理

通过 RTX64 控制面板中 Manage memory(内存管理)页面,可以设置 RTX64 子系统在内存分配时,与 Windows 交互的默认行为。详细说明如下:

注意:RTX64 控制面板的某些配置更改,需要重新启动 RTSS 子系统。


在 RTX64 控制面板中打开此页面

在 RTX64 控制面板中打开内存管理页面:

  1. 在 Windows 开始菜单中,导航至 RTX64 4.x Runtime,单击 RTX64 Control Panel
  2. 单击 Configure the RTSS Subsystem -> Manage memory

了解内存属性

Memory profile 内存属性 下,您可以配置 RTX64 可用系统内存的大致数量(参阅下方 Calculating Available System Memory 计算可用系统内存),以及查看 RTX64 组件内存使用信息。当变更页面上的分配值时,使用值也会相应更新。这些信息为用户提供了非常有用的参考值,如初始化时分配多少内存,是否有足够的剩余内存来运行 RTSS 进程等。

计算可用系统内存

RTX64 可用的内存量使用两个主要值计算,您可以在内存配置文件下指定这两个值:

设置描述操作
Available system memory
可用系统内存
可用的系统内存容量(以 GB 为单位)。
默认值基于 RTX64 安装程序检测到的可用内存量。
您可以在 Windows 任务管理中查看当前系统可用内存内存量(下图以 Windows 10 为例):
要更改可用系统内存容量,请先记下 Windows 任务管理器中的可用值,并将其输入 Memory Profile 页面对应的框中。

注意:最好定期将 RTX64 控制面板中的可用系统内存量与 Windows 任务管理器中的实际内存量进行比较。
Percentage expected to be used by Windows
预计 Windows 使用的百分比
该值是指与实时应用程序一起运行的 Windows 应用程序,预计使用的内存的百分比。默认值为 50%。可用系统内存的剩余百分比是 RTX64 可用的量。
可用系统内存 (GB) – Windows 使用的内存 (%)= 可用 RTX64 内存 (%)
该值的可接受范围是 1-99%。
要更改此百分比,请在文本字段中输入一个新值。
要估算此值,请满载运行全部 Windows 和 RTX64 应用程序,同时查看内存使用情况来自定义此值。

注意:这些值并不会强制执行。它们用于控制面板中的内存分配计算。

RTX64 组件内存使用

注意:外部分配可以通过控制面板设置。但是,内存使用量的计算会宏观考虑外部和内部资源分配。

注意:这些组件使用值仅适用于本地内存。

组件描述
Initial Subsystem usage
初始化子系统
初始化 RTX64 子系统需要的初始内存量。主要用于子系统内部结构。
详细信息,参阅 Allocation Spaces in Local Memory(在本地内存中分配空间)
Monitoring usage
监控使用情况
RTX64 监控使用的内存量。

注意:如果在 Configure the RTSS Subsystem -> Change Monitoring settings 设置中,未选中 Enable instrumentation within the Subsystem for monitoring real-time applications则该值显示灰色,且其使用情况不会被计算。
Initial NAL usage
初始化 NAL
初始化网络抽象层 (NAL) 需要的初始内存量。该值假定除了虚拟 NIC 外,还存在一个已启用的接口。如果启用了多个接口,则必须相应增加此值,或启用自动扩展设置。

注意:NAL 内存无法禁用。
Initial TCP/IP Stack usage
初始化 TCP/IP 栈
分配给 TCP/IP 栈的初始内存量,包括堆,但不包括设备驱动程序启动时分配的内存。该值假定除了虚拟 NIC 外,还存在一个已启用的接口。如果启用了多个接口,则必须相应增加此值,或启用自动扩展设置。

注意:当 TCP/IP 栈未被激活,该值显示灰色,且不会被计算。
Remaining memory available to RTSS processes
RTSS 进程可用的剩余内存
基于所有其他分配状况,估算的 RTSS 进程可用剩余内存。
Approximate number of concurrent RTSS processes that can run
可并发运行的 RTSS 进程大致数量
可并发运行的 RTSS 进程大致数量,基于 Remaining memory available to RTSS processes( RTSS 进程可用的剩余内存)值。

注意:进程启动时,每个进程的的 MSpaces 默认值可以修改,所以是一个近似值。

管理子系统和应用程序内存分配行为

用户可以配置 RTX64 默认的内存分配行为:从本地池或 Windows 请求内存。

设置子系统和应用程序内存分配默认值:

选择一种内存分配方式:

  • Request from local memory pool(从本地内存池请求):默认设置,确定性。所有 RTSS 应用将从本地内存分配空间 (MSpace) 请求内存。详细信息,参阅下面 Using Local Memory(使用本地内存)
  • Request from Windows(从 Windows 的请求):非确定性。所有 RTSS 应用从 Windows 请求内存。如果有其他 RTSS 应用提前调用了 RtAllocateLocalMemoryRtAllocateMemoryEx 函数,RTX64 会为进程创建一个 MSpace。选择此选项后,就可以配置分配给 RT-TCP/IP 堆栈的内存量(以千字节为单位)。但这并不包括设备驱动程序在启动时分配的内存。

分配时清零内存

根据 Windows 遵循的 C99 规范,由 malloc 或类似的 C 函数分配的内存,不能初始化为零。为了保持向后兼容性,RTX64 提供了 Zero memory on allocation(分配时清零内存)设置。

默认情况下启用此设置。

注意:将内存清零可能会导致性能衰退。如果衰退不可接受,请禁用此设置。禁用后,来自某些 C 语言函数或 RTAPI 的内存请求,在分配时不会清零。但是,根据定义,来自 calloc/_recallocVirtualAlloc 和带有 HEAP_ZERO_MEMORY 标志的 HeapAlloc/HeapReAlloc 的内存请求,将在分配时初始化为零。

详细信息,参阅 Zeroing Memory on Allocation(分配时清零内存)

重新启动 RTX64 使更改生效。


使用本地内存

本地内存配置包含了组成系统的多个分配空间 (MSpace):RTX64 子系统,NAL ,RT-TCP/IP 栈,以及每个 RTSS 进程和 Windows 代理进程。RTX64 子系统、网络组件以及每个 RTSS 进程和代理进程,都有一个用于内部对象和 bookkeeping 的内部 MSpace,以及一个用于进程分配的外部 MSpace。子系统内部对象所需内存,在内部 MSpace 中分配。而来自 RTAPI,包括 C 语言库的内存分配请求,在外部 MSpace 中分配。详细信息,请参阅 Allocation Spaces in Local Memory(本地内存中的空间分配)

内存是从进程 MSpace 之一分配的,除非需要在进程退出时保留内存,例如 IPC 对象的内存和跨进程共享内存。这种分配是在子系统的 MSpace 中进行的。

当使用本地内存时,子系统的外部 MSpace 会在第一次内存请求时创建,但如果选择提交(commit),子系统启动时就会分配内存。 各个进程的外部 MSpace 的类似。除非使用 RtssRunRTX64 任务管理器启动进程,或者向本地或托管 API 传递进程 MSpace 的初始大小,否则第一次内存请求时就会分配内存。这将为一般的非确定性功能提供确定性特征,并在系统停止想要(蓝屏)后,提供更大的灵活性和功能性。

用户可以指定本地内存分配空间 (MSpace) 的初始大小(KB)。如果 RTSS 应用程序耗尽了最初分配的内存,还可以将 MSpace 配置为自动扩展。

注意,当 MSpace 中的剩余可用内存无法满足分配请求时,扩展功能将请求内存。在扩展期间,从 Windows 请求的内存会导致不确定性,并且无法在关闭处理程序中调用。为了避免这种情况,了解应用程序的内存需求,并设置满足需求的初始 MSpace 大小非常重要。有关在 RTX64 中使用本地内存的更多信息,请参阅 Allocation Spaces in Local Memory(本地内存中的空间分配)

进程内存分配空间

使用如下设置为本地应用程序配置内存分配。

设置描述操作
Minimum size for internal MSpace (KB)
内部 MSpace 的最小大小
每个 RTSS 进程的内部 MSpace 的最小大小拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。
Minimum size for external MSpace (KB)
外部 MSpace 的最小大小
每个 RTSS 进程的外部 MSpace 的最小大小拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。
Auto expand MSpaces
自动扩展 MSpaces
您可以将 RTX64 配置为在 MSpace 耗尽后自动请求额外(扩展)内存。 注意,扩展内存会引入不确定性
此设置决定 RTSS 进程的 MSpace 是否将会自动扩展,以满足内存需求。
要自动扩展 MSpace,选中该复选框,并设置扩展大小(默认)。请拖动滑块或在文本字段中输入值。
要关闭自动扩展,取消选中该复选框。

注意:如果请求的内存不可用,则内存分配请求将失败。
Auto shrink MSpaces
自动缩小 MSpaces
在释放直接从本地池分配的内存时,是否收缩 MSpace。要自动收缩 MSpace,选中该复选框(默认)。
要关闭自动收缩,请清除取消选中该复选框。

系统进程内存分配空间

使用如下设置来配置子系统本地内存分配行为。

设置描述操作
Minimum size for internal MSpace (KB)
内部 MSpace 的最小大小
系统进程内部 MSpace 的最小大小拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。
Minimum size for external MSpace (KB)
外部 MSpace 的最小大小
系统进程外部 MSpace 的最小大小拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。

注意:所有进程的共享内存和 IPC 对象的内存分配都取决于该值。
Commit at Subsystem startup
在子系统启动时提交
是否在子系统启动时,将 Windows 中的非分页内存分配到 MSpace 的本地池中要在启动时提交 MSpace 内存(分配),请选中该复选框。反之取消选中该复选框。
Auto expand MSpaces
自动扩展 MSpaces
您可以将 RTX64 配置为在 MSpace 耗尽后自动请求额外(扩展)内存。 注意,扩展内存会引入不确定性
此设置决定系统进程的 MSpace 是否将会自动扩展,以满足内存需求。
要自动扩展 MSpace,选中该复选框,并设置扩展大小。请拖动滑块或在文本字段中输入值。
要关闭自动扩展,取消选中该复选框。

重要提醒!Auto expand MSpaces 禁用时,需要为整个系统中内部和外部资源配置子系统的内存用量。包括网络组件(NAL 和 RT-TCP/IP 栈)以及 RTX64 运行时提供的其他工具和实用程序。如果子系统没有足够的可用内存,实时进程将无法运行或无法创建 IPC 对象,并返回ERROR_NOT_ENOUGH_MEMORY
Auto shrink MSpaces
自动缩小 MSpaces
在释放直接从本地池分配的内存时,是否收缩 MSpace。要自动收缩 MSpace,选中该复选框(默认)。
要关闭自动收缩,请清除取消选中该复选框。

网络内存分配空间

该设置用来配置网络抽象层 (NAL) 和 RT-TCP/IP 栈的内存分配空间。

网络抽象层 (NAL) 内存分配空间

设置描述操作
Minimum size for external MSpace (KB)
外部 MSpace 的最小大小
NAL 进程的外部 MSpace 最小大小。其最小值为 64 KB,默认值为 1024 KB。
根据启用的接口数量不同,该值大小也会不同。
可以使用如下公式计算需要分配的内存量:
外部 MSpace 的最小大小 = 128K+(64K* numberOfEnabledInterfaces)
拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。
Commit at Subsystem startup
在子系统启动时提交
是否在 NAL 进程启动时,将 Windows 中的非分页内存分配到 MSpace 的本地池中要在启动时提交 MSpace 内存(分配),请选中该复选框。反之取消选中该复选框。
Auto expand MSpaces
自动扩展 MSpaces
您可以将 RTX64 配置为在 MSpace 耗尽后自动请求额外(扩展)内存。 注意,扩展内存会引入不确定性
此设置决定 NAL 进程的 MSpace 是否将会自动扩展,以满足内存需求。
要自动扩展 MSpace,选中该复选框,并设置扩展大小。请拖动滑块或在文本字段中输入值。
要关闭自动扩展,取消选中该复选框。
请注意,当 MSpace 最小尺寸太小时,无法关闭自动扩展。

TCP/IP 栈内存分配空间

注意:当 RT-TCP/IP 栈未激活,或已激活但未启动时,RT-TCP/IP 栈设置将显示灰色。

注意:根据启用的接口数量,以及其他相关因素,当对 TCP/IP 栈内存配置可能导致内存不足时,控制面板会显示警告。

设置描述操作
Minimum size for external MSpace (KB)
外部 MSpace 的最小大小
TCP/IP 栈进程的外部 MSpace 最小大小。其最小值为 64 KB,默认值为 6272 KB。
该值需要足够大才能保证 RT-TCP/IP 堆栈分配,并且必须至少为 RT-TCP/IP 堆栈分配大小加上 2176 KB。
可以使用如下公式计算需要分配的内存量:
外部 MSpace 的最小大小 = StackHeapK+128K+(64K* numberOfEnabledInterfaces)
拖动滑块或在文本字段中输入新值。

注意:对此值的更改会自动提交。如果 RT-TCP/IP 栈正在运行,则需要重新启动。
MSpace memory allocated to the TCP/IP Stack heap
(kilobytes, not including memory allocated by device drivers at startup)
分配给 TCP/IP 堆栈的 MSpace 内存
(KB,不包括设备驱动程序在启动时分配的内存)
TCP/IP 栈必须在启动时分配所有必要的内存才能保证确定性。分配的内存值应该足够大,能够包含所有发送和接收缓冲区。
该设置最小值为 2048 KB,最大允许值为 4 GB。
可以使用如下公式计算需要分配的内存量:
堆栈内存 = 2048K + (50K* numberOfEnabledInterfaces) + (200K* numberOfActiveConnections);

注意:这不包括 NIC 驱动程序在启动时分配的内存。

注意:此内存是从 MSpace 分配的,如果未启用自动扩展 MSpace,则 TCP/IP 栈堆大小必须比外部 MSpace 的最小值(KB)少 2176KB。
在文本字段中输入一个值。
Auto expand MSpaces
自动扩展 MSpaces
您可以将 RTX64 配置为在 MSpace 耗尽后自动请求额外(扩展)内存。 注意,扩展内存会引入不确定性
此设置决定 TCP/IP 栈进程的 MSpace 是否将会自动扩展,以满足内存需求。

注意:如果外部 MSpace 的最小大小值,小于分配给 TCP/IP 栈堆的 MSpace 内存值,则无法禁用自动扩展 MSpace。
要自动扩展 MSpace,选中该复选框,并设置扩展大小。请拖动滑块或在文本字段中输入值。
要关闭自动扩展,取消选中该复选框。
请注意,当 MSpace 最小尺寸太小时,以至于无法支持堆栈时,无法关闭自动扩展。

管理监控内存使用

拖动滑块或在文本字段中输入值,来指定子系统收集监控事件需要的连续非分页内存大小。该内存从非分页池内存中分配,并且在启用监控时分配。

注意:未启用监控时,此部分呈灰色。

注意:根据您正在监视的事件数量以及这些事件的频率,您可能需要增加此值的大小,从而避免由于内部缓冲区空间不足而丢失数据。如果遇到数据丢失事件,请增加专用于监控的内存量(同时考虑监控较少类型的事件)。