在centos7虚拟机上运行DPVS发生的CPU亲和性设置问题

问题:

在centos7虚拟机上编译完成dpvs后,运行发现出现了如下错误:

[root@localhost bin]# ./dpvs

fail to set thread affinty: Invalid argument

set_all_thread_affinity failed

 

查看dpvs的main.c文件可以看到报错位置如下:

       // 发生错误

    if (set_all_thread_affinity() != 0) {

        fprintf(stderr, "set_all_thread_affinity failed\n");

        exit(EXIT_FAILURE);

    }

而这个函数的目的是使用CPU affinity将当前进程绑定到所有的CPU核心上,对这一块不是很熟悉,以此来学习一下CPU affinity(CPU亲和力)的相关知识。

准备知识:

逻辑CPU个数的计算:逻辑CPU数量 = 物理CPU数量 x CPU cores x 2(如果支持并开启超线程技术(Hyper-Threading))

关于超线程技术,是指利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了CPU的闲置时间,提高的CPU的运行效率,我们常听到的双核四线程/四核八线程指的就是支持超线程技术的CPU

物理CPU的个数:机器上安装的实际CPU, 比如说你的主板上安装了一个8核CPU,那么物理CPU个数就是1个,所以物理CPU个数就是主板上安装的CPU个数。

因此比电脑安装了一块4核CPU,并且支持且开启了超线程(HT)技术,那么逻辑CPU数量 = 1 × 4 × 2 = 8

Linux下CPU的相关信息都存放在/proc/cpuinfo中,相关的命令如下:

# 查看物理CPU个数

cat /proc/cpuinfo|grep "physical id"|sort|uniq|wc -l

 

# 查看每个物理CPU中core的个数(即核数)

cat /proc/cpuinfo|grep "cpu cores"|uniq

 

# 查看逻辑CPU的个数

cat /proc/cpuinfo|grep "processor"|wc -l

 

# 查看CPU的名称型号

cat /proc/cpuinfo|grep "name"|cut -f2 -d:|uniq

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值