You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析numa_get_membind返回值以获取绑定的NUMA节点1?

解析numa_get_membind返回值获取绑定的NUMA节点信息

numa_get_membind()返回的struct bitmask是NUMA节点的位掩码结构,每一位对应一个NUMA节点,位值为1表示程序内存已绑定到该节点。你可以借助NUMA库提供的辅助函数解析这个掩码,确认是否绑定到节点1。

核心解析步骤

  • 获取绑定掩码:调用numa_get_membind()得到掩码指针,需检查返回值是否为NULL(调用失败时返回NULL)。
  • 遍历节点状态:用numa_bitmask_nbits()获取掩码覆盖的总节点数,再通过numa_bitmask_isbitset()逐个检查节点是否被绑定。
  • 释放资源:使用numa_bitmask_free()释放掩码结构,避免内存泄漏。

示例代码

#include <numa.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
    struct bitmask *membind_mask = numa_get_membind();
    if (!membind_mask) {
        perror("调用numa_get_membind失败");
        exit(EXIT_FAILURE);
    }

    // 打印所有绑定的节点
    printf("当前内存绑定的NUMA节点:");
    for (int node = 0; node < numa_bitmask_nbits(membind_mask); node++) {
        if (numa_bitmask_isbitset(membind_mask, node)) {
            printf("%d ", node);
        }
    }
    printf("\n");

    // 检查节点1是否被绑定
    if (numa_bitmask_isbitset(membind_mask, 1)) {
        printf("已成功绑定至NUMA节点1\n");
    } else {
        printf("未绑定至NUMA节点1\n");
    }

    numa_bitmask_free(membind_mask);
    return EXIT_SUCCESS;
}

编译说明

编译时需要链接NUMA库,执行命令:

gcc your_file.c -o numa_check -lnuma

关键函数说明

  • numa_bitmask_nbits(struct bitmask *mask):返回掩码包含的NUMA节点总数
  • numa_bitmask_isbitset(struct bitmask *mask, int node):检查指定节点是否在绑定列表中,返回非0值表示已绑定
  • numa_bitmask_free(struct bitmask *mask):释放numa_get_membind()分配的掩码内存,必须调用

内容的提问来源于stack exchange,提问作者김시은

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:22:12