• 回答数

    3

  • 浏览数

    343

小宝151205
首页 > 学术论文 > 缓存的研究论文解读汇总

3个回答 默认排序
  • 默认排序
  • 按时间排序

廊坊电器城

已采纳

随着人们对计算机紧凑性设计的要求越来越高,计算机的CPU芯片也在朝着高度集成的方向不断发展,由此造成其在性能方面对温度也更加敏感,其散热技术也成为了相关领域的研究 热点 。下面是我为大家推荐的 cpu 对计算机影响论文,供大家参考。

cpu对计算机影响论文 范文 一:计算机CPU论文

摘要: CPU 是计算机进行运算的核心, 主要性能指标有字长、频率、高速缓存、前端总线频率、超线程技术的应用、支持的扩展指令集等对整个计算机的性能起着至关重要的作用。在计算机的使用中常见的CPU 超频故障、计算机感染病毒使CPU 性能大幅度下降,偶伴随 死机 等现象, 逐步掌握CPU 主要性能与故障的排除技巧, 达到举一反三的效果。

关键词: CPU; 性能指标; 高速缓存; 显示器 黑屏; 故障排除

1 计算机CPU 的主要性能指标

Central Processing Unit, CPU 通常也称“微处理器”或“中央处理器”, 是计算机进行运算的核心, 在计算机系统中相当于“大脑”,主要负责计算机的数据运算和发出计算机的控制指令, 是控制计算机中其他设备运行的“总指挥”。在计算机的发展过程中, CPU 技术的发展一直是计算机技术发展的重点, 在计算机的使用中CPU 的故障排除也是一个难点, 有待我们认真地研究, 以加深对CPU的了解, 逐步掌握CPU 常见故障的排除 方法 与技巧, 配合CPU 工作, 协调CPU 的处理速度, 在使用中达到举一反三的效果。

CPU“字长”是表示运算器性能的主要技术指标:在

计算机技术中, 把CPU 在单位时间内一次处理的二进制数的位数称为“字长”。一般情况下, 把单位时间内能处理为8 位数据的CPU 叫8 位CPU。同理, 64 位的CPU 在单位时间内能处理字长为64 位的二进制数据。字长是表示运算器性能的主要技术指标,通常等于CPU 数据总线的宽度。CPU 字长越长, 运算精度越高, 信息处理速度越快, CPU 性能也就越高。

CPU 的频率与CPU 的外频和倍频的关系:CPU 的频率是指计算机运行时的工作频率, 也称为“主频”或“时钟频率”。CPU 的频率表示CPU 内部数字脉冲信号振荡的速度, 代表了CPU 的实际运算速度, 单位是Hz。CPU 的频率越高, 在一个时钟周期内所能完成的指令数也就越多, CPU 的运算速度也就越快。

倍频越高, CPU 的频率就越高,CPU 实际运行的频率与CPU 的外频和倍频有关, CPU 的实际频率=外频!倍频。外频即CPU 的基准频率, 是CPU 与主板之间同步运行的速度。外频速度越高, CPU 就可以同时接受更多来自外围设备的数据, 从而使整个系统的速度进一步提高。倍频是CPU 运行频率与系统外频之间差距的参数, 也称为“倍频系数”, 通常简称为“倍频”。在相同的外频下, 倍频越高, CPU 的频率就越高。

主频越高, CPU 的速度也就越快,当我们使用CPU 时, 通常会说到“奔腾Ⅲ 600”、“奔腾4 ”等等, 其实, 这些型号里面的数字“600”和“”就是指CPU 的主频。CPU 的主频一般以MHz 为单位, 通常所说的“奔腾Ⅲ600”中的“600”实际上就是指该CPU 的主频是600MHz。但随着CPU 主频的提高, 一般以GHz( 1GHz=1000MHz) 为单位, 如“奔腾4 ”中的 即指该CPU 的工作频率是, 即3000MHz。一般说来,一个时钟周期完成的指令数是固定的, 因此主频越高, CPU 的速度也就越快。

缓存容量越大, 性能也就越高:

缓存(Cache) 的作用是为CPU 和内存进行数据

交换时提供一个高速的数据缓冲区。当CPU 要读取数据时, 首先会在缓存中寻找, 如果找到了则直接从缓存中读取, 如果在缓存中未能找到, 那么CPU 就从主内存中读取数据。CPU 缓存一般分为L1 高速缓存和L2 高速缓存。

一级高速缓存与二级高速缓存对CPU 的性能影响L1 高速缓存也称为一级高速缓存( L1Cache) 用于暂存部分指令和数据, 以使CPU 能迅速地得到所需要的数据。L1 高速缓存与CPU 同步运行, 其缓存容量大小对CPU 的性能影响较大。__L2 高速缓存也称为二级高速缓存( L2Cache) 的容量和频率对CPU 的性能影响也较大, 其作用就是协调

CPU 的运行速度与内存存取速度之间的差异。L2 高速缓存是CPU 晶体管总数中占得最多得一部分, 由于L2 高速缓存得成本很高, 因此L2 高速缓存得容量大小一般用来作为高端和低端CPU 产品得分界标准。目前CPU 的L2 高速缓存有低至64KB 的, 也有高达4MB 的。

前端总线频率比外频更具代表性:前端总线频率是AMD 公司在推出K7CPU 时提出的概念, 一直以来很多人都误认为这个名词是外频的一个别称。其实, 通常所说的外频是指CPU 与主板的连接速度, 这个概念建立在数字脉冲信号振荡速度的基础之上, 而前端总线频率指的是数据传输的实际速度, 即每秒钟CPU 可以接收的数据传输量。例如100MHz 外频是指数字脉冲信号在每秒钟振荡1000 万次, 而1001MHz 前端总线频率则是指CPU 每秒钟可接受的数据传输量是100MHz!64bit/8bit/Byte=800MB。就处理器速度而言, 前端总线比外频更具代表性。

CPU 的制造工艺直接关系到CPU 的电气性能:

CPU 在更高的频率下工作,线路宽度越小, CPU 的功耗和发热量就越低目前Inter 公司的主流产品的制造工艺已经达到 m 级别。由于CPU 制造完成后, 是一块不到1cm2 的硅晶片( 或集成电路) , 还要对其进行封装, 并安装引脚( 或称为“针”) 后才能插到主板上、通常所说的Socket478 和Socket939 中的数值的就是指该CPU 的引脚数, CPU 的封装一般有陶瓷封装和树脂封装两种。

超线程技术的应用超线程(Hyper- Threading,HT) 是Inter 公司为Pentium4 专门设计的一项技术。超线程是一种同步多线执行技术, 一款应用超线程技术的IntelCPU 可以在逻辑上被模拟成两个任务。当计算机系统应用超线程技术后, 可使整机性能提高25%以上。

支持的扩展指令集对提高CPU 的效率具有重要作用:指令集是CPU 用来计算和控制系统的命令, 是与硬件电路相配合的一系列指令。指令集是评价CPU 性能的重要指标之一。目前指令集有Intel 公司的MMX、SSE、SSE2、SSE3 和AMD 公司的“3DNow! ”等。MMX(Multi Media Extensions,多媒体扩展)指令集由Intel 公司开发, 包括57 条多媒体指令, 通常这些指令可以同时处理多个数据, 提高CPU 处理图形、视频和音频的能力。SSE(Streaming SIMDExtensions,单指令多数据流扩展)指令集是MMX指令集的扩展, 是Intel 公司在Pentium3 处理器中开始使用的。SSE2 支持双精度浮点数的SIMD 处理, 用在64 位CPU 中。SSE3 是Intel 公司在最新的Pentium 4 Prescott 处理器中为了增强Pentium 4 CPU 在多媒体方面的性能二新增加的一组指令集合, 有助于增强Intel CPU 的超线程功能。“3DNow! ”指令集广泛

应用于AMD 公司的K6- 2,K6- 3 以及Athlon( k7) 处理器中。在软件的配合下, 可以大幅度提高3D 处理性能。“3Dnow! ”指令集是最早的三维指令集。

2 计算机使用中CPU 常见故障的排除

故障现象:一般说来, CPU 是不容易出现故障的, 但由于超频或者电压工作不稳定和CPU 的制造工艺的不同等原因, 会导致CPU 不能正常工作, 显示器突然黑屏, 重启后无效, 更严重者会烧坏CPU。(1)CPU 超频是 DIY 族最喜欢干的事情, 有的CPU 本身不具备超频能力却硬要超频, 有的CPU 超频的余量很小, 却让它超出额定频率较大的范围工作, 其结果将导致电脑工作不正常, 经常出现死机现象。因为CPU 超频使用, 而且是硬超, 有可能是超频不稳定引起的故障。如开机后用手摸一下CPU, 发现非常烫, 则故障就可能在此。解决的方法是: 用户可以找到CPU 的外频与倍频跳线, 逐步降频后, 启动电源, 系统恢复正常, 显示器也就有了显示。也有可能是过度超频之后, 电脑启动时可能出现散热风扇转动正常, 但硬盘指示灯只亮了一下便没有反应了, 显示器也维持待机状态的故障。由于此时不能进入 BIOS 设置选项, 因此只能给CPU 降频。具体方法是打开机箱并在主板上找到给CMOS 放电的跳线, 给CMOS放电后重启系统即可。值得注意的是内存大小、硬盘速度、显卡速度,

特别是CPU 的性能指标, 对整个计算机的性能无不起着至关重要的作用, 因此盲目追求CPU 一级高速缓存与二级高速缓存、前端总线频率的高速并不可取。(2) 电压不正常导致CPU 烧坏。常见的故障现象是开机后黑屏, 只听到CPU 风扇在转动, 没有开机自检。解决方法: 根据故障现象可以排除电源的故障, 开机后风扇在转动, 说明计算机是通电的。但是不能自检, 也就不能听到“滴”的一声响, 此时怀疑是主板或CPU 的故障, 初步判断后, 采用替换法进行确认。首先找一台同等配置的好的计算机, 把此台计算机的CPU 拆下, 换到有故障的计算机上, 开机后如果能启动并正常进入系统, 说明该台计算机的故障就是CPU 有问题, 仔细查看CPU,发现针角处有发黑的地方, 说明是由于电压不稳定导致CPU 被烧坏。

计算机感染病毒, CPU 性能大幅度下降, 偶伴随死

机现象:(1)该故障原因可能是感染了病毒, 或磁盘碎片过多或CPU 温度过高。解决方法是首先可以使用杀毒软件查杀病毒, 然后使用Windows 附带的“磁盘碎片整理”程序进行整理。如果还不能解决问题, 则打开机箱, 查看CPU 散热器的风扇通电后是否转动, 如果不转动, 则更换新散热器即可。(2)蠕虫病毒发作使CPU 占用率为何高达100%。故障现象: 即开机使用一段时间后, 硬盘指示灯不停地闪, 同时

系统运行速度变得非常慢, “任务管理器”窗口中显示CPU 地占用率100%。只有重新启动才能继续使用。但过一段时间后又是如此。从故障描述可知, 计算机系统感染了某种蠕虫病毒。在正常情况下, 在不运行大型的程序时, CPU 在瞬间的占用率不可能为100%。而蠕虫病毒发作的时候就会将剩余的系统资源占满。这时, 用户可以在“任务管理器”窗口中查看哪个程序占用的CPU 资源最多, 如果是一个陌生的程序, 建议用户使用杀毒软件( 最好使用最新的杀毒库) 对系统进行彻底的检查。如果还无法解决该问题,最好重新安装 操作系统 , 并且安装病毒防火墙。这样, 能彻底解决问题。

CPU 风扇不转导致计算机死机:故障现象: 一台计

算机开机进入系统后不久就死机, 重新启动计算机后故障依旧。解决方法: 打开机箱, 查看机箱内各设备的运行情况, 发现CPU 风扇转动的很慢, 处于似转非转的状态, 由此想到造成重启的原因可能是由于CPU 风扇不能正常运转而导致CPU 无法散热, 从而使CPU 温度急剧上升, 最后出现死机。因为是突然黑屏, 可能是硬件有松动而引起接触不良。可打开机箱把硬件重新插一遍后开机, 有可能是显卡有问题, 因为从显示器的指示灯来判断无信号输出, 使用“替换法”检查, 显卡没问题, 那么此时有可能是显示器有故障,

使用“替换法”再检查, 同样没有发现问题, 接着检查CPU, 发现CPU 的针脚有点发黑和绿斑, 这是生锈的迹象。看来问题就在此处, 因为制冷片有结露的现象, 一定是制冷片的表面温度过低而结露, 导致CPU 长期处于潮湿的环境中, 日积月累, 就会产生太多锈斑, 造成接触不良, 从而发生此故障。找到问题的所在点后, 要拆掉CPU 风扇, 给风扇添加润滑油并清理风扇上的灰尘, 再重新安装CPU 风扇。开机后CPU 风扇转动正常, 死机现象也就消除了。还可以取出CPU, 用橡皮仔细地把每一个针脚都擦一遍, 然后把散热片上的制冷片取下, 清洁干净, 最后装好CPU 和制冷片开机, 即可正常启动。

计算机由于各种原因总会出现一些故障。特别当遇到CPU 常见故障时, 我们应该对CPU 的主要性能指标有充分的了解, 分析故障原因, 掌握常用的排除方法与技巧, 避免CPU 故障造成计算机黑屏、死机等麻烦。

参考文献:

[1] 熊巧玲,吕良燕,高明伟.电脑组装与维护技能实训

[M].北京:科学出版社,2007.

[2] 谭贤.电脑组装、维护与故障排除[M].北京:机械工业出版社,2007.

[3] 网冠科技编著.电脑急救、备份还原、BIOS、注册表设计[M].北京:机械工业出版社,2007.

[4] 张景生.台式计算机使用与维修[M].北京:国防工业出版社,2007.[5] __功、修红海.计算机组装与维护[M].北京:中华工商联合出版社,2007.

cpu对计算机影响论文范文二:计算机组成原理——CPU 论文

摘 要 CPU是计算机进行运算的核心,其重要性相当于人体的大脑,起着至关重要的作用。CPU的主要性能指标有字长、频率、高速缓存、前端总线频率、超线程技术的应用、支持的扩展指令集等等,对整个计算机的性能起着至关重要的作用。要从了解CPU的发展历程,运行原理以及故障排除等多方面了解CPU,从而达到对CPU的全面认识。

关健词 CPU 历史 工作原理 故障排除

The priciple of the Computer Compoment--CPU

Wu Min

Abstract CPU is the core of computer operations, its importance is equivalent to the human brain, plays a vital role in.

The main properties of CPU index word length, frequency, cache, FSB, hyper threading technology, support the instruction set extensions on the whole computer plays an important role in the performance. To understand the development history of CPU, operation principle and troubleshooting to know more about CPU, to achieve a comprehensive understanding of CPU.

Keywords CPU,History, Working priciple , Troubleshooting

引言

CPU是Central Processing Unit(中央微 处理器)的缩写,又称为微处理器。随着网络时代的到来,网络通信、信息安全和信息家电产品将越来越普及,而CPU正是所有这些信息产品中必不可少的部件,CPU主要由运算器和控制器组成,是微型计算机硬件系统中的核心部件,起着控制整个微型计算机系统的作用。

CPU性能的高低通常决定了一台计算机的档次。

世界上生产CPU芯片主要有Intel和AMD两家公司。Intel公司生产的CPU始终占有相当大的市场。目前,Intel公司生产的CPU主要有赛扬系列、奔腾系列、酷睿系列等。AMD公司的CPU占有相当的市场份额。AMD公司生产的CPU主要有闪龙系列、速龙系列等。

协调工作,决定了计算机的整体性能。CPU主要由运算器、控制器、寄存器组和内部总线等构成。寄存器组用于在指令执行过后存放操作数和中间数据,由运算器完成指令所规定的运算及操作。

CPU的发展非常迅速,个人电脑从8088(XT)发展到现在的Pentium 4时代,只经过了不到二十年的时间。

1971 Intel 4004,世界上第一款微处理器 1974 Intel 8008,第一个8位的微处理器; 1974 Intel 8080,第一个真正的微处理器; 1978 Intel 8086,16位微处理器; Intel 80186; 1982 Intel 80286;

1985 Intel 80386,新一代32位核心微处理器; 1989 Intel 80486; 1993 Pentium(奔腾);

从生产技术来说,最初的8088集成了29000个晶体管,而PentiumⅢ的集成度超过了2810万个晶体管;CPU的运行速度,以MIPS(百万个指令每秒)为单位,8088是,到高能奔腾时已超过了1000MIPS。

1 CPU的简介和历史发展

CPU的外部组成:控制单元,存储单元(寄存器,缓存),逻辑运算单元。

CPU的外部组成:芯片,金属壳(保护CPU,增加散热面积),引脚(固定CPU,连通电路)。

CPU是计算机的核心部件,处理计算机中的所有数据,使计算机完成各种功能,并使各部件

CPU从最初发展至今期间,按照其处理信息的字长,CPU可以分为:4位微处理器、8位微处理器、16位微处理器、32位微处理器以64位微处理器,基本上可以说个人电脑的发展是随着CPU的发展而前进的。

1971年世界第一台微处理器Inter的4004出现,内部集成2300个晶体管;1978年Inter16位处理器8086和与之配合的数学协处理器8087同时推出;1979年Inter8088推出,内含27000个晶体管,外部数据总线减少为8位,也首次运用于IBM PC中,预示微机时代即将来临.1982年Inter又推出了16位的80286,内部晶体管万个,时频由最初的6MHZ升为20MHZ;1985年32位处理器80386推出,时频达到以上;1989年集成120万晶体管的80486出现,时频90MHZ,性能比386提高了4倍;1993年奔腾时代来临,奔腾1,世界上第一台586级处理器,310万晶体管,时频200MHZ;1996年奔腾Pro,550万晶体管,处理速度是一代的2倍;同时第一次采用2级内存,同年奔腾MMX推出,L1缓存加倍;1997年,奔腾Pro与MMX结合,奔腾2出现,性能大大提高;1998年奔腾3出现,一级缓存2KB,二级缓存512KB,安全性能大大提高;2000年奔腾4推出,主频超过.之后又出了双核,四核...Inter处理器的发展就代表了CPU的发展,其中不乏其他公司产品,如AMD等

2 CPU的运行原理及过程

CPU的运行原理

CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumann architecture)设计的装置。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼CPU 的运作原理可分为四个阶段: 提取、解码、执行和写回。

第一阶段,提取,从程序存储器中检索指令(为数值或一系列数值)。由程序计数器指定程序存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加存储器单元[iwordlength]。指令的提取常常必须从相对较慢的存储器查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的高速缓存和管线化架构。

CPU根据从存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码,其指示要进行哪些运算。 其它 的数值通常供给指令必要的信息,诸如一个加法运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的寻址值:暂存器或存储器地址,以寻址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体装置。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU 中往往可以重写,方便变更解码指令。

在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算 的CPU部件。例如要求一个加法运算,算术逻辑单元将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位运算)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志暂存器里,溢出标志可能会被设置。

最终阶段,写回。以一定格式将执行阶段的

结果简单的写回。运算结果极常被写进CPU内部的暂存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,但容量较大且较便宜的主存。某些类型的指令会操作程序计数器,而不直接产生结果数据。这些一般称作“跳转”并在程序中带来循环行为、条件性执行(透过条件跳转)和函数[jumps]。许多指令也会改变标志暂存器的状态位。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志暂存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。

在执行指令并写回结果数据之后,程序计数器的值会递增,反复整个过程,下一个指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程序计数器将会修改成跳转到的指令地址,且程序继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为单片机)。

CPU 数字表示方法是一个设计上的选择,这个选择影响了设备的工作方式。一些早期的数字计算机内部使用电气模型来表示通用的十进制(基于10 进位)数位系统数字。还有一些罕见的计算机使用三进制表示数字。几乎所有的现代的CPU 使用二进制系统来表示数字,这样数字可以用具有两个值的物理量来表示,例如高低电平[binaryvoltage]等等。

与数表示相关的是一个CPU可以表示的数的大小和精度,在二进制CPU 情形下,一个位(bit)指的是CPU处理的数中的一个有意义的位,CPU用来表示数的位数量常常被称作“字长”, “位宽”, “数据通路宽度”或者当严格地涉及到整数(与此相对的是浮点数)时称作“整数精度”、该数量因体系结构而异,且常常在完全相同的CPU的不同部件中也有所不同。 实际上,整数精度在CPU可执行的软件所能利用的整数取值范围上设置了硬件限制。整数精度也可影响到CPU可寻址(寻址)的内存数量。譬如,如果二进制的CPU使用32位来表示内存地址,而每一个内存地址代表一个八位组,CPU 可定位的容量便是232个位组或4GB。以上是简单描述的CPU地址空间,通常实际的CPU 设计使用更为复杂的寻址方法,例如为了以同样的整数精度寻址更多的内存而使用分页技术。

2更高的整数精度需要更多线路以支持更多的数字位,也因此结构更复杂、更巨大、更花 费能源,也通常更昂贵。因此尽管市面上有许多更高精准度的CPU如 16、32、64甚至128位,但依然可见应用软件执行在4或8位的单片机上。越简单的单片机通常较便宜,花费较少能源,也因此产生较少热量。这些都是设计电子设备的主要考量。

CPU的运行过程

数据从输入设备流经内存,等待CPU的处理,这些将要处理的信息是按字节存储的,也就是以8位二进制数或8比特为1个单元存储,这些信息可以是数据或指令。数据可以是二进制表示的字符、数字或颜色等等。而指令告诉CPU对数据执行哪些操作,比如完成加法、减法或移位运算。 假设在内存中的数据是最简单的原始数据。首先,指令指针(Instruction Pointer)会通知CPU,将要执行的指令放置在内存中的存储位置。因为内存中的每个存储单元都有编号(称为地址),可以根据这些地址把数据取出,通过地址总线送到控制单元中,指令译码器从指令寄存器IR中拿来指令,翻译成CPU可以执行的形式,然后决定完成该指令需要哪些必要的操作,它将告诉算术逻辑单元(ALU)什么时候计算,告诉指令读取器什么时候获取数值,告诉指令译码器什么时候翻译指令等等。假如数据被送往算术逻辑单元,数据将会执行指令中规定的算术运算和其他各种运算。当数据处理完毕后,将回到寄存器中,通过不同的指令将数据继续运行或者通过DB总线送到数据缓存器中。基本上,CPU就是这样去执行读出数据、处理数据和往内存写数据3项基本工作。但在通常情况下,一条指令可以包含按明确顺序执行的许多操作,CPU的工作就是执行这些指令,完成一条指令后,CPU的控制单元又将告诉指令读取器从内存中读取下一条指令来执行。这个过程不断快速地重复,快速地执行一条又一条指令,产生你在显示器上所看到的结果。在处理这么多指令和数据的同时,由于数据转移时差和CPU处理时差,肯定会出现混乱处理的情况。为了保证每个操作准时发生,CPU需要一个时钟,时钟控制着CPU所执行的每一个动作。时钟就像一个节拍器,它不停地发出脉冲,决定CPU的步调和处理时间。

参考文献:

《电子计算机组成原理》 蒋本珊 北京理工大学

《计算机组成原理》第二版,唐朔飞 编著,高等 教育 出版社,

《计算机导玉龙论》作者:王 电子工业出版社 《计算机科学导论》作者:王志强 机械工业出版社 《微型计算机原理与应用》肖金立 编著,电子工业出版社,2003-1

284 评论

琉璃跃跃

穷则软件优化,达的硬件堆积,本文主要介绍存储领域在硬件方向的一些探索。硬件方向的探索又分为大体两块,对现有硬件的性能压榨,以及新硬件设备的创新。对现有硬件的压榨主要是 SPDK RDMA,通过by pass驱动层来最大限度利用硬件的性能。新硬件的探索则包含了傲腾持久化内存和KV-SSD两块。其中持久化内存目前有些云厂商已经投入了使用,KV-SSD 则目前主要还是在学术理论阶段,业界未看到大规模的使用。 以下几篇论文分别介绍了在 SPDK KV-SSD方向的一些研究。 SpanDB: A Fast, Cost-Effective LSM-tree Based KV Store on Hybrid Storage 介绍了在SPDK的探索。 Towards Building a High-Performance, Scale-In Key-Value Storage System 是三星发布的介绍了他们最新的产品KV-SSD的论文,介绍了KVSSD 这种新型存储在kv的应用。 PinK: High-speed In-storage Key-value Store with Bounded Tails 则针对现在一些KVSSD实现的缺点做了优化,提出了一种针对KVSSD 优化的变种LSM 实现。 下文将非常对这三篇论文进行展开做详细的介绍。

本文主要介绍了如何基于 SPDK 构建LSM-tree Based KV Store。传统的kv实现需要通过调用文件系统层最后才会达到磁盘 ,对于 Nvme SSD 这种高性能设备,传统的io链路无法完全发挥硬件的性能,通过SPDK ByPass驱动层直接操作裸盘则可以将硬件性能发挥到极致。

使用SPDK对WAL进行并发写入,可以大大提升写入性能,支持异步请求处理,减少线程切换的开销。测试表明,对于小value写入,绕过ext4文件系统直接通过SPDK进行写入可以降低倍的延时。由于WAL 处于关键路径上,这会对写入带来严重的性能开销导致性能瓶颈。其次,现在的kv架构都是假设磁盘设备速度较慢,因此设计上通常都嵌入了较高的软件开销,如果基于轮训的机制则会比较浪费cpu周期。本文基于rocksdb做了如下的优化:

多线程排队写入,有队列头部的线程直接获取当前的写入任务进行提交,可以做写入io合并,提升写入性能。如果写请求已经被提交,队列中部的请求发现已经完成写请求后直接返回,无需在进行io操作,通过group write,将大量的小io转化成顺序大io。

随着io设备性能的提升,linux io协议栈的开销变得不可忽视,通过SPDK将 驱动移动用户态,减少了系统调用并且支持zore copy,通过poll的方式而不是中断的方式进行io操作,减少了内核态的切换和io路径锁争用。同时这个章节对 Optane P4800x和P4610 两种设备进行了压测对比,简单列下压测结果。

图3的N 表示 P4610 0表示Optane 3-N 表示3个线程写入,CR=2 表示每个线程同时提交2个请求

可以看出使用多线程的SPDK 可以大大发挥磁盘性能

一旦进程绑定了SPDK,该磁盘就不能被其他进程访问,无论是通过io栈还是spdk。此外绑定cpu核心可以降低io的性能开销。加上polling-based io机制,导致后台的flush和compact线程不适合使用spdk进行读写,因为如果不绑核,会导致 io变慢,如果绑核了,则难以释放cpu空闲资源。

对于rocksdb和leveldb,前台的client写入通常都是同步的,用户同步提交读写请求然后等待io操作完成后返回,这种操作 通常会受限于io的延时导致吞吐的不足,为了提高吞吐,用户通常会设置超过cpu核心数的线程来进行并发的操作。但是对于使用了SPDK 的高速nvme,线程间的同步唤醒往往开销比io请求本身还大,超线程机制会带来额外的开销和降低了cpu的使用率。(好比redis 内存处理足够快,不需要多线程进行处理,多线程主要带来额外的开销争用)

对于一个n-core的机器,spandb配置Nc和线程数用于处理用户请求同时 进行了绑核,剩下的n-Nc个核心则用于处理内部的io请求,分为loggers和workers。loggers用于处理wal的写入 ,workers用于处理后台的flush和compaction以及memtable的读取和更新操作。

后台线程使用Qflush和Qcompact队列进行flush和compact操作,继承于rocksdb的实现,只是改为了直接操作SPDK 使用Qread队列来处理读请求,写请求则被拆分为Qprolog Qlog和Qepilog三个队列

基准压测表明,少数的几个核通过批量提交请求就可以充分利用磁盘的io,因此spandb默认使用了一个logger线程进行wal的写入,该线程数量可以动态在1-3之间调整,根据队列的长度和处理耗时动态调整线程数。对于前后台线程,优先保证前台线程的调度,同时会 监控后台队列的长度,以便在高负载写入的时候即使进行flush和compact。

为了减少对rocksdb本身的改动,抽象了一个TopFS 来管理spdk的相关操作。sst的数据布局与wal类似,也是通过metadata page管理,metadata page为hashtable,key为文件名,内容为文件对应的逻辑页起止id。

传统是kv存储实现,通常是存储引擎暴露kv接口,用户通过kv接口写入数据,key和value通过一定的数据结构被存储到文件里面,从用户调用接口到数据最终落到磁盘的整个流程可以用下图的左边部分来描述。

kv接口将数据写入文件系统,文件系统通过块设备驱动将数据写入磁盘,为了屏蔽磁盘的内部物理结构,文件系统到磁盘其实是通过LBA进行逻辑地址映射的,磁盘内部通过FTL将LBA转化为PBA,同时FTL还承担了磁盘的COW GC功能。可以看到从写入到落盘中间经历了非常多的环节。那么是否可以通过减少这些环节来进行写入流程的优化呢。比如上面提到的SPDK 通过bypaas文件系统少掉了一层文件系统的开销,那么是否还能更近一步呢。这篇论文正是基于这样想法,直接将kv的操作下层到设备层,由设备直接暴露了kv interface,直接bypass了设备层以及LBA到PBA的映射。通过设备内部的FTL ,直接实现了key到NAND location的映射。

设备暴露了put get delete iterate接口,kv请求通过pipeline的流程处理kv请求,固件驱动从磁盘io队列获取请求,然后传递给request handle,request handle再讲请求传递给index manager,index manager先将变长的key散列成定长的key缓存到local hashtable,最后在合并到全局的hashtable完成到磁盘位置offset的映射。同时index manager还会根据key的前4B进行分桶,通过将相同前缀的数据放在一起来实现迭代操作。local hashtable主要是为了提高写入并发减少全局hashtable的锁竞争。

垃圾回收时,垃圾回收器扫描flash中kv数据,然后和 全局hashtable做对比来判断数据的有效性,丢失已经被删除和更新的数据

性能测试部门主要测试了kvssd的cpu开销,在同样的ssd下,kvssd只需要一个线程就能达到与普通ssd8线程一样的io吞吐,同时,随着单机磁盘数量的提升,kvssd拥有更好的线性拓展能力。对于普通的ssd,单机的吞吐受限于cpu无法随着磁盘数量程线性增长,而kvssd由于极低的cpu开销可以提供更高的单机吞吐能力,对于昂贵的机柜资源,如果能在单机插更多的磁盘提供更高的吞吐显然是更经济的。

其实kvssd之所以需要更低的cpu开销,除了bypass了很多层,更重要的部分是他的固件模块其实已经有点类似于一个小型的cpu了,通过把cpu的工作offload到固件本身的做法在业界由来已久,比如将网络包的解析的bypass 内核offload到网卡直接进行。

虽然使用KV-SSD可以带来延迟的降低和吞吐的上升,但是这个降低只是针对平均值,目前现在大多数的KV-SSD的实现都存在一个长尾的问题。最常见的KV-SSD的实现包括hash-based KV-SSD 和LSM-tree Based KV-SSD,但是这两种实现都存在长尾的问题。

此外,控制器内部的DRAM和FLASH 的发展速度也不一样,平均每年DRAM增长倍但是FLASH则增长了倍,随着DRAM的增长,FLASH的需求将越来难以满足使用,因此设计一个减少FLASH使用的数据结果是势在必行的

总体架构的实现如下图,由于pink是LSM 的改进版本,此处会将pink的数据结构和rocksdb进行比较。pink的存储结构可以分为4部分,分别是 SkipList、 levelList 、meta segment 和data segment。

上面提到skiplist和levellist都存在FLASH 当中,那么FLASH 是否有足够的容量容纳这些levellist呢?对于一块4T 的磁盘,假设key value大小分别为32B和1KB,page的大小为16KB,那么对于一个16KB的meta segment,可以容纳的pair数量为398个,对于4T的磁盘总共可以存储2^32个1KB大小的数据,也就是总共需要个meta segment,那么对于levelist来说需要占用的DRAM空间则为(32B+8B)* = 432M 的内存空间。显然控制器的DRAM是够用的。

写入流程很简单,用户写入的数据会直接写入到skiplist中,熟悉LSM的人可能发现了,传统的LSM 写入为了保证数据的可靠性,都会先写入WAL 然后在写入内存memtable,但是此处并没有WAL而是直接写入skiplist会不会有问题呢。这个主要得益于磁盘控制器的自带的电容器,通过电容器可以保证断电数据不丢失,因此可以省掉一次的WAL写入

相比写入,读取流程则显得比较繁琐,以下图的查询key(39)为例。

从上面的读流程可以看到,对于极端的情况,一次的查询可能涉及非常多次的FLASH读取,比如上面的流程就需要读取metaPage0 metaPage2以及最终value所在的datapage12。对于level更多的场景需要读取FLASH 的次数将更多。 level Pinning的思路很简单,就是把meta segment尽可能的放在FLASH,这样就可以减少FLASH的读取了。那么问题来了,FLASH能放的下这么多的meta segment么。 同样直接对数据进行分析计算,由于LSM 的指数分层存储机制,每个Ln+1 层的数据都是Ln层的T倍,对于4T的磁盘,实际数据表明总共需要的存储层级为5级,对与L1到L4的层级分别需要的meta segment为 .由于一块4T的SSD 通常有4G的FLASH,那么显然是可以把L1到L3的meta segment放到FLASH里面的。 把metasegment放到了FLASH里面还带来了一个额外的好处,就是compaction的开销也随之降低的。因为L1到L3的meta 都在FLASH,可以大幅减少compact时meta更新带来的开销。

优化查找路径使用了级联的方法,简单说就是每一层的kv额外存储指向下一层的指针,其实就是类似skiplist的实现。通过级联的方法,当查询一个key的时候可以缩小每次二分查找的边界。查询Ln层的时候,先找到这个key的上下边界,如果Ln不满足,则根据上下边界直接定位到Ln+1 的上下边界,而无需对整个Ln+1进行二分查找。

级联需要额外的8字节指针开销,由于最后一层不需要存储级联指针,因此总共增加的级联指针开销为, FLASH 依然是够用的。 不过这里有一个问题论文里没说清楚,当Ln+1由于compaction更新以后,如何去更新Ln的级联指针,考虑到由于levellist都在FLASH中,这里去更新上层的级联指针的开销是可以接受的。

简单概括就是硬件加速,把计算逻辑offload到FPGA来实现硬件加速,达则堆积硬件。

gc优化包含meta segment的GC以及data segmetn的GC。

通过metapage的start从levelList中查询是否还有指针指向page,如果没有则直接回收,否则将数据迁移到空闲的page,然后修改levelList中的指针。由于上层的meta可以通过DRAM直接进行复制更新,因此开销是很低的

遍历需要回收的page逐条读取kv信息,根据key查询判断该数据是否还有效,如果失效了直接忽略,否则则需要对该value进行rewrite。对于rewrite,最简单的实现是参考wisckey,直接更新meta 中的value指针,如果meta segment是保存在DRAM中的那没有任何问题,但是如果meta page是在FLASH中的,由于越底层的数据都是旧数据,因此一个data segment的数据在meta 中往往很离散,这时更新meta的指针会带来meta segment的写放大,为了避免这个问题,pink对于存在FLASH的meta segment使用了延时更新,compact的时候直接把kv写入到L0进行覆盖,对于该kv由于读取是从上往下的,因此读取流程不会存在任何问题,metasegment的数据则可以等待meta指针失效的时候进行删除。

新硬件探索,硬件加速是今后存储发展的一个重要方向,同时随着新硬件的出现,现有的数据结构可能并不适合新硬件的的特性。从HDD 到SDD再到NVMe,硬盘性能不断升级,业界也针对SSD做了大量的存储优化。英特尔最新推出的PMEM则对存储又是一次大的革新,对于PMEM现在的文件系统其实已经不太合适了,因此也有针对该方面的优化 Rethinking File Mapping for Persistent Memory 。至于KVSSD,在该几篇论文后目前则又有了一些新的进展,NVMe 规范已经将KVSSD的指令集规范为NVMe-KV 指令集,因此KV-NVMe应该也不远了。

Reference:

Rethinking File Mapping for Persistent Memory SpanDB: A Fast, Cost-Effective LSM-tree Based KV Store on Hybrid Storage Towards Building a High-Performance, Scale-In Key-Value Storage System PinK: High-speed In-storage Key-value Store with Bounded Tails

201 评论

78952146984里

目前已知的常用缓存替换算法有:随机法、先入先出法FIFO、 最近最少使用法LRU 、最不经常使用法LFU等。缓存替换算法有很多种,FIFO是最简单的,LRU是最常用的,最优缓存替换算法则是命中率最佳的。因为我们无法预知数据的未来访问模式,通常最优替换算法是无法实现的。 LRU是最常用的缓存替换算法,当前的很多论文,甚至顶会论文都是基于LRU算法进行缓存替换算法的改进。作为最通用的替换策略,LRU算法适合具有良好时间局部性的负载,能较好的适应程序负载的动态变化。LRU算法利用历史信息预测数据的使用情况,将最久没有使用的块替换,良好的反映程序的局部性。

329 评论

相关问答

  • 对缓解女性痛经的护理研究论文

    痛经是因人而异的,有些人天生就不疼,有些人是后天保养不好,着了凉才开始疼的。我用的是金百合痛经 贴贴好的。我就是先天性的痛经,特别痛苦,来了之后就下不了床了,不

    噗噗小维尼winnie 5人参与回答 2023-12-12
  • 目标检测论文及解读汇总

    有一个月没更博客了,捂脸 o( ̄= ̄)d 端午回家休息了几天,6月要加油~ 回到正文,HOG是很经典的一种图像特征提取方法,尤其是在行人识别领域被应用的很多。虽

    WZYHJM1021 3人参与回答 2023-12-06
  • 新生入园焦虑的缓解对策研究论文

    学前教育论文范文:幼儿园新生入园焦虑的成因及对策 无论在学习或是工作中,许多人都有过写论文的经历,对论文都不陌生吧,借助论文可以有效提高我们的写作水平。相信写论

    gell墨脱 3人参与回答 2023-12-06
  • 解读研究论文

    在一项新的研究中,来自美国普林斯顿大学的研究人员惊奇地发现,他们以为是对癌症如何在体内扩散---癌症转移---的直接调查却发现了液-液相分离的证据:这个生物学研

    Ares填词人 4人参与回答 2023-12-10
  • 汇编浅析高考研究论文的解释

    文献汇编其实就是大家为学习、研究方便对某一类文献进行汇总、编辑成册。

    tomoyasaki 3人参与回答 2023-12-11