重点了解一下下面基础知识,到时来了再给具体的基础性工作,同时有导师指导:
协议:AHCI、NVMe、SCSI(服务器用的比较多)
总线:SATA、PCIe、SAS(服务器用的比较多)
接口:SATA、mSATA、SATA Express、M.2、PCIe、U.2、SAS
是一种带有机械马达结构的存储装置,主要带有马达、盘片、磁头、缓存。数据存储在磁碟扇区里。速度约120MB/s。
是一种不带有机械马达结构的存储装置,主要带有闪存、主控芯片、缓存。存储在闪存颗粒中,即内存、MP3、U盘等存储介质。SATA协议约500MB/S;NVMe协议(PCIe3.0×2)约1800MB/S;NVMe协议(PCIe3.0×4)约3500MB/S;NVMe协议(PCIe4.0×4)约4500MB/S;
NVMe协议分为三部分:host端的驱动、PCIe+NVMe控制器、NAND Flash的存储介质。
主机和控制器之间通过共享内存的队列实现交互。NVMe的队列有管理队列和命令队列两种,管理队列仅有一个,命令队列最多65535个。每个队列是一个队列对:提交队列和完成队列。提交队列用于主机向NVMe设备发送NVMe命令,完成队列用于NVMe设备向主机反馈命令执行情况。
控制器本质上是DMA+multi queue,NVMe协议本质是建立了多个计算机与存储设备的通路(最多65535 64K个),实现了并发。
NVMe中发送队列通过门铃机制告诉控制器是否有新数请求/命令,即通过提交队列的尾部指针;完成队列通过中断机制告诉主机。
命令大小共64字节,其中Command Identifier标识一个具体的命令。Namespace Identifier则表示命令发送到那个命名空间。Data Pointer 1 和Data Pointer 2则用于标识数据的具体位置。
中央处理器(英文Central Processing Unit)是一台计算机的运算核心和控制核心。CPU、内部存储器和输入/输出设备是电子计算机三大核心部件。其功能主要是解释计算机指令以及处理计算机软件中的数据。
英文全称Graphic Processing Unit,中文翻译为“图形处理器”。一个专门的图形核心处理器。GPU是显示卡的“大脑”,决定了该显卡的档次和大部分性能,同时也是2D显示卡和3D显示卡的区别依据。2D显示芯片在处理3D图像和特效时主要依赖CPU的处理能力,称为“软加速”。3D显示芯片是将三维图像和特效处理功能集中在显示芯片内,也即所谓的“硬件加速”功能。
CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。主要区别如下。
CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理。这些都使得CPU的内部结构异常复杂。而GPU面对的则是类型高度统一的、相互无依赖的大规模数据和不需要被打断的纯净的计算环境。
GPU采用了数量众多的计算单元和超长的流水线,但只有非常简单的控制逻辑并省去了Cache。而CPU不仅被Cache占据了大量空间,而且还有有复杂的控制逻辑和诸多优化电路,相比之下计算能力只是CPU很小的一部分。
CPU有强大的ALU(算术运算单元),它可以在很少的时钟周期内完成算术计算。当今的CPU可以达到64bit 双精度。执行双精度浮点源算的加法和乘法只需要1~3个时钟周期。CPU的时钟周期的频率是非常高的,达到1.532~3gigahertz(千兆HZ, 10的9次方).大的缓存也可以降低延时。保存很多的数据放在缓存里面,当需要访问的这些数据,只要在之前访问过的,如今直接在缓存里面取即可。
复杂的逻辑控制单元。当程序含有多个分支的时候,它通过提供分支预测的能力来降低延时。数据转发。当一些指令依赖前面的指令结果时,数据转发的逻辑控制单元决定这些指令在pipeline中的位置并且尽可能快的转发一个指令的结果给后续的指令。这些动作需要很多的对比电路单元和转发电路单元。
GPU的特点是有很多的ALU和很少的cache. 缓存的目的不是保存后面需要访问的数据的,这点和CPU不同,而是为thread提高服务的。如果有很多线程需要访问同一个相同的数据,缓存会合并这些访问,然后再去访问dram(因为需要访问的数据保存在dram中而不是cache里面),获取数据后cache会转发这个数据给对应的线程,这个时候是数据转发的角色。但是由于需要访问dram,自然会带来延时的问题。
GPU的控制单元(左边黄色区域块)可以把多个的访问合并成少的访问。
GPU的虽然有dram延时,却有非常多的ALU和非常多的thread. 为啦平衡内存延时的问题,我们可以中充分利用多的ALU的特性达到一个非常大的吞吐量的效果。尽可能多的分配多的Threads.通常来看GPU ALU会有非常重的pipeline就是因为这样。所以与CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算,这也正是密码破解等所需要的。所以GPU除了图像处理,也越来越多的参与到计算当中来。
上面说的有点专业化,接下来就简单说一下,他们两个到底差在哪?
CPU(Central Processing Unit)是电脑最主要的部件,他的主要功能是解释计算机指令以及处理计算机软件中的数据,说白了就是做指挥工作,统筹各方面。CPU相当于整个电脑的心脏,而GPU相当于显卡的心脏。
普通的处理器CPU差不多双核心四线程,目前市面上最高端的桌面处理器i9-7980XE(RMB1.5万)不过十八核心三十六线程。GPU则不同,就拿普通的2000块的游戏显卡RX 480来说,RX480的GPU芯片计算单元划分为36个CU计算核心,每个CU核心又包含了64个流处理器计算核心,所以总共就是36X64=2304个流处理器计算核心。
CPU相对于GPU就像老教授和小学生,拿i9-7980XE和RX480举个例子,出一套小学数学试卷,老教授刚做一道题,两千多名学生一人一题早就交卷子了。如果套高数卷子,老教授做完学生们一道也不会做。
动态随机存取存储器(Dynamic Random Access Memory**,**DRAM)是一种半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。由于在现实中晶体管会有漏电电流的现象,导致电容上所存储的电荷数量并不足以正确的判别数据,而导致数据毁损。因此对于DRAM来说,周期性地充电是一个无可避免的要件。由于这种需要定时刷新的特性,因此被称为“动态”存储器。相对来说,静态存储器(SRAM)只要存入数据后,纵使不刷新也不会丢失记忆。
SDRAM:Synchronous Dynamic Random Access Memory,同步动态随机存储器。同步是指其时钟频率和CPU前端总线的系统时钟相同,并且内部命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据的读写。
DDR的全称为Double Data Rate SDRAM(双倍速率的SDRAM),就是我们平时说的内存颗粒,也就是内存芯片。
DDR在原有的SDRAM的基础上改进而来,SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,分别在上升沿和下降沿各传输一次数据。
DIMM(Dual Inline Memory Module)双列直插内存模块,也就是我们常见的内存条。
把某型号128MB内存颗粒拆开来看,它是由8个Bank组成,我们也称为Logical Bank(逻辑Bank)。每个Bank就是一个存储矩阵,就像一个大方格子阵。一般来讲,每个Bank中格子数量是相同的。这个格子阵有很多列(Column)和很多行(Row),这样我们想存取某个格子,只需要告知是哪一行哪一列就行了,这也是为什么内存可以随机存取而硬盘等则是按块存取的原因。
随着颗粒容量提升,bank数越来越多,到DDR4时出现Bank Group,我们可以理解为,将多个Bank编成一个组,这个组就是Bank Group。
DDR3颗粒容量 = 每个BANK的格子数 × BANK数 × 芯片位宽
DDR4/DDR5颗粒容量 = 每个BANK的格子数 × BANK数 × 芯片位宽 x BankGroup数
芯片封装,内部可能有多个die。如果需要计算整个芯片容量大小,在计算出单个颗粒大小后,还需要知道Die per Package,即每个Package中有多少个Die颗粒,即:Package容量 = 单个颗粒(Die)容量 * Die per Package
CPU与内存之间的数据接口位宽是64bit,也就意味着CPU在一个时钟周期内会向内存发送或从内存读取64bit的数据。可是,单个内存颗粒的位宽仅有4bit、8bit或16bit,个别也有32bit的。显然发送方和接收方的位宽必须一致,不能说我发了64位数据出来,你才收到前面的16位,后面的就丢掉了。因此,必须把多个颗粒并联起来,组成一个位宽为64bit的数据集合,才可以和CPU互连。
把这样一个由多个颗粒组成的64bit位宽集合,称为一个RANK。而实际上,这里64bit位宽指的是内存通道(Memory Channel)的宽度
一个RANK中颗粒数量 = 通道位宽 / 颗粒位宽
可以把原本两根物理DIMM的内存颗粒全部安装在一块内存印刷电路板上,使得一根内存条具备两倍的内存容量。 这就相当于,物理上虽然只有一根内存条,但是通过划分不同的RANK,在逻辑上可以看成是2根内存条。
同一个RANK内部的所有内存颗粒chips,连接到同一个CS(Chip Select,片选)信号线上。RANK0和RANK1共享同一组addr/command信号线,利用cs片选线选择欲读取或是写入的那一组内存颗粒,之后,就可以对这一组内存颗粒进行读写。
DDR3或DDR4的DIMM计算公式,如下:DIMM容量(DDR3/DDR4) = (芯片容量 * 64 / 内存芯片位宽) * RANK数
DDR3、DDR4,只能一根DIMM对应1个通道,所以上述公式,实际是默认计算的一个通道容量,而DDR5的DIMM对应2个通道。
DDR5的DIMM计算公式,如下:DIMM容量(DDR5) = (芯片容量 * 32 / 内存芯片位宽) * 每通道RANK数 * 2
CHANNEL即内存通道,实际上是一种内存的带宽加速技术。一个DDR控制器中可能有一个内存通道,也可能有两个内存通道。最常见的是双通道,民用级电脑都支持,服务器还有3通道和4通道等。
内存通道实际是对应一组时钟、命令、地址、数据线,这组总线也就是所谓的内存通道。一般一个内存通道,可以连接若干个DIMM。
DDR3/DDR4内存是单通道;DDR5是双通道的(两个内存控制器分别寻址读数据使内存带宽增加一倍存取速度增加一倍)
SPD(serial presence detect),即串行存在检测,**是DIMM的相关描述信息。**在每根内存条上,都有一份SPD数据,这份数据保存在一个可擦写的eeprom芯片中。SPD数据记录了该内存的许多重要信息,诸如内存的芯片及模组厂商、工作频率、工作电压、速度、容量、电压与行、列地址带宽等参数。SPD数据一般都是在出厂前,由DIMM制造商根据内存芯片的实际性能写入到eeprom芯片中。
一般不同的架构常常对应不同用途的设备: arm64和aarch64对应64位ARM架构(ARMv8),常见于移动设备和嵌入式系统。 armv7l和arm对应32位ARM架构(ARMv7),常见于较旧的移动设备和嵌入式系统。 x86_64、x64和amd64对应64位x86架构,常见于个人电脑和服务器。 x86和i386对应32位x86架构,常见于较旧的个人电脑。(基本上可以淘汰了) dmg和zip通常表示macOS和Windows平台的安装包格式。
ARMv8 = ARM64 = AArch64 ARMv7 = armv7l = ARM x86_64 = x64 = amd64 x86 = x86_32
本文作者:zzw
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 License 许可协议。转载请注明出处!