Linux内核SLUB内存分配报错中负NUMA节点ID的含义是什么?
负NUMA节点ID含义说明
你在日志中看到的node -1是Linux内核的标准特殊宏定义,对应NUMA_NO_NODE,仅用于标记本次内存分配没有指定特定NUMA节点的亲和性要求,允许分配器从所有可用NUMA节点中搜索符合条件的内存,不是真实存在的硬件NUMA节点。
相关细节补充:
- 这个负ID是内核内存分配逻辑的约定标记,和你硬件只有单NUMA节点(ID为0)的事实没有冲突,也不代表硬件识别异常。
- 结合你给出的报错日志
SLUB: Unable to allocate memory on node -1, gfp=0xb21(GFP_ATOMIC|GFP_DMA|__GFP_ZERO)来看,触发失败的分配请求同时要求:从DMA内存区域分配、原子上下文不可睡眠、分配的内存自动清零,内核遍历所有可用节点的对应内存区域后都没有找到符合要求的空闲内存块,才抛出该报错。 - 你之前在OOM日志中看到的节点ID为0,是OOM统计时仅会输出真实存在的硬件NUMA节点的内存占用情况,和本次SLUB分配日志中的特殊标记属于不同逻辑场景的输出,不存在矛盾。
如果需要定位该分配失败问题,可以优先确认DMA区域的预留大小是否匹配业务分配需求,排查相关驱动是否存在DMA内存泄漏的问题。
内容的提问来源于stack exchange,提问作者preetam
相关产品推荐
相关产品推荐

