【优化技术专题】「底层架构原理系列」CPU处理器鲜为人知的那些秘密

简介: 【优化技术专题】「底层架构原理系列」CPU处理器鲜为人知的那些秘密

前提概要


所谓,知彼知己百战不殆,针对于计算机的优化技术来讲,最底层也不过是针对于CPU技术的优化了,但是如果要区优化程序,涉及到CPU的执行能力,那必须要了解CPU的原理和概念以及执行过程等概念,所以小编写了本片的目的就是针对于CPU的相关知识进行讲解,当你对CPU不在陌生的时候,也就是你超神的时候了,哈哈......




CPU相关的知识


本文介绍涉及到的知识点包含,多CPU、物理核、逻辑核、超线程、进程、线程、并发、并行,以及Linux查询CPU和核的信息的方法



易混淆概念


多处理器


认真辨别语境,通常是多CPU的意思;有时多是多逻辑处理器即多核的意思,好像老外常常把一个CPU里有多个核心当成多个CPU来描述。


逻辑处理器


就是逻辑核的意思,Windows 10的中文翻译了这个特别特别容易误解的词,我觉得就是可以理解为内核程序单位。



逻辑CPU


有人用了这个词表示逻辑核的意思,但是用法的根据我保持怀疑,很容易致使误解,由于我会认为,核就是核,CPU就是CPU,为何混为一谈,好像核就是CPU同样缓存。



CPU的一~四级缓存


CPU缓存(Cache Memory)的出现是弥补CPU和主存(主内存,即内存条的)的速度差太大,用于提升效率的,有时可能也叫高速缓存


高速缓存也分了不少层,一到四级,四级不多听但确实是有。一二级是各个核心独有的三级缓存是全部核共享的,四级缓存彷佛是为了解决CPU的集显和CPU的速度差问题(CPU内能够有显卡)。通常CPU商品中只标出了三级缓存,其余都不标注。如图所示:image.png

这里看不到L4 Cache,多是由于只有L1~L3才封装在CPU里。


一样的多个核之间的L1、L2也会有缓存一致性问题,相似多核CPU有一些协议保证多个CPU内部缓存之间一致性的协议(MESI),同一个CPU内部的多核内部的缓存的一致性问题应该也是有方案解决的


物理核、逻辑核和超线程


  • 物理核:是CPU里实实在在封装的物理硬件并发。
  • 逻辑核:利用超线程技术模拟出来的核,通常一个物理核能够虚拟出2个,就是CPU商品标出的线程数,有些资料也叫逻辑CPU数
  • 超线程:HT,Hyper-Threading,超线程技术就是让一个核模拟出两个核的技术性能
  • 物理CPU:即主板上插了多少个的CPU芯片
  • 虚拟CPU:假的、虚拟技术实现的CPU,相似VMWare虚拟机中的CPU



疑惑:


逻辑核彷佛有些时候被翻译成逻辑处理器,而处理器一般被我理解为CPU,因此逻辑核,就是逻辑CPU吗? 但这种翻译真的会有点模糊不清容易形成误解。image.png


线程和核的关系


  • 线程须要核执行,一个核在同一时间只能执行一条线程,这里的核指逻辑核
  • 决定同时执行线程数的是逻辑核
  • 逻辑核心多少个,就能够 “同时” 执行多少线程


总结


n个物理核,通常有2n个逻辑核,若是只能同时运行物理核数个线程(n),那超线程技术模拟出来的核有什么用? 何况不少CPU的商品也不标 “逻辑核数”,用的词是 “线程数”,意思应该就是逻辑核心多少个就能同时运行多少个线程(2n)


x核y线程(y比x大)是什么意思

CPU商品说的2核4线程,指2个物理核,4个逻辑核。4线程就是4个逻辑核的意思



进程和线程


进程是操做系统层面的概念,线程是CPU层面的东西,CPU真正执行的是线程而不是进程进程是是静态的概念,是一些资源的集合,好比进程有本身的内存而线程是动态的概念,进程能够有多个线程,这些线程共享同一份进程的资源多进程,目前多核的状况下,能够作到多个进程同时执行

  • 固然也就能够作到多个线程同时执行。可是单核的CPU没法作到 “同时”执行进程。此外进程是必定有端口号吗? 不必定,没网络暴露的就没有。但是肯定有进程号就对了


并发和并行


并发(concurrency)和并行(parallelism)
复制代码
  • 并行是说物理上的 “同时” 被执行


  • 并发是一种程序设计,可以让多个任务在逻辑上交织执行

并发设计的程序,能够启动n个线程,好比2个,而后交给2个核,这时两个线程就是并行执行的(“同时”);这两个线程也能够被1个核 “交替” 执行。

不少时候,会认为并行就是真的同时执行,而并发就是交替执行,这是通常的理解,可是并发真正含义是指设计的程序容许同时或交替执行,是一种程序设计方案




多CPU 和 单CPU多核


估计是提升计算能力的两个方案,最终选择单CPU多核方案多一点


多CPU估计也有市场,也有些服务器是多CPU的


为何单CPU多核方案更胜一筹,主要是这个方案更好?


  • 多个核心之间通讯不须要走外部的总线,只须要走CPU内部总线,会快得多另外单CPU多核也成本较多CPU低,只须要一套芯片组,一套存储,多核之间经过芯片内部总线进行通讯,共享使用内存
  • 多核CPU缓存一致性协议有MSI、MESI(Illinois Protocol)、MOSI、Synapse、Firefly及 Dragon Protocol等。


多CPU的市场:多CPU适用于大计算量,对速度(时间)不(太)敏感的任务,好比一些工程建模,或者像SATI找外星人这种极端的,跑上几千年都不着急的。



单CPU单核


单CPU单核 跑多线程效率必定下降吗?


不必定:


  • 下降:若是多线程跑的都是CPU密集型任务,有可能会下降效率,由于仅有的一个核被用满了还要被调度来调度去浪费时间
  • 提高:若是多线程跑的都是IO密集型任务,有可能会提升,由于IO比CPU运行慢得多,来回切换线程,让这个核物尽其用。其调度损耗是值得的


举个例子:我有两家店(两个任务),这两家店隔了一条街道,我招了一个工人(一个CPU核),若是打理一家店铺就很忙得不可开交,你还让他打理两家店,来回在两家店跑来跑去,这反而下降了效率。若是这两个店铺都是处理1小时事情以后闲3个小时的,显然让他来回在两家店跑能榨干他的价值,能提升效率。




单CPU多核


常常会听到CPU都普及多核了,编程应该好好利用,其实确实是存在目前的编程没有充分利用多核CPU的性能,不过多是由于多线程的编程比较复杂的缘由。


单CPU多核,对于多线程确实提高做用大。不要钱的话确定是多核比单核CPU好的呀。




Linux中查看CPU和核信息


cat /proc/cpuinfo 
复制代码

获得的信息应该是以逻辑核为单位的列表信息。每一个逻辑核的信息包括其归属的物理核ID(core id),以及其归属的物理CPU的ID(physical id)



列出物理CPU及各自的物理核数


cat /proc/cpuinfo | grep -E "physical id|cpu cores" | sed 'N;s/\n/ /' | sort | uniq
复制代码


假设输出以下,则表示有2个物理CPU,第一个CPU有4个物理核,第二个CPU也是4个:


physical id : 0 cpu cores : 4
physical id : 1 cpu cores : 4
复制代码




列出物理CPU及各自的逻辑核数


cat /proc/cpuinfo | grep "physical id" | sort | uniq -c
复制代码


假设输出以下,则表示有两个物理CPU,各自包含8个逻辑核

8 physical id : 0
8 physical id : 1
复制代码





查询CPU类型(虚拟、真实)


cat /proc/cpuinfo后查看model name,


例如:

Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz 大概表示是真实CPU或者QEMU Virtual CPU version (cpu64-rhel6) 表示虚拟CPU




查询CPU是否支持超线程


  • 物理内核和物理CPU列表展示:两个物理CPU中各存在4个物理内核
physical id : 0 cpu cores : 4
physical id : 1 cpu cores : 4
复制代码
  • 逻辑内核数码,和对应的物理CPU的id
8 physical id : 0
8 physical id : 1
复制代码

能够得出第一个CPU(physical id是0)支持,由于其物理核4个逻辑核却又8个,第二个CPU(id是1)一样也支持。若是物理核和逻辑核的数量相等,不表明不支持,可能没打开超线程技术开关




top命令显示的核数是?


输入top按1能够展现出全部逻辑核,从Cpu0~CpuN,就是说有N+1个逻辑核。

是逻辑核数。


6、Java进程占用CPU超过100% top查看进程的%CPU值,为何会CPU占用率超过100%

由于该进程占用超过一个核,占满2个核就是200%了。




/proc/cpuinfo文件解释


  • model name:是CPU的型号主频一些信息


例如Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz或者QEMU Virtual CPU version (cpu64-rhel6)应该能大概看得出是虚拟CPU仍是真实的CPU


  • processor:指逻辑核ID,好比0,表示第1个逻辑核,不是零个逻辑核意思
  • physical id:物理CPU的ID,0表示第一个
  • core id:物理核的ID,0表示第一个
  • cpu cores:该物理CPU有多少个物理核
  • siblings该物理CPU有多少个逻辑核跟cpu cores不同表示开启了超线程技术,不然表示不支持该技术或者未开启




指令总结(重点学习,以后可能会用的上哦!)


  • 一、物理CPU数

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


uniq是为了去掉多个逻辑核同属于一个物理CPU


  • 二、物理核数(全部CPU)


cat /proc/cpuinfo | grep 'core id' | uniq |wc -l



uniq为了去掉多个逻辑核属于同一个物理核


上述计算方式是计算全部CPU加起来有多少核,并非计算某个CPU有多少核



  • 三、物理核数(某个CPU)

cat /proc/cpuinfo 后查看cpu cores,该值记录了对应的物理CPU(以该条目中的physical id标识)有多少个物理核。

  • 四、逻辑核数(全部CPU)



逻辑核数,有些地方会逻辑CPU数


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


  • 五、逻辑核数(某个CPU)


cat /proc/cpuinfo后查看siblings,该值记录了对应的物理CPU(以该条目中的physical id标识做分组)有多少个逻辑核。


  • 六、查看是否支持超线程


cat /proc/cpuinfo后查看siblings和cpu cores不一致,说明该physical id的CPU支持超线程,若是一致,明不支持超线程,或者超线程未打开。




相关文章
|
1月前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
10天前
|
Java Linux C语言
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理
228 89
|
1月前
|
弹性计算 运维 监控
阿里云云服务诊断工具:合作伙伴架构师的深度洞察与优化建议
作为阿里云的合作伙伴架构师,我深入体验了其云服务诊断工具,该工具通过实时监控与历史趋势分析,自动化检查并提供详细的诊断报告,极大提升了运维效率和系统稳定性,特别在处理ECS实例资源不可用等问题时表现突出。此外,它支持预防性维护,帮助识别潜在问题,减少业务中断。尽管如此,仍建议增强诊断效能、扩大云产品覆盖范围、提供自定义诊断选项、加强教育与培训资源、集成第三方工具,以进一步提升用户体验。
693 243
|
2天前
|
存储 缓存 监控
ClickHouse 架构原理及核心特性详解
ClickHouse 是由 Yandex 开发的开源列式数据库,专为 OLAP 场景设计,支持高效的大数据分析。其核心特性包括列式存储、字段压缩、丰富的数据类型、向量化执行和分布式查询。ClickHouse 通过多种表引擎(如 MergeTree、ReplacingMergeTree、SummingMergeTree)优化了数据写入和查询性能,适用于电商数据分析、日志分析等场景。然而,它在事务处理、单条数据更新删除及内存占用方面存在不足。
64 21
|
2天前
|
存储 消息中间件 druid
Druid 架构原理及核心特性详解
Druid 是一个分布式、支持实时多维OLAP分析的列式存储数据处理系统,适用于高速实时数据读取和灵活的多维数据分析。它通过Segment、Datasource等元数据概念管理数据,并依赖Zookeeper、Hadoop和Kafka等组件实现高可用性和扩展性。Druid采用列式存储、并行计算和预计算等技术优化查询性能,支持离线和实时数据分析。尽管其存储成本较高且查询语言功能有限,但在大数据实时分析领域表现出色。
38 19
|
2天前
|
存储 SQL NoSQL
Doris 架构原理及核心特性详解
Doris 是百度内部孵化的OLAP项目,现已开源并广泛应用。它采用MPP架构、向量化执行引擎和列存储技术,提供高性能、易用性和实时数据处理能力。系统由FE(管理节点)和BE(计算与存储节点)组成,支持水平扩展和高可用性。Doris 适用于海量数据分析,尤其在电商、游戏等行业表现出色,但资源消耗较大,复杂查询优化有局限性,生态集成度有待提高。
34 15
|
18天前
|
机器学习/深度学习 算法 PyTorch
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
软演员-评论家算法(Soft Actor-Critic, SAC)是深度强化学习领域的重要进展,基于最大熵框架优化策略,在探索与利用之间实现动态平衡。SAC通过双Q网络设计和自适应温度参数,提升了训练稳定性和样本效率。本文详细解析了SAC的数学原理、网络架构及PyTorch实现,涵盖演员网络的动作采样与对数概率计算、评论家网络的Q值估计及其损失函数,并介绍了完整的SAC智能体实现流程。SAC在连续动作空间中表现出色,具有高样本效率和稳定的训练过程,适合实际应用场景。
78 7
深度强化学习中SAC算法:数学原理、网络架构及其PyTorch实现
|
1月前
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
73 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
12天前
|
消息中间件 监控 小程序
电竞陪玩系统架构优化设计,陪玩app如何提升系统稳定性,陪玩小程序平台的测试与监控
电竞陪玩系统架构涵盖前端(React/Vue)、后端(Spring Boot/php)、数据库(MySQL/MongoDB)、实时通信(WebSocket)及其他组件(Redis、RabbitMQ、Nginx)。通过模块化设计、微服务架构和云计算技术优化,提升系统性能与可靠性。同时,加强全面测试、实时监控及故障管理,确保系统稳定运行。
|
18天前
|
存储 弹性计算 架构师
老板点赞!技术人如何用架构优化打赢降本增效战?
大家好,我是小米,一个喜欢分享技术的小架构师。通过亲身经历,我将介绍如何通过架构优化帮助公司降本增效。两年前,我加入一家初创公司,面对成本高企的问题,通过弹性伸缩、微服务化和数据治理等手段,成功降低了40%的技术成本,提升了60%的系统响应速度。希望我的经验能给你启发!关注我的微信公众号“软件求生”,获取更多技术干货。
33 5

热门文章

最新文章