别让你的内存跑马拉松

📅 发布时间:2026/7/8 5:44:19
别让你的内存跑马拉松 别让你的内存跑马拉松1. 问题多路服务器上CPU 和内存不在同一个节点时每次访问多走一条跨节点总线。延迟翻倍带宽打折。这就是你 128 核跑不过 64 核的原因。随机分配绑定本地节点延迟~200ns~80ns带宽跨节点总线共享本地内存独享2. Take Away内存分配不是给一块空间而是给一块空间 决定它在哪。malloc只做了前半件事。后半件事要用mbind(MPOL_BIND)把物理页钉到目标节点。3. 怎么做autormumpire::ResourceManager::getInstance();autonodesumpire::numa::get_host_nodes();autonode0rm.makeAllocatorumpire::strategy::NumaPolicy(node0,rm.getAllocator(HOST),nodes[0]);void*ptrnode0.allocate(size);// 数据自动在 Node 0位置不对一行搬过去rm.move(ptr,node0);// 指针不变物理页瞬移4. 三条规律先 malloc 后 mbind— 预留地址空间再绑定物理页。指针地址不变业务代码不用改。move 是原地操作— VA 不变PA 变。迁移完了指针还是那个指针。同一个 move APIHost NUMA 和 GPU 都能用— 局部性问题在不同尺度上是同一件事。5. 验证numactl--hardware# 看拓扑umpire::numa::get_location# 看位置perfstat-enuma_miss# 看效果