亲和性

基础介绍

物理CPU:
指的是计算机上实际存在的cpu,可以在 /proc/cpuinfo 中查看,其中 physical id 就是物理cpu id, 在linux 可以通过 命令 grep “physical id” /proc/cpuinfo | sort -u | wc -l 来查看计算机上物理CPU的个数
CPU核数:
指的是 每个cup中处理数据,接受指令的的核心的个数。每个cpu中的 核数是固定的。inux的cpu核心总数也可以在/proc/cpuinfo里面通过指令cat /proc/cpuinfo查看的到,其中的core id指的是每个物理CPU下的cpu核的id,能找到几个core id就代表你的计算机有几个核心。也可以使用指令cat /proc/cpuinfo | grep “cpu cores” | wc -l来统计cpu的核心总数。
逻辑CPU:
操作系统可以用 逻辑cpu 模拟出真是cpu的效果,而当超线程开启后,逻辑CPU的个数是核数的两倍。实际上逻辑CPU的数量就是平时称呼的几核几线程中的线程数量,在linux的cpuinfo中逻辑CPU数就是processor的数量。可以使用指令cat /proc/cpuinfo | grep “processor” | wc -l来查看逻辑CPU数。超线程技术是在一颗CPU同时执行多个程序而共同分享一颗CPU内的资源,理论上要像两颗CPU一样在同一时间执行两个线程,P4处理器需要多加入一个Logical CPU Pointer(逻辑处理单元)。因此新一代的P4 HT的die的面积比以往的P4增大了5%。而其余部分如ALU(整数运算单元)、FPU(浮点运算单元)、L2 Cache(二级缓存)则保持不变,这些部分是被分享的。

其实逻辑cpu 在物理上属于一个CPU,所以相对通信快一点, 而物理cpu之间通信,较分布在同一物理cpu上的两个逻辑cpu之间的通信慢一些。

发现这个问题是源于一次 服务器的压力测试。

亲和性

CPU affinity 是一种调度属性(scheduler property), 它可以将一个进程”绑定” 到一个或一组CPU上.

在SMP(Symmetric Multi-Processing对称多处理)架构下,Linux调度器(scheduler)会根据CPU affinity的设置让指定的进程运行在”绑定”的CPU上,而不会在别的CPU上运行.

Linux调度器同样支持自然CPU亲和性(natural CPU affinity): 调度器会试图保持进程在相同的CPU上运行, 这意味着进程通常不会在处理器之间频繁迁移,进程迁移的频率小就意味着产生的负载小。

CPU affinity 使用位掩码(bitmask)表示, 每一位都表示一个CPU, 置1表示”绑定”.
最低位表示第一个逻辑CPU, 最高位表示最后一个逻辑CPU.
taskset命名用于获取或者设定CPU亲和性.
taskset [options] mask command [arg]…
taskset [options] -p [mask] pid

PARAMETER
 mask : cpu亲和性,当没有-c选项时, 其值前无论有没有0x标记都是16进制的,
 当有-c选项时,其值是十进制的.
 command : 命令或者可执行程序
 arg : command的参数
 pid : 进程ID,可以通过ps/top/pidof等命令获取

OPTIONS
 -a, –all-tasks (旧版本中没有这个选项)
 这个选项涉及到了linux中TID的概念,他会将一个进程中所有的TID都执行一次CPU亲和性设置.
 TID就是Thread ID,他和POSIX中pthread_t表示的线程ID完全不是同一个东西.
 Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),这个TID就是这个线程的真实PID.
-p, –pid 操作已存在的PID,而不是加载一个新的程序
-c, –cpu-list 声明CPU的亲和力使用数字表示而不是用位掩码表示. 例如 0,5,7,9-11.
USAGE

  1) 使用指定的CPU亲和性运行一个新程序

  taskset [-c] mask command [arg]…
 举例:使用CPU0运行ls命令显示/etc/init.d下的所有内容

 taskset -c 0 ls -al /etc/init.d/
2) 显示已经运行的进程的CPU亲和性
taskset -p pid 举例:查看init进程(PID=1)的CPU亲和性
taskset -p 1

3) 改变已经运行进程的CPU亲和力
taskset -p[c] mask pid

PERMISSIONS
一个用户要设定一个进程的CPU亲和性,如果目标进程是该用户的,则可以设置,如果是其他用户的,则会设置失败,提示 Operation not permitted.当然root用户没有任何限制.

任何用户都可以获取任意一个进程的CPU亲和性.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值