SuperAPI AI 工具集

numa-programming

编程与开发

查看项目

更新于 10-16 01:18

技能介绍

用途:指导在 NUMA(非统一内存访问)架构上编写内存本地性友好的程序,适用于多路服务器扩展性差、单节点内存带宽饱和、数据库或缓存进程绑定本地内存、HPC/DPDK/自定义分配器调优等场景。

主要能力:拓扑检测(numactl --hardware、lstopo、/sys/devices/system/node/ 下的 meminfo 与 cpulist);进程与内存绑定(numactl --cpunodebind、--membind、--interleave、--preferred,以及 numactl --show、/proc/self/numa_maps 查看策略);libnuma API(numa_available、numa_node_of_cpu、numa_alloc_onnode、numa_alloc_local、mbind、set_mempolicy、move_pages);按节点分区的数据结构(每节点 freelist 避免跨节点同步);线程亲和性对齐(pthread_setaffinity_np 将线程绑定到同节点 CPU);远程访问诊断(perf stat 的 cache-misses、node-load-misses 等事件);远程访问延迟微基准测量;lstopo 可视化。

使用方式:先检测拓扑,确认线程与内存位于同一节点,再用 numactl 绑定或 libnuma API 分配;编译示例需链接 numa 库,如 gcc -o numa_test numa_test.c -lnuma,缺库时 apt install libnuma-dev。

限制与注意:MPOL_BIND 过严会导致单节点 OOM,可用 --preferred 或 interleave;基准结果不稳定时可考虑 mbind 加 mlock;首次触碰策略可能导致分配与运行节点不一致,应在绑定的线程内分配。PCI 设备位置可用 lstopo 确认以就近绑定。具体性能数值依互联类型(QPI/UPI/Infinity Fabric)而异。