--- tags: aliases: - 1.1.2 内存子系统策略 (Memory Subsystem Policy) date created: 星期三, 十一月 19日 2025, 3:48:55 下午 date modified: 星期三, 十一月 19日 2025, 3:49:00 下午 --- # 1.1.2 内存子系统策略 (Memory Subsystem Policy) **1. 透明大页状态 (Transparent HugePages Status)** - **关键性**:P0 - **预期信息**:查看当前状态是 `[always]` 还是 `[never]`。在 64KB 基础页宽的系统上,THP 机制更为激进,极易导致内存碎片化和不可预测的内核态 CPU 占用(sys cpu high)。雷达实时处理业务通常强制要求设为 `never` 或 `madvise`。 - 探测命令: ```bash cat /sys/kernel/mm/transparent_hugepage/enabled always [madvise] never ``` **2. 标准大页尺寸 (Default Hugepage Size)** - **关键性**:P1 - **预期信息**:确认系统默认的大页物理尺寸。在 x86 (4KB 页) 上通常是 2MB;但在 64KB 页宽的 aarch64 系统上,一级大页通常是 **512MB**。这直接决定了驱动程序(如 DMA 缓冲)申请连续物理内存时的对齐粒度和最小单元。 - 探测命令: ```bash grep "Hugepagesize" /proc/meminfo Hugepagesize: 524288 kB ``` **3. 大页内存预留量 (Total HugePages)** - **关键性**:P1 - **预期信息**:检查系统是否在启动阶段通过 Boot Args 预留了物理大页。若显示 `0`,说明完全依赖运行时分配。对于从 ADC 采集的高速数据流,运行时动态申请大页极易失败,必须确认是否有静态预留。 - 探测命令: ```bash grep "HugePages_Total" /proc/meminfo HugePages_Total: 0 ``` **4. 虚拟内存交换倾向 (Swappiness)** - **关键性**:P1 - **预期信息**:数值范围 0-100。对于实时雷达系统,任何形式的 Swap-out(内存换出)都是致命的,会导致毫秒级的处理中断。该值应被严格限制在 `0` 或 `10` 以内。 - 探测命令: ```bash cat /proc/sys/vm/swappiness 10 ``` **5. 内存过载分配策略 (Overcommit Memory Policy)** - **关键性**:P2 - **预期信息**:返回值为 `0` (启发式), `1` (总是允许), 或 `2` (严格限制)。GPGPU 驱动初始化时常需预分配巨大的虚拟地址空间,若此值为 `2` (禁止过载) 且无足够 Swap,驱动初始化(`cudaMalloc` 等价调用)可能会直接崩溃。 - 探测命令: ```bash cat /proc/sys/vm/overcommit_memory 0 ``` **6. 物理内存全景 (Physical Memory Overview)** - **关键性**:P2 - **预期信息**:获取 `Total`(物理总内存)与 `Available`(实际可用)。需特别关注在 64KB 页系统下,内核自身的数据结构(Page Tables)会消耗比 x86 更多的内存,需评估剩余内存是否满足信号处理算法的峰值需求。 - 探测命令: ```bash free -h total used free shared buff/cache available Mem: 62Gi 2.8Gi 58Gi 81Mi 1.2Gi 54Gi Swap: 8.0Gi 0B 8.0Gi ```