DPDK用户工具cpu_layout.py

DPDK 专栏收录该内容
38 篇文章 2 订阅

 

其位于目录usertools下,用于显示当前系统中CPU的结构布局。

首先读取当前系统支持的最大CPU数量。

base_path = "/sys/devices/system/cpu"
fd = open("{}/kernel_max".format(base_path))
max_cpus = int(fd.read())
fd.close()

即读取如下的sys目录中的文件:

$ cat /sys/devices/system/cpu/kernel_max
255
$

其次,循环遍历基础路径下(即目录/sys/devices/system/cpu)的cpuN子目录,N表示从0到上一步获得的最大CPU数量值。由其中的topology子目录下的core_id文件获取到核心ID值,由文件physical_package_id的内容得到socket ID值。

for cpu in xrange(max_cpus + 1):
    try:
        fd = open("{}/cpu{}/topology/core_id".format(base_path, cpu))
    except IOError:
        continue
    except:
        break
    core = int(fd.read())
    fd.close()
    fd = open("{}/cpu{}/topology/physical_package_id".format(base_path, cpu))
    socket = int(fd.read())
    fd.close()
    if core not in cores:
        cores.append(core)
    if socket not in sockets:
        sockets.append(socket)
    key = (socket, core)
    if key not in core_map:
        core_map[key] = []
    core_map[key].append(cpu)

即在目录sys/devices/system/cpu/下遍历cpuN,N表示0到最大CPU数量。取得CPU对应的core_id值。假设当前系统有2个CPU,如下得到两个CPU的CORE ID都为0。

$ cat /sys/devices/system/cpu/cpu0/topology/core_id
0
$ cat /sys/devices/system/cpu/cpu1/topology/core_id
0
$

并且,由topology目录下的文件physical_package_id获取到物理封装ID,即socket。当前系统的CPU 0所对应的socket ID为0;CPU 1所对应的socket ID为2,如下所示。

$ cat /sys/devices/system/cpu/cpu0/topology/physical_package_id
0
$ cat /sys/devices/system/cpu/cpu1/topology/physical_package_id
2
$

以下输出显示基本信息,主要为遍历到的核心cores数据内容,以及保存socket ID的sockets数组内容。

print(format("=" * (47 + len(base_path))))
print("Core and Socket Information (as reported by '{}')".format(base_path))
print("{}\n".format("=" * (47 + len(base_path))))
print("cores = ", cores)
print("sockets = ", sockets)
print("")

最后的输出,显示CPU、core与socket三者之间的关系,即在最开始遍历目录时,初始化好的core_map数组的内容,其索引时(socket, core),值为CPU。

for c in cores:
    output = "Core %s" % str(c).ljust(max_core_id_len)
    for s in sockets:
        if (s,c) in core_map:
            output += " " + str(core_map[(s, c)]).ljust(max_core_map_len)
        else:
            output += " " * (max_core_map_len + 1)
    print(output)

最终执行脚本显示如下:

$ ./cpu_layout.py
======================================================================
Core and Socket Information (as reported by '/sys/devices/system/cpu')
======================================================================

cores =  [0]
sockets =  [0, 2]

       Socket 0   Socket 2
       --------   --------
Core 0 [0]        [1]
$

 

DPDK-19.02

 

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值