高性能服务系列【二】CPU和内存

现代计算机的系统架构十分复杂。在服务器中,双路处理器已经十分常见。最近Arm处理器实现双路共384核心,要知道目前Linux内核最高只支持256核,这就有点尴尬。

多路处理器将越来越普遍,对性能的影响和传统架构有不小的差别,这个议题放到后面再讨论。首先需要厘清几个概念,在计算机的主板上,有几个CPU插座,就是挂载几颗CPU,通常是Socket插槽。还有H插槽式的,主要在笔记本等小型设备。而每颗CPU可以集成很多核,又叫Core,这里Core说的是物理Core。每个物理Core又能够支持两个逻辑核。所以和CPU相关的概念至少有三个:1、处理器,是指插在主板插槽那个芯片。双路处理器是指两颗芯片。2、物理核,是在芯片中真正集成的,光刻机实打实刻出来。3、逻辑核,通过超线程技术,在物理核基础上模拟出来。这三个概念会在下面内容中,会有严格的区分。在操作系统命令中,主要看到的是逻辑核,不太关注到物理核和多路处理器。

虽然传统架构相对简单,但和现代架构要解决的问题却是一样的。我们以传统的单处理器为例,主板上搭载北桥芯片和南桥芯片。北桥芯片主要负责高速连接,通过内存控制器,连接内存和显卡。CPU通过前端总线FSB和北桥芯片读写内存和显卡。南桥芯片主要负责低速连接,如I/O接口,包括网卡和磁盘,还有键盘鼠标等。这里要画个重点,北桥芯片和南桥芯片的作用,这个很容易被忽略。

先声明下,逻辑核在高速缓存上如何共享,我没有专门研究过,可能会有所不同。在物理核上,主要有L1和L2高速缓存,L3高速缓存目前是片内共享的,即整个CPU内部共享的。更早之前,L2和L3是集成在主板上。L1高速缓存被拆分成L1d和L1i,即数据缓存和指令缓存。

说完前面的基础资料后,我们来看下一个指令执行时的延迟是什么情况。

1、如果数据在寄存器中,1个cycle。

2、如果数据在高速缓存中,3-20个cycle。

3、如果数据在主存中,则需要通过FSB,向北桥芯片的内存控制器发起读取指令,240个cycle。

上述的3个值不是精准的值,但数量级差不多。

说完以上内容,就很容易理解几个场景下,这些硬件如何影响到性能,以及影响程度有多大。

1、等待I/O,通过低速南桥芯片读写数据,对延迟影响无需赘述。

2、线程切换,线程的上下文被回写到主存,再次被调度时,至少要面对几个性能惩罚,缓存缺失,逻辑核漂移。

对于这个问题的解决,多数会采用CPU亲和的解决方案。这里有个坑,并不是相邻的逻辑核就是在一起。

3、原子操作和内存屏障,这个问题和缓存一致性协议是一起的。多核在同时读写一块内存时,都要考虑这个问题。

但我们在前面说过,L3缓存是片内共享,所以在单路处理器系统中,基本在L3缓存就解决了。包括目前由disruptor引起很火的伪共享问题,并没有所说的,对性能有那么大的影响。

4、缓存行和巨页问题,这是作为基础知识就好了。主要体现在内存管理这块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/715410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中json类型的字段

有些很复杂的信息,我们一般会用扩展字段传一个json串,字段一般用text类型存在数据库。mysql5.7以后支持json类型的字段,还可以进行sql查询与修改json内的某个字段的能力。 1.json字段定义 ip_info json DEFAULT NULL COMMENT ip信息, 2.按…

GO基本类型一些记录

基本类型一些记录 1.直接粘贴文本进println(" ")2.中文字符串长度别用len( )3.byte本质是uint8 1.直接粘贴文本进println(" ") GoLand会自动补充转义符 2.中文字符串长度别用len( ) 用相应编码库的方法,一般utf8即可 utf8.RuneCountInStrin…

PySide6实现word转化pdf

目录 一:实现思路 二:实现代码 三:完整代码和界面 一:实现思路 利用PySide6创建两个按钮和一个显示区域,一个选择文件按钮,一个转化按钮和信息展示,操作文件按钮选择一个待转化的word文档。并且展示文件路径到信息展示区,操作转化按钮,读取选择的文件转化为pdf。并…

ThreadLocal介绍

文章目录 ThreadLocal源码分析:set方法get方法remove方法 ThreadLocal内存泄漏问题 ThreadLocal ThreadLocal提供了线程局部变量,每个线程都可以通过set和get方法来对这个变量进行操作,但不会和其他线程的局部变量冲突,实现了线程…

Doris实战——拈花云科的数据中台实践

目录 前言 一、业务背景 二、数据中台1.0—Lambda 三、新架构的设计目标 四、数据中台2.0—Apache Doris 4.1 新架构数据流转 4.2 新架构收益 五、新架构的落地实践 5.1 模型选择 5.1.1 Unique模型 5.1.2 Aggregate模型 5.2 资源管理 5.3 批量建表 5.4 计算实现…

Stable Diffusion 模型分享:Realistic Stock Photo(真实的库存照片)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SDXL 1.0来源CIVITAI作者PromptSharingSamaritan文件名称reali…

原生GO开发的博客系统

Go博客实战教程,是一个练手级项目教程,使用原生Go开发,未使用任何框架。 如何使用原生Go开发一个web项目 循序渐进,掌握编程思维和思路 初步具有工程思维,能适应一般的开发工作 1. 搭建项目 package mainimport (&q…

Vue3_2024_1天【Vue3创建和响应式,对比Vue2】

前言: Vue3对比Vue2版本,它在性能、功能、易用性和可维护性方面都有显著的提升和改进。 性能优化:模板编译器的优化、对Proxy的支持以及使用了更加高效的Virtual DOM算法等。这使得Vue3的打包大小减少了41%,初次渲染提速55%&#…

【MATLAB源码-第153期】基于matlab的OFDM系统插入导频和训练符号两种信道估计方式误码率对比仿真。

操作环境: MATLAB 2022a 1、算法描述 OFDM(Orthogonal Frequency Division Multiplexing,正交频分复用)是一种高效的无线信号传输技术,广泛应用于现代通信系统,如Wi-Fi、LTE和5G。OFDM通过将宽带信道划分…

使用docker方式测试部署django项目(客户催)

需求 1:已有django项目–weidanyewu 2:希望在服务器上测试部署–客户催 3:没完善django的启动 4:使用临时数据库进行演示 5:使用python3.10版本镜像 6:展示端口80 7:后台执行django程序 8&#…

【C语言】熟悉文件顺序读写函数

前言 本篇详细介绍了 文件顺序读写常用函数,快来看看吧~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 ​编辑 文件顺序读写函数 fgetc函数 示例 fputc函数 逐个字符写入 写入26个字母 文…

手写模拟器,解放双手!效果炸裂的生产工具

手写模拟器是一款基于Handright的仿手写图片生成软件,可以让你的电脑和手机也能写出漂亮的手写字,你只需要输入你想要写的内容,选择你喜欢的字体和背景,就可以生成一张高仿真的手写图片,用于各种场合,比如做…

uniapp中canvas的基础使用

canvas简介 canvas是uniapp中提供的一个组件,用于生成自定义的图形界面。通过canvas,我们可以通过JavaScript代码在页面上绘制各种图形和图像。 使用canvas 在页面中添加canvas 首先需要在页面的template中添加一个canvas组件: <template><view><canvas ca…

linux:iostat 用法详解

文章目录 描述语法参数例子 描述 iostat 是一个在类Unix操作系统中常用的系统监控工具&#xff0c;尤其是Linux系统中&#xff0c;它主要用于收集和报告中央处理器(CPU)使用情况以及磁盘输入/输出(I/O)统计数据。以下是 iostat 命令的基本用法及其参数详解&#xff1a; 语法 …

代码随想录三刷 day11 | 栈与队列之 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值

三刷day11 20. 有效的括号1047. 删除字符串中的所有相邻重复项150. 逆波兰表达式求值 20. 有效的括号 题目链接 解题思路&#xff1a; 有三种不匹配的情况&#xff1a; 第一种情况&#xff0c;字符串里左方向的括号多余了 。 第二种情况&#xff0c;括号没有多余&#xff0c;…

[伴学笔记]01-操作系统概述 [南京大学2024操作系统]

文章目录 前言jyy:01-操作系统概述 [南京大学2024操作系统]为什么要学操作系统?学习操作系统能得到什么? 什么是操作系统?想要明白什么是操作系统:时间线:1940s1950s-1960s1960-1970s年代. 信息来源: 前言 督促自己,同时分享所得,阅读完本篇大约需要10分钟,希望为朋友的技术…

编码规则转换

思考&#xff1a; 如何将一个机内码转换为区内码&#xff1f; 只要将机内码减去 A0A0 就可以啦 如果只让我们用加法器来解决呢&#xff1f; 注意我们的数据占用了 32 位&#xff0c;如果想用补码进行减法运算的话&#xff0c;符号位怎么办&#xff1f;&#xff1f;&#xf…

《探索数据结构之美:如何高效实现哈希表》

摘要&#xff1a;哈希表是一种基于键值对的数据结构&#xff0c;它通过哈希函数将键映射到表中一个位置&#xff0c;以实现快速的插入、删除和查找操作。在本期播客中&#xff0c;我们将深入剖析哈希表的数据结构&#xff0c;分享如何用Python语言实现一个哈希表项目。此外&…

【深度学习笔记】计算机视觉——微调

微调 前面的一些章节介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。 我们还描述了学术界当下使用最广泛的大规模图像数据集ImageNet&#xff0c;它有超过1000万的图像和1000类的物体。 然而&#xff0c;我们平常接触到的数据集的规模通常在这两者之间。 假…

【计算机是怎么跑起来的】软件,体验一次手工汇编

【计算机是怎么跑起来的】软件,体验一次手工汇编 二进制机器语言汇编语言操作码操作数寄存器内存地址和I/O地址参考书:计算机是怎么跑起来的 第三章外设在路上。。。先整理一下本书涉及的理论知识,反正后面做视频也要重写QAQ 程序的作用是驱动硬件工作,所以在编写程序之前必…