多核cpu

mpstat 查看多核CPU负载状态

孤人 提交于 2020-02-27 13:56:08
mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。mpstat最大的特点是:可以查看多核心cpu中每个计算核心的统计数据;而类似工具vmstat只能查看系统整体cpu情况。 用法: 它显示了系统中 CPU 的各种统计信息。–P 0 选项指示该命令显示所有 CPU 的统计信息,CPU从个数0开始,ALL为所有。 而不只是特定 CPU 的统计信息。参数 2 2 指示该命令每隔 2秒运行一次,共运行 2 次。 以上输出首先显示了所有 CPU 的合计指标,然后显示了每个 CPU 各自的指标。最后,在结尾处显示所有 CPU 的平均值。 含义: %user 在internal时间段里,用户态的CPU时间(%),不包含nice值为负进程 (usr/total)* 100 %nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)* 100 %sys 在internal时间段里,内核时间(%) (system/total)* 100 %iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)* 100 %irq

linux top 命令查看内存及多核CPU的使用讲述

牧云@^-^@ 提交于 2020-02-16 10:55:46
查看多核CPU命令 mpstat -P ALL 和 sar -P ALL 说明:sar -P ALL > aaa.txt 重定向输出内容到文件 aaa.txt top命令 经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。 本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。 top进入视图 第一行: 10:08:45 — 当前系统时间 10 days, 3:05 — 系统已经运行了10天3小时5分钟(在这期间没有重启过) 1 users — 当前有1个用户登录系统 load average: 0.00, 0.00, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。 load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。 第二行: Tasks — 任务(进程),系统现在共有135个进程,其中处于运行中的有1个,134个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。 第三行:cpu状态 0.3% us —

从主频之争到多核之争,摩尔定律还能走多远?

泄露秘密 提交于 2020-01-28 04:13:35
从主频之争到多核之争,摩尔定律还能走多远? 本文通过对几个基础问题的探讨,从IC设计角度介绍一点处理器的知识和发展。希望对长时间做高级语言开发的朋友有点帮助,随便看看权当娱乐。 1.CPU的速度是什么决定的?   我们通常用频率(frequency)来描述一颗处理器的速度,比如1.6GHz,3.8GHz。这个频率是什么的频率?它又是根据什么来决定的呢?我遇到不少童鞋以为频率高是因为我们可以做出更快的晶振,这是本末倒置的想法。一颗处理器的最高频率是根据它内在电路决定的,决定以后,才选取适当频率的晶振来为它产生漂亮的脉冲。   比如CPU做这样一个运算(1+2)+(3*4)。1+2 和 3*4 分别送入加法器和乘法器,各自的结果作为输入再送入加法器。由于加法要比乘法快,1+2先算完放到一个寄存器待用,等3*4结果出来也放入寄存器之后,二者一再起送入加法器。而为了同步,我们给这些运算加入一种步伐,也就是时钟信号。我们规定时钟的一个周期为需要时间最长的乘法,这样就可以保证再第二个时钟信号到来的时候,之前的全部运算都可以准确完成并将结果存入寄存器,进入下一个运算周期。   这个周期切换的速度,就是频率。很明显,频率越高,计算速度越快嘛。 一块芯片的频率,就是耗时最长的那条电路(critical path)决定的。芯片的频率的设定,要保证耗时最长的那段电路可以在一个时钟周期内运算完毕。 2

linux smp 引导多核源码分析

走远了吗. 提交于 2020-01-22 17:04:19
1 SMP cpu map和操作函数集初始化 1.1 初步初始化cpu map start_kernel ---------->smp_setup_processor_id linux 从第一个cpu上面启动以后,先利用smp_setup_processor_id设置cpu index void __init smp_setup_processor_id(void) { int i; //判断是否是smp系统,是则从arm协处理器读取当前cpuid,否则为0 u32 mpidr = is_smp() ? read_cpuid_mpidr() & MPIDR_HWID_BITMASK : 0; //根据level确定CPU号,即cpu = (mpidr >> 8) & 0xff; u32 cpu = MPIDR_AFFINITY_LEVEL(mpidr, 0); //设置map 0为引导cpu cpu_logical_map(0) = cpu; //nr_cpu_ids表示系统中CPU总数 for (i = 1; i < nr_cpu_ids; ++i) cpu_logical_map(i) = i == cpu ? 0 : i; //初始化除boot cpu以外的其他cpu的map printk(KERN_INFO "Booting Linux on physical CPU 0x

(概念)多个CPU和多核CPU以及超线程(Hyper-Threading)

丶灬走出姿态 提交于 2020-01-10 12:49:16
引言 在这篇文章中我会主要介绍CPU相关的一些重要概念和技术。如果你想更好地了解操作系统,那就从本文开始吧。 中央处理器(Central processing unit) 在我们了解其它概念之前,我们应该首先了解一下什么是CPU,它是做什么的,它的主要组件以及相应的作用都是什么? 简单点说,CPU其实就是计算机内部的一个电子电路。根据一些具体的指令它可以执行基本的运算,逻辑,控制和IO操作等。CPU的主要组件包括: 算术逻辑单元(ALU is short for ‘arithmetic logic unit’),它主要执行一些算术和逻辑操作 处理器寄存器(processor registers),它主要的作用是给ALU提供操作数并存储ALU操作的结果 控制器(control unit),通过协调ALU,寄存器和其它组件之间的操作,从主存中取得并执行相应的指令。 当今大多数地CPU都是微处理器,即它们被包含在单个集成电路芯片(integrated circuit chip)中。一个包含CPU的集成电路可能也包含内存,外围接口和其它的一些计算机组件。这样的集成设备叫做微控制器(microcontrollers)或者芯片上的系统(SoC)。一些计算机采用多核处理器,即单个芯片中包含2个或更多的CPU(也被叫做“cores”); 在这种情况下,单个芯片有时也被称作”sockets”.

从主频之争到多核之争,摩尔定律还能走多远?

时间秒杀一切 提交于 2020-01-05 01:33:17
从主频之争到多核之争,摩尔定律还能走多远? 本文通过对几个基础问题的探讨,从IC设计角度介绍一点处理器的知识和发展。希望对长时间做高级语言开发的朋友有点帮助,随便看看权当娱乐。 1.CPU的速度是什么决定的?   我们通常用频率(frequency)来描述一颗处理器的速度,比如1.6GHz,3.8GHz。这个频率是什么的频率?它又是根据什么来决定的呢?我遇到不少童鞋以为频率高是因为我们可以做出更快的晶振,这是本末倒置的想法。一颗处理器的最高频率是根据它内在电路决定的,决定以后,才选取适当频率的晶振来为它产生漂亮的脉冲。   比如CPU做这样一个运算(1+2)+(3*4)。1+2 和 3*4 分别送入加法器和乘法器,各自的结果作为输入再送入加法器。由于加法要比乘法快,1+2先算完放到一个寄存器待用,等3*4结果出来也放入寄存器之后,二者一再起送入加法器。而为了同步,我们给这些运算加入一种步伐,也就是时钟信号。我们规定时钟的一个周期为需要时间最长的乘法,这样就可以保证再第二个时钟信号到来的时候,之前的全部运算都可以准确完成并将结果存入寄存器,进入下一个运算周期。   这个周期切换的速度,就是频率。很明显,频率越高,计算速度越快嘛。 一块芯片的频率,就是耗时最长的那条电路(critical path)决定的。芯片的频率的设定,要保证耗时最长的那段电路可以在一个时钟周期内运算完毕。 2

单核,多核CPU的原子操作

不羁岁月 提交于 2019-12-29 02:35:30
一. 何谓"原子操作": 原子操作就是: 不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch). 二. 为什么关注原子操作? 1. 如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁. - (巧妙的利用原子操作和实现无锁编程) 2. 借助原子操作可以实现互斥锁(mutex). (linux中的mutex_lock_t) 3. 借助互斥锁, 可以实现让更多的操作变成原子操作. 三. 单核CPU的原子操作: 在单核CPU中, 能够在一个指令中完成的操作都可以看作为原子操作, 因为中断只发生在指令间. 四. 多核CPU的原子操作: 在多核CPU的时代(确实moore定律有些过时了,我们需要更多的CPU,而不是更快的CPU,无法处理快速CPU中的热量散发问题), 体系中运行着多个独立的CPU, 即使是可以在单个指令中完成的操作也可能会被干扰. 典型的例子就是decl指令(递减指令), 它细分为三个过程: "读->改->写", 涉及两次内存操作. 如果多个CPU运行的多个进程在同时对同一块内存执行这个指令, 那情况是无法预测的. 五. 硬件支持 & 多核原子操作: 软件级别的原子操作是依赖于硬件支持的. 在x86体系中, CPU提供了HLOCK pin引线,

多CPU,多核,多进程,多线程以及进程和线程的简单理解以及区别

狂风中的少年 提交于 2019-12-17 04:14:02
当面临这些问题的时候,有两个关键词无法绕开,那就是 并行 和 并发 。 首先,要先了解几个概念:   1、进程是程序的一次执行。   2、进程是资源分配的基本单位。   3、一个进程可以包括多个线程。   4、在单CPU计算机中,有一个资源是 无法被多个程序并行使用的 :CPU。   5、操作系统调度器:拆分CPU 为一段段时间的运行片,轮流分配给不 同的程序。   6、操作系统内存管理模块:管理物理内存、虚拟内存相关的事务。   由于CPU同时刻只能执行一个进程,如果我们不加以控制的话,一个进程可能使用CPU直到运行结束,于是出现了操作系统调度器,而进程也成为了调度单位。   进程的运行不仅仅需要CPU,还需要很多其他资源,如内存啊,显卡啊,GPS啊,磁盘啊等等,统称为程序的执行环境,也就是程序上下文。   在这里就出现了 并发的概念,调度器切换CPU给不同进程使用的速 度非常快,于是在使用者看来程序是在同时运行,这就是并发,而实际上CPU在同一时刻只在运行一个进程。并发只是给人的假现象 ,原因就是由于cpu工作很快,不断地loop感觉是同时发生,实际都是单个执行的。   CPU进程无法同时刻共享,但是出现一定要共享CPU的需求呢?此时线程的概念就出现了。线程被包含在进程当中,进程的不同线程间共享CPU和程序上下文。(共享进程分配到的资源)   单CPU进行进程调度的时候,需要

多核CPU上python多线程并行的一个假象

天涯浪子 提交于 2019-12-05 20:38:50
多核CPU上python多线程并行的一个假象 python-cn(华蟒用户组,CPyUG 邮件列表)上: 关于 python 多线程是否能用到多核的问题 相关讨论 本机环境: 2核CPU, linux 2.6, python 2.6.2 在python上开启多个线程,由于GIL的存在,每个单独线程都会在竞争到GIL后才 运行,这样就干预OS内部的进程(线程)调度,结果在多核CPU上: python的多线程实际是串行执行的,并不会同一时间多个线程分布在多个CPU上运行。 但是这里有个有趣的现象: python开启两个死循环的线程,在我的2核机器上会有如下 CPU使用情况,每个CPU都维持在50%左右的使用率(见下图). 难道python的多线程可以在多核上并行? 当然不是,在GIL存在的python上,多线程应该是不可能并行的。 这里其实有个小细节隐藏在linux的进程调度系统内,当python多线程切换时候,linux 调度子系统会兼顾多核的负载情况,linux会把多个线程平均分布在多核上跑,这样不 会导致单个核负载过盛。但是这个并不会让python多线程在多核上并行。 大致CPU使用应该这样: cpu0: .. pythread0 _________ pythread0 _________ .. cpu1: .. _________ pythread1 _________

python的多线程不能利用多核CPU?

允我心安 提交于 2019-12-05 20:35:17
转自 https://www.cnblogs.com/shmily2018/p/9123144.html 为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快。 一、python的多线程不能利用多核CPU? 原因: 因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行,在遇到I/O 操作时会释放这把锁。 如果是纯计算的程序,没有 I/O 操作,解释器会每隔100次操作就释放这把锁,让别的线程有机会 执行(这个次数可以通sys.setcheckinterval 来调整)同一时间只会有一个获得GIL线程在跑,其他线程都处于等待状态 1、如果是CPU密集型代码(循环、计算等),由于计算工作量多和大,计算很快就会达到100,然后触发GIL的释放与在竞争,多个线程来回切换损耗资源, 所以在多线程遇到CPU密集型代码时,单线程会比较快 2、如果是I\O密集型代码(文件处理、网络爬虫),开启多线程实际上是并发(不是并行),IO操作会进行IO等待,线程A等待时,自动切换到线程B, 这样就提升了效率 二、其他原理解释 转:链接:https://www.zhihu.com/question/23474039/answer/24695447 地说就是作为可能是仅有的支持多线程的解释型语言(perl的多线程是残疾