首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2019-09-20

2019-09-20

作者头像
羊羽shine
发布于 2019-09-24 08:14:18
发布于 2019-09-24 08:14:18
70600
代码可运行
举报
文章被收录于专栏:Golang开发Golang开发
运行总次数:0
代码可运行

CPU架构分类

从CPU发明到现在,有非常多种架构,从我们熟悉的X86,ARM,到不太熟悉的MIPS,IA64等

X86

ARM

指令集

复杂指令集(CISC)

精简指令集(RISC)

功耗

性能

扩展能力

X86结构的电脑采用“桥”的方式与扩展设备(如:硬盘、内存等)进行连接,其配套扩展的设备种类多、价格也比较便宜,所以x86结构的电脑能很容易进行性能扩展

ARM结构的电脑是通过专用的数据接口使CPU与数据存储设备进行连接,所以ARM的存储、内存等性能扩展难以进行

操作系统的兼容性

兼容Windows、Linux

Linux

X86架构来由

IBM 开始做 IBM PC 时,一开始并没有让最牛的华生实验室去研发,而是交给另一个团队。一年时间,软硬件全部自研根本不可能完成,于是他们采用了英特尔的 8088 芯片作为 CPU,使用微软的 MS-DOS 做操作系统。

谁能想到 IBM PC 卖的超级好,好到因为垄断市场而被起诉。IBM 就在被逼的情况下公开了一些技术,使得后来无数 IBM-PC 兼容机公司的出现,也就有了后来占据市场的惠普、康柏、戴尔等等。 英特尔的技术因此成为了行业的开放事实标准。由于这个系列开端于 8086,因此称为 x86 架构。

image.png

X86架构组成

先看下计算机的工作模式

image.png

对于一个计算机来讲,最核心的就是CPU(Central Processing Unit,中央处理器)。这是这台计算机的大脑,所有的设备都围绕它展开。 CPU 和其他设备连接,要靠一种叫作总线(Bus)的东西,其实就是主板上密密麻麻的集成电路,这些东西组成了 CPU 和其他设备的高速通道。

CPU组件图

image.png

image.png

运算单元

只管算,例如做加法、做位移等等。但是,它不知道应该算哪些数据,运算结果应该放在哪里。

数据单元

包括 CPU 内部的缓存和寄存器组,空间很小,但是速度飞快,可以暂时存放数据和运算结果。

  • 通用寄存器 AX、BX、CX、DX、SP、BP、SI、DI。8个通用寄存器,用于在计算过程中暂存数据。
控制单元

控制单元是一个统一的指挥中心,它可以获得下一条指令,然后执行这条指令。这个指令会指导运算单元取出数据单元中的某几个数据,计算出个结果,然后放在数据单元的某个地方。

  • 指令指针寄存器IP(Instruction Pointer Register) 指向代码段中下一条指令的位置。CPU 会根据它来不断地将指令从内存的代码段中,加载到 CPU 的指令队列中,然后交给运算单元去执行。
  • 代码段寄存器(Code Segment Register) 存放代码段的起始地址。代码段的偏移量在 IP 寄存器中。通过它们可以找到代码在内存中的位置
  • 数据段的寄存器(Data Segment Register) 存放数据段的起始地址。数据段的偏移量会放在通用寄存器中。通过它们可以找到数据在内存中的位置
  • 栈寄存器(Stack Register)
  • 扩展段寄存器(extend Segment Register)

相关术语

地址总线

地址总线的位数,决定了能访问的地址范围到底有多广。例如只有两位,那 CPU 就只能认 00,01,10,11 四个位置,超过四个位置,就区分不出来了。位数越多,能够访问的位置就越多,能管理的内存的范围也就越广。

数据总线

数据总线的位数,决定了一次能拿多少个数据进来。例如只有两位,那 CPU 一次只能从内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,访问速度也就越快。

CPU 各种性能指标

CPU使用率

CPU 使用率描述了非空闲时间占总 CPU 时间的百分比

  • 用户 CPU 使用率,包括用户态 CPU 使用(user和低优先级用户态 CPU 使用率(nice),表示 CPU 在用户态运行的时间百分比。用户 CPU 使用率高,通常说明有应用程序比较繁忙。
  • 系统 CPU 使用率,表示 CPU 在内核态运行的时间百分比(不包括中断)。系统 CPU使用率高,说明内核比较繁忙。
  • 等待 I/O 的 CPU 使用率,通常也称为 iowait,表示等待 I/O 的时间百分比。iowait高,通常说明系统与硬件设备的 I/O 交互时间比较长。
  • 软中断和硬中断的 CPU 使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。
  • steal(通常缩写为 st),代表当系统运行在虚拟机中的时候,被其他虚拟机占用的CPU 时间 常用工具: top
平均负载

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。 理想情况下,平均负载等于逻辑 CPU 个数,这表示每个 CPU 都恰好被充分利用。如果平均负载大于逻辑 CPU 个数,就表示负载比较重了。 常用工具: top uptime

上下文切换

上下文切换,本身是保证 Linux 正常运行的一项核心功能。但过多的上下文切换,会将原本运行进程的 CPU 时间,消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成为性能瓶颈

  • 自愿上下文切换 是指进程无法获取所需资源,导致的上下文切换。比如说,I/O、内存等系统资源不足时,就会发生自愿上下文切换。
  • 非自愿上下文切换 是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换。
常用工具
  • vmstat 查看系统整体的上下文切换数 (cpu-cs context switch)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[work@ros-dev-29 ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 740092 325876 1174820    0    0     1     7    0    0  0  0 100  0  0
  • pidstat -w cswch 表示每秒自愿上下文切换(voluntary context switches)的次数 nvcswch 表示每秒非自愿上下文切换(non voluntary context switches)的次数
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[work@ros-dev-29 ~]$ pidstat -w
Linux 2.6.32-573.22.1.el6.x86_64 (ros-dev-29)   09/20/2019      _x86_64_        (4 CPU)

11:17:19 AM       PID   cswch/s nvcswch/s  Command
11:17:19 AM         1      0.00      0.00  init
11:17:19 AM         2      0.00      0.00  kthreadd
11:17:19 AM         3      0.00      0.00  migration/0
11:17:19 AM         4      0.17      0.00  ksoftirqd/0
11:17:19 AM         5      0.00      0.00  stopper/0
11:17:19 AM         6      0.08      0.00  watchdog/0
11:17:19 AM         7      0.07      0.00  migration/1
指标工具指南

image.png

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.09.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
26-CPU知识
CPU中的控制单元,控制指令执行的顺序,并不是按照先后顺序执行,而是按照优先级顺序
zx钟
2021/07/06
6780
cpu上下文
进程是并发环境下,一个具有独立功能的程序在某个数据集上的一次执行活动,它是操作系统进行资源分配和保护的基本单位,也是执行的单位。
没有故事的陈师傅
2021/08/13
8970
关于linux中的CPU上下文切换
目录 1.什么是CPU上下文切换 2.CPU上下文切换的类型 3.如何查看系统中的上下文切换 4.案例 5.总结 ---- 读过倪朋飞的《Linux性能优化实战》经常说的 CPU 上下文切换是什么意思
冬天里的懒猫
2021/08/05
1.4K0
​Linux CPU 性能优化指南
本文作者:allenxguo,腾讯 QQ 音乐后台开发工程师 本文主要帮助理解 CPU 相关的性能指标,常见的 CPU 性能问题以及解决方案梳理。 系统平均负载 简介 系统平均负载:是处于可运行或不可中断状态的平均进程数。 可运行进程:使用 CPU 或等待使用 CPU 的进程 不可中断状态进程:正在等待某些 IO 访问,一般是和硬件交互,不可被打断(不可被打断的原因是为了保护系统数据一致,防止数据读取错误) 查看系统平均负载 首先top命令查看进程运行状态,如下: PID USER
腾讯技术工程官方号
2020/08/11
9.1K0
从入门到转型之Linux性能优化实践学习指南
本系列是从入门到转型之Linux性能优化实践学习指南,是博主学习Linux性能优化之路的精华版本,我将分享大量性能优化的思路和方法,并进行相应工具使用介绍和总结。
全栈工程师修炼指南
2022/09/29
6850
从入门到转型之Linux性能优化实践学习指南
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
性能问题的本质就是系统资源已经到达瓶颈,但请求的处理还不够快,无法支撑更多的请求。性能分析实际上就是找出应用或系统的瓶颈,设法去避免或缓解它们。
用户6543014
2022/03/04
2.8K0
Linux 性能优化的全景指南,可能都在这里了,建议收藏~
Linux 性能调优之CPU上下文切换
99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行动永远是改变现状的最佳方式
山河已无恙
2024/09/12
1.2K0
Linux 性能调优之CPU上下文切换
Linux CPU 上下文切换的故障排查
CPU 上下文切换是保证 Linux 系统正常运行的核心功能。可分为进程上下文切换、线程上下文切换和中断上下文切换。
混说Linux
2023/02/24
1.2K0
Linux CPU 上下文切换的故障排查
Linux CPU监控
负载为1表示当前单核CPU全部占用,如果一台机器有3个CPU,每个CPU都是双核的,这是负载最大值为1×2×3=6。如果5分钟以及15分钟的负载指标的大于CPU个数×CPU核数×0.7,并且长时间比较高,说明CPU不够用。
顾翔
2020/06/01
11.8K0
Linux CPU监控
软件性能测试(连载8)
CPU依次处理上述任务的调度方法是切换。切换分为“进程切换”“线程切换”和“中断切换”。中断切换即在本节“软中断与硬中断”中提及的,当系统中有非常重要的请求来临,CPU停止手头工作,触发硬中断。“进程切换”和“线程切换”,在切换前都要调取上次保存的信息,在切换后都要保存当前的信息。“进程切换”和“线程切换”合在一起叫做上下文切换(context switches)。图3-21为当前仅有2个任务等待CPU处理下的进程下文切换。
顾翔
2020/02/19
9120
软件性能测试(连载8)
Linux性能优化实战 笔记
平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。
OwenZhang
2021/12/08
1.9K0
Linux性能优化实战 笔记
深入理解Linux的CPU上下文切换
根据任务的不同,CPU 的上下文切换可以分为几个不同的场景,也就是:进程上下文切换、线程上下文切换、中断上下文切换。
chengcheng222e
2021/11/04
3.6K0
探讨Linux CPU的上下文切换
我们都知道 Linux 是一个多任务操作系统,它支持的任务同时运行的数量远远大于 CPU 的数量。当然,这些任务实际上并不是同时运行的(Single CPU),而是因为系统在短时间内将 CPU 轮流分配给任务,造成了多个任务同时运行的假象。 CPU 上下文(CPU Context) 在每个任务运行之前,CPU 需要知道在哪里加载和启动任务。这意味着系统需要提前帮助设置 CPU 寄存器和程序计数器。 CPU 寄存器是内置于 CPU 中的小型但速度极快的内存。程序计数器用于存储 CPU 正在执行的或下一条要执行
范蠡
2022/04/28
1.5K0
探讨Linux CPU的上下文切换
浅谈函数调用!
导语 |  在任意一门编程语言中,函数调用基本上都是非常常见的操作;我们都知道,函数是由调用栈实现的,不同的函数调用会切换上下文;但是,你是否好奇,对于一个函数调用而言,其底层到底是如何实现的呢?本文讲解了函数调用的底层逻辑实现。 一、汇编概述 既然要讲解函数调用的底层逻辑实现,那么汇编语言我们是绕不过的。 因此,首先来复习一下汇编相关的知识。 我们都知道,计算机只能读懂二进制指令,而汇编就是一组特定的字符,汇编的每一条语句都直接对应CPU的二进制指令,比如:mov rax,rdx就是我们常见的汇编指令。
腾讯云开发者
2022/08/26
2.1K0
浅谈函数调用!
Linux性能优化篇-了解CPU上下文切换
所以我们会比较好了解CPU密集型,需要大量计算资源,会非常消耗cpu,I/O密集型需要等待I/O,会有大量的不可中断进程,
早起的鸟儿有虫吃
2019/08/22
5.2K0
Linux性能优化篇-了解CPU上下文切换
技能篇:linux服务性能问题排查及jvm调优思路
只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求。最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的。如果你是负责中间件或IM通讯相关项目开发,或许就需要偏向CPU、磁盘、网络及内存方面的问题排查及调优技能
潜行前行
2022/04/26
9210
技能篇:linux服务性能问题排查及jvm调优思路
总说上下文切换耗性能,那他到底耗了多少性能?
   众所周知,操作系统是一个分时复用系统,通过将CPU时间分为好几份。系统在很短的时间内,将 CPU 轮流分配给它们,从而实现多任务同时运行的错觉。    伴随着的还有一个词是上下文切换,无论在工作中还是面试中,我们总会听到要减少线程、进程的上下文切换,因为上下文切换的代价比较高,会影响性能。     今天我们就来详细说说上下文切换到底在切换什么,以及如何可视化的观察上下文切换的代价,它是怎么影响程序性能的。
公众号 云舒编程
2024/03/13
6880
总说上下文切换耗性能,那他到底耗了多少性能?
性能之cpu篇
对于性能来说,cpu的调度逻辑是影响性能的主要来源,本文主要来介绍下cpu跟性能相关的调度逻辑和排障工具。
灰子学技术
2022/04/27
8050
性能之cpu篇
进程/线程切换究竟需要多少开销?
进程是我们开发同学非常熟悉的概念,我们可能也听说过进程上下文切换开销。那么今天让我们来思考一个问题,究竟一次进程上下文切换会吃掉多少CPU时间呢?线程据说比进程轻量,它的上下文切换会比进程切换节约很多CPU时间吗?带着这些疑问,让我们进入正题。
开发内功修炼
2022/03/24
3.9K0
进程/线程切换究竟需要多少开销?
性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里
https://www.cnblogs.com/poloyy/category/1814570.html
小菠萝测试笔记
2020/08/13
3.3K0
性能分析(6)- 如何迅速分析出系统 CPU 的瓶颈在哪里
相关推荐
26-CPU知识
更多 >
LV.1
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验