说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

粉碎硬件复杂论:开发者不懂硬件运行的方式怎么可以?!

HTML文档下载 WORD文档下载 PDF文档下载
对比理解像Hibernate这样复杂的框架,弄清程序赖以运行的硬件工作模式实在是太简单了。单一的去追求编程的技巧而不去弄清硬件的工作方式,无异于舍本逐末!

精彩的算法,优秀的编程技巧一直广受开发者的喜爱。然而开发者不懂系统赖以运行的硬件工作方式怎么可以?基于业内一直充斥着新型硬件已经复杂到难以理解的流言,高性能计算专家Martin Thompson发表了主题为《Mythbusting Modern Hardware to Gain "Mechanical Sympathy"》的演讲。他认为如果你可以理解像Hibernate这样复杂的框架,去弄清程序赖以运行的硬件工作模式实在是太简单了。

以下为译文:

Martin Thompson是位高性能计算专家,一直从事帮助开发者弄清新型计算系统的内部构造。他在Cache、Buffer、Memory Controller、Processor Architectures、Cache line等领域发表过多次讲话和教程。

Thompson认为当下开发者在系统运行的理解上并没有投入应有的精力,大家往往被有趣的和时尚的技术所吸引。他还认为与其传授开发者编程策略,何不让其具备自己发掘的能力。他认为当下的形势非常诡异:程序员花很多的时间去理解像Hibernate这样复杂的框架,而不是花很少一点努力去弄清程序赖以运行的硬件是如何工作的。

点击查看视频(YouTube)

“通过实践观察,而不是盲目发言”一直是Martin倡导的思想之一,所以给自己的演讲《Mythbusting Modern Hardware to Gain "Mechanical Sympathy"》选择一个MythBuster(流言终结者)的角色并不奇怪。在演讲中Martin抨击了“新型硬件复杂度已经让普通开发者无法理解”这个论调,并从CPU、内存、网络、存储I/O等多个方面剖析了新型硬件架构。期间他阐述了赛车手Jackie Stewart提出的"Mechanical Sympathy"这个术语:赛车手想获得更好的成绩,那么必须对汽车的运作有一个很好的了解,驾驶员必须与赛车配合的足够默契才能获得赛车的最佳性能。Martin将这个观点延伸到了开发领域,认为开发者需要清楚硬件的工作模式,才能更好的奴驾基础设施性能。如果你可以搞清楚Hibernate,就可以搞清楚任何事情。

讲话中最精彩的部分就是有些我们一直认为做随机访问的设备,比如内存、硬盘、SSD在特定的情况下会转换成串行设备。比如说磁盘,其实就是一个又大又快的磁带,其实它并不是真正意义上的随机访问。

流言1:CPU并没有变的更快

  • 根本原因在于CPU不能更加赖热,而不是不能变快。我们让CPU计算的更快,他们就会变的更热,并且这种局部散热是非常困难的。
  • 时钟速度不代表一切。举个例子,给Alice和Wonderland两个文档做word split,Intel Core 2 Duo,2008,2.40GHz处理器可以达到每秒1434次操作。Intel Core,2011,2.20GHz处理器可以达到每秒2674次操作;我们看到虽然时钟速度变慢了,但是速度几乎是提升了两倍,并且这个趋势在继续发展。
  • 取代继续变快,Sandy/Ivy Bridge平台的CPU内部使用了并行处理。比如使用3 ALU及6 Port的CPU用来加载和存储数据,我们就需要更多的Port来供给ALU,这样就可以达到每个周期并行处理6条指令的效果。

  • 当然这里还存在多分支和多步解决的问题。多分枝或者拥有除法的代码肯定没有使用简单连接词“+、-、*”来的快。

  • CPU拥有计数器,这样一来,我们就可以更直观的观察其性能。在Linux上使用pref stat访问计数器。

  1. 在Alice和Wonderland测试中使用Nehalem 2.8GHz运行pref stat,我们发现CPU空闲时间将达到1/3,这样的话更快的CPU其实并没有什么帮助。
  2. 而当使用Sandy Bridge 2.4GHz时,CPU的空闲时间也达到了1/4。实验证明快不在时钟速度上,而在指令被传送到CPU的速度。

流言2:内存提供的是随机读取

1. 这个问题我们考虑的根本其实是成本问题。因为主储存器非常昂贵,我们又想尽可能快的给CPU传送指令。那么我们该如何做?我们需要让数据尽可能的靠近CPU,然而新时代的寄存器到寄存器复制模式将没有任何开销,因为这里做的是重映射,甚至没有任何移动。

2. 缓存层。缓存是越大越缓慢,所以这是速度与成本的对抗,但是功率同样很重要。访问磁盘的功率永远要比访问L1缓存大得多。新型处理器已经着手将数据从网卡直接传输到缓存,这样跳过了内存,通过不涉及CPU来降低温度。

3. 在内存访问排序、缓存结构以及连贯性上有很多细节可谈。重点是内存的不同层以及CPU之间有非常复杂的环路。如果你不可以让内存的子系统、缓存、存储器总线足够的快,就无法足够快的给CPU传输数据,这也是CPU无法变快的原因。

4. 这就意味着软件必须以一个非常友好的方式访问内存,否则将会出现CPU饥饿的状况。在Sandy Bridge平台下了连续遍历内存需要在L1上花费3 clocks,L2上花费11 clocks,L3上花费14 clocks以及内存上的6ns。页内随机则分别是3 clocks,11 clocks,18 clocks以及22ns。全随机存储访问则是3 clocks,11 clocks,38 clocks以及65.8 ns。

5. 这是高效的内存连续遍历时间,所以我们如何访问内存将是非常、非常的重要。

6. 编写多分支代码将造成更多的指令丢失,因为这里有太多的数据需要跟踪。

7. 鉴于你不可能连续的遍历内存,你需要降低耦合以及增加连贯性好的耦合,良好的连贯性可以让这些变得非常高效。如果你的代码存在太多分支,并且都是运行在堆上,那么运行的速度将会相当的缓慢。

流言3:HDD提供的随机访问

  • 在磁盘内圈和外圈写入时性能有着很大的区别,更多的扇区被分布在磁盘的外圈,这样可以得到非常高的密度。将更多的扇区放到外圈,从而获得更高的密度。对于旋转的磁盘来说,这样可以获得更高的吞吐量。
  • 在1万转的磁盘上,外圈的连续读取速度可以达到220MB/S,而内圈的只可以达到140MB/S。
  • 最快的磁盘转速只有1.5万,并且已在这个数字上停滞好多年了。
  • 当光头移动到某个扇区时,磁盘会对这个扇区上数据进行预读取及重排序。为了能获取更多的数据,当下磁盘一个扇区的大小为4K,也就是说你在磁盘上写入或者读取1字节的数据,整个工作量会达到4K。
  • 操作由什么组成:

  1. 指令处理——亚秒
  2. 寻道时间——服务器0-6毫秒,笔记本0-15毫秒
  3. 旋转延迟——对于一个1万转的硬盘,旋转一圈需要6ms的时间,那么平均的旋转时间大约为3ms。
  4. 数据传输——100-200MB/S

  • 随机访问一个4K的块,延时时间是10ms或者是100IOPS。随机吞吐量每秒不会超过1MB,非常智能的硬件也不会超过2MB。这样再说磁盘是随机访问显然不切实际,如果你看到一些异常的数据,那只能说这些数据并没有真正的使用磁盘。
  • 磁盘就是个非常大的磁带,显然不是真正意义上的随机访问。

流言4:SSD提供了随机访问

1. SSD里一个块通常的大小为2MB,由大量的单元组成。SLC(Single Level Cell)——单层单元,每个单元可以存储1个字节(1、0)。MLC(Multiple Level Cell)——每个单元可以存储2或3个字节。

2. 单个单元的操作开销是巨大的,所以你可以针对行进行操作。这里被称为页,一页的大小通常为4K或者8K。以页的大小进行读或者写是相当快的,因为这里通常没有移动的过程。

3. 删除最小单位是块。SSD工作的方式是针对每个单元进行写入,当你向某个单元中写入数据并删除旧字节时,会发生这样的情况:删除一个字节是容易的,因为只需要关闭这个单元,然而当你打开一个单元时,你必须要同时打开这个单元附近的单元,这样你就不可以准确的去操作某个单元,所以你必须同时删除整个块。介于SSD中每个块的写入和读取次数是有限的,并且你的要求并不是删除整个块,所以这里只是将这个字节标注为删除。总而言之,数据被标记为删除,然后向新的块写入数据。这是有开销的,同时介于每个块读写次数都有着上限,所以直到这块SSD彻底报废,需要不停的做垃圾回收及块压缩。

4. 举个例子,SSD的读写和可以达到200M/S。当你做删除时,其读性能依然能得到保证,但是写入的速度明显下降,这就是因为SSD的垃圾回收机制。如果某块SSD的写入性能下降太多,你就必须为其重新格式化,同样还存在小的写入引起一连串的复制事件。

5. SSD在连续和随机读取上有着相当不俗的表现,如果你只做append-only write的话,性能也会一直不错。

6. 4K随机读写,40KIOPS的情况下,平均操作次数将达到100-300ms,将花去长达半秒的垃圾回收时间。

7. 局部的异变可能会导致极低的性能。

原文链接: Busting 4 Modern Hardware Myths - Are Memory, HDDs, And SSDs Really Random Access?(编译/仲浩 审校/王旭东)

欢迎关注 @CSDN云计算微博,了解更多云信息。

用VB5.0编写自己的MP3播放器 用VB6.0编写电脑抽奖程序 用VB6的双通道技术获得影碟片断 用VBScript制作活动主页 用VB编写DirectX7.0游戏(下) 用VB编写FLASH动画播放器 用VB设计VCD播放器 用VB实现队列播放MP3 用VB实现屏幕滚屏保护效果 用VB制作下雪的特技景象 用VB自制屏幕保护程序 用Visual Basic实现多画面播放功能 雨滴式的显示图片 -VB资料 在VB5.0中制作多媒体界面 在VB5中将英文字母及阿拉伯数字旋转任意角度 在VB5中如何使机箱内的小喇叭发出不同的声音? 在VB6.0中播放GIF动画 在VB应用程序中恰当的使用声音 在VB应用软件中实现动画效果 在VB中播放AVI文件 在VB中建立司旋转的文本特效 在VB中如何创建闪烁(标语)屏 在VB中显示动画鼠标图标 在VB中用PictureClip控件实现动画 在Visual Basic 6.0中实现自动播放VCD VB怎样在VB中播放Flash动画。 VB制作TopMost窗口 VB制作带有动画和声音的屏幕保护程序 VB制作自己的MP3播放器 用VB实现鼠标的隐藏 0、""(空字串)、Null、Empty、与 Nothing 的区别 -VB资料 如何调用EXE或DLL程序,使被调用程序是调用程序的MDI中的一个子窗口? 《网络设计师教程》P103表5.2中 4B/5B码和4位2进制之间是怎么转换的? COM进程类组件中,在一个接口中加了一个方法,成员变量类型CString,可是不行,那该用什么? 请问那里有 motif toolkit 开发工具下载 一个mysql的问题! 出售软件源代码以及销售权! byte类型的数据如何转化成二进制数,显示给用户(如8-》0000 1000) 代征:精通vc的深圳朋友,精通网络通讯的开发和多媒体处理。 20分求助!这条警告是什么原因呀?怎么解决 ?LINK : warning LNK4089: all references to "SHELL32.dll" discarded by /OPT:REF 局域网的文件共享传输是基于什么协议的? windows and dos ??? 请问大家几个技术问题!!谁能回答阿!比较着急!:) 有没有代替VB里的PICTUREBOX 的控件,VB里的不好用?????????? 我是新手,请问JSP有些什么开发软件?比如JAVA用JBUILDER。。。 请问知道整型值a=97,什么函数可以得到"a"呢?即97->"a"通过什么函数呢? 如何将十进制数转换成二进制数 函数对象的简单问题 喜欢仙剑的朋友请进。:) 恭喜恭喜? 我想制作C++ Builder4工程的安装程序,不知道用什么软件,请大家帮忙。谢谢! 请问大家几个技术问题!!谁能回答阿! 我是ASP初学者,请求一个简单的问题,Help!!! 有没有关于installshield6的书, 快看呀!我真的要不行了! 请教大家一个术语吧! 低手问题,关于Form中的数据问题,谢了。 如何用PictureBox控件显示GIF图?特急!!!!!! 单文档多视(急!) 想学delphi中关于database方面的内容,不晓得哪本书好,大家推荐好吧? “CSDN准备推出海外图书邮购服务,首批是侯捷的著作和译作” 什么时候可以开始? 谁能介绍一下嵌入开发领域比较成熟的产品?他们的功能、性能如何 关于Autocad字体的问题 在 ActiveForm 中如何初始本地数据模块!菜鸟问题! (const char *)&p转化为delphi语言该是什么? ####我拼了命也要问出这个问题的答案########## 怎样才可以描述点击窗口右上角的“x”时所发生的事件,请给个例子,谢谢了! 哪儿有Install anywhere 4下载 庆祝kylix2001,终于知道叫什么好了,耶………… VB,请问set obj=new class 和 dim obj as new class的区别????????? install anywhere 4 哪儿有下载? GGMM,向我灌水..... 如何截获视频卡串送过来的图像。 高级程序员,在weblogic上做j2ee开发半年多,jsp一年左右,求职。 那里有PB的反编译工具? ~~~~~~大家注意了: wjyasd(即使用FPE改了钱,也绝不能忘记艰苦朴素的优良作风) 这个帐号…… 关于动态连接与静态连接的问题,送分了!!! Delphi6又多了那么多的控件。每个都要去研究么??? 哪里有RSA加密的delphi源代码下载呀? 一个WINDOWS编程的问题 bind sock return WSAENOTSOCK error! why... ...? 菜鸟问路: 一定送分 关于母爱和父爱的作文100字 读课文填表,遵循 瘦 字,看看作者是怎样把鲁迅先生的形象写具体的怎样的瘦\x05 观察位置、条件\x05怎样具体描写鲁迅先生的形象\x05 远、暗\x05\x05 走了出来\x05\x05 抽书、递书\x05\x05 面对面 \x0 赞美手指的作文 关于父爱母爱的作文 550--600字左右是的 根据六年级课文《千百年梦圆在今朝》一文填表.时间 事件 意义明代 人类首次火箭飞行失败 横着看,如时间 事件 意义,填问号处 我手指的这篇作文怎么写 关于父爱母爱的作文350个字左右 丰子恺 手指 这篇课文的中心 模仿手指的作文 找一篇500字左右的作文《我心中的爱》关于父爱,母爱的. 丰子恺《手指》的原文要原文! 文章《手指》 关于父爱或母爱的200字作文200字,一定是200字左右!不用多!用动作描写或外貌描写, 丰子恺的手指是什么文章属于什么类型的,比如记叙文之类的 手指 作文 关于父爱母爱的作文500字左右 有奖励哦最好带有侧面描写哦!我不想要重复的哦!百度上能收到的我不要的哦!。。。(*^__^*) 嘻嘻……谢谢大家! 模仿丰子恺的手指写文章急用!大哥大姐帮帮忙,好的给15分 六年级下册《手指》 课文解说,告诉我们了一个什么样的道理? 感动作文的结尾快 丰子恺手指 初读课文,说说本文写了一件什么事?文章开门见山先写 ,再写 ,最后阐明 . 课文 手指大拇指形状特点不美,作者是从--------,--------,--------,这三个方面进行描写的 《一件令我感动的事》作文结尾写汶川地震的事结尾怎么写今天要 《忆读书》主要内容 六年级下册第五课《手指》,五个手指的长处和短处及给我们的启示是什么?读了这篇课文,谈谈自己的体会! 感动的作文 结尾关于母爱 忆读书主要内容快, 手指 这篇课文中五个手指的性格是什么? 求一些关于父爱的作文的素材 去几个例子,别太复杂,很急,快 忆读书的主要内容 文章怎样概括主要内容? 求:关于写父爱的作文 800字 写父爱作文的素材有没有? 忆读书这篇课文的主要内容 要用简洁的语言概括选文的内容 父爱的作文700-800字亲身经历 有没有关于父爱和母爱的文章,诗,素材和事例之类的 用一句话来概括《忆读书》的主要内容还有好多 一,结合语境,体会下面句子中加点词语的表达效果其中有一幅画的是希金斯身穿(身穿是带点字),涉水过河,一首提(提字带点)灯笼,一手拿 关羽父爱的作文,800字 父爱 作文素材要你自身的,不要他人的.要新颖的,不要太俗的像关于生病被照顾的,下雨送伞的等等都不要 丰子恺的《手指》主要内容 写一篇有关父爱母爱的作文 800字的 如何理解课文的主要内容 丰子恺 手指 主要内容 求在父爱中成长的作文(800字) 用简单的语言把 丝绸之路 这篇课文的主要内容以及你的体会,感受写下来. 走遍天下书为侣的主要内容 关于感动的作文 800字 爸爸的花儿落了的整体感知与主要内容还有我们可以从哪些细节理解与深入课文的各方面 小学五年级语文3课走遍天下书为侣的主要内容是什么 感动作文800字 整体感知,根据课文内容默写.《爱莲说》既写了莲花的美丽,又歌颂了莲花_________的高尚品质《爱莲说》的中心句是:_________公园画展,观赏杜丹的人总比观赏其他花的人多,用《爱莲说》中的 《走遍天下书为侣》课文 以感动为话题的作文 800字 急要有叙事的内容 读《黄河之水天上来》这篇课文,给你感受最深刻的是什么内容?并写一写你从中体会到了什么? 走遍天下书为侣课文《走遍天下书为侣》课文 关于母爱或父爱作文150字左右 1、手指这篇文章采用了什么的表达方法,语言怎么样 2、照样子写句子 匆匆那篇课文__有__的时候 要3个 走遍天下书为侣这篇课文中表达的主要意思是什么? 我懂得了(母爱或父爱) 作文600字 读课文 填表 看不见的大力士段落 小标题 压缩空气的用途 原理 2 3 4 类似《手指》的作文在小学六年级的课文里有《手指》这篇文章,能帮我找一下类似他的文章吗?急用.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn