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

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

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云计算微博,了解更多云信息。

不任性了!Google Play宣布开通国内开发者通道 脑洞大开!用Swift写个Material Design组件库 美国最大婚恋网站eHarmony利用Hadoop、OpenStack重构自己 每个Java开发者都应该知道的5个JDK工具 异构计算应用研讨暨OpenCL编程培训在上海和西安成功举行! APIs.io:用来发布和发现API的利器 偏爱MySQL,Nifty使用4个Web Server支撑5400万个用户网站 直接拿来用!十大Material Design开源项目 初探WatchKit,开发者必须知道的6件事! 【MDCC专访】环信CEO刘俊彦:音视频即时通讯将成为技术壁垒 第十七届全国工程建设计算机应用大会在京召开,AMD受邀详解GPU Computing! 哪一门开发语言薪水最高? 借助ArangoDB,带你玩转Google图算法引擎Pregel 【最具价值CTO评选秀】MediaV CTO胡宁:技术女神的自我奋斗 豌豆荚邓草原:如何实现实时响应式平台 必须谨记!Node.js安全开发技巧 聚焦新平台新应用 IBM 2014技术峰会上海站顺利落幕 《近匠》NAGA娜迦信息:移动安全加固定制化 棱镜、飞流、TalkingData三方解读:手游如何高效运营 【MDCC秀场】枕戈待旦——秉持移动开发大潮下的主角思想 Netflix的首席产品官Neil Hun谈推荐系统打造和AWS实践 微信开放WiFi接口,醉翁之意在乎O2O还是大数据? 软硬整合:基于云的微型智能防丢设备Linquet 【MDCC专访】AppCan CTO赵庆华:助力企业快速移动化 使用Bluemix中的Rules服务构建一个酒店预订应用程序 基于IBM Bluemix开发微信公共账号应用 用Cloudant在Bluemix上构建一个简单的文字游戏应用程序 IBM Bluemix是什么? 【最具价值CTO评选秀】纷享销客CTO刘晨:企业移动的技术挑战 【最具价值CTO评选秀】能做存储的超级计算机——任宇翔和以色列团队的创业故事 OpenStack Swift存储策略 在mdi表單中調用設為最大化的子表單時,它首先顯示小的子表單,然后才把它最大化,影響美觀,有何辦法解決? 关于在菜单中陷入文本框 20分求助有关SQL数据库的问题(为什么select...into语句无法执行) 哪有里Crystal Reports可以下载(无内容)? Where the 广东外贸外语学院 关于ODBC客户机端配置的问题 谁能给我一个delphi连接access数据库的实例,小弟万分感谢!!!!!!!!!!!!! 我机器里,98,2000装在C盘,XP装在D盘,现在我想只留下XP,不知道该怎么处理???????????????????????????? 如何实现5M以上的文件的上传 从windows进入unix Oracle 中文输入 是否onkeypress和onkeydown不能同时使用呀? Delphi 5下要做一个多 Y 轴的曲线图形,如何实现? 哪有xteamlindows下载?? 万分感谢!!!!! borland 会不会出一个 C# Builder? 乱码,头大了,不知道为什么pb导入excel怎么办 数据统计问题,请大侠门帮忙!急急急!!! 求解ZModem通讯协议源程序----有谁用过CZModemCore 我也不知道对不对! 最高级的问题?搞一个专业的VC程序员基地~~~~~~ 在研究directshow filter的push模式的兄弟请进 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了 有两个问题,每题40分,马上给分!!!! 如何使用打印机? 在爱情方面谁能做到这一点? 谁有 file cutter v1.4的注册码? 有急用! 搞一个专业的VC程序员基地~~~~~~谁愿意加入????? 最新发现:原来C++Bilder的项目文件(.bpr)是XML格式的! 关于FAT32和NTSF的问题 如何用VC实现Email的发送? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题;否则我快下岗了! 搞一个专业的VC程序员基地~~~~~~需要网页制作高手!! ADO 的用法 m_pRecordset->Fields->GetItem(index)->GetName() 关于CRichEditCtrl的问题之二,取的当前可见行数? 请问在哪里下载IMAIL SERVER???各位帮帮忙!!! 高手请回答,ADO和BDE到底有什么区别,你选择谁?为什么? 高分求教!!!!!!!!!!!!!!!!怎样得到局域网上所有的机器名?(普通WINDOWS网络,用VB?,好象用WNET API可以的) 如何安装com.ibm.bridge2java.*这个包阿? 有人吗???求救! 你也许也会遇到这样的问题? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题!!! 大虾看过来. 一个access表一万条记录,想转到Mysql下(Mysql在Linux下)用什么方法和什么语言来做好? rs.CursorLocation=aduseclient是什么东西? 800分+工资管理原代码,如何解决ActiveReports打印图片的一个很难题! 简单SQL,免费送分! 用ASP如何上传文件,可以用组件。 谁知道怎么改运行中的程序的托盘图标???我用SysTray.ocx不能改? 新手提问,简单题目,大量给分~~~~~~~~~~ 如何使用getdispatch(), 0.8吨等于几千克? 在比例尺为1:4000000的地图上A、B两地的距离是5厘米在比例尺为1;4000000的地图上A\、B两地距离5㎝同时从A、B两地相向开出一辆汽车每时行35㎞另一辆汽车每时行45㎞,找这样的速度,两辆车几时才 一根绳子第一次用去20%,第二次又用去余下的20%,两次相差8米,这根绳子原来的长是( )米. 0.01吨等于几千克快来帮帮我 KPa和KN怎么算 气压表上的《kpa》和Lb/in2什么意思,1个2个气压是多少 0.433吨等于几千克? KPa和KN的换算 有一根绳子,第一次剪去全长的20%,第二次比第一次少剪5米,这时还剩53米.这根绳要有解释和算式.谢谢啦! MPa 与 kPa 或 Pa 之间换算? KN换算吨 请教1千帕等于1千克每平方厘米吗?因为胎压表上标的是1kg/cm2,i汽车说明书上标的标准气压是前轮220kpa ,后轮250kpa.我查看胎压表的时候是以前轮2.2,后轮2.5 这种看法正确吗?胎压表外面的数值从0 用一段话写猫睡觉的样子! 填空 一根绳子第一次用去20%,第二次用余下的20%,两次相差2m.这根绳原来的长( )米.一根绳子第一次用去20%,第二次用余下的20%,两次相差2m.这根绳原来的长( )米. 在比例尺是1:6000000的地图上,量得A、B两地相距8厘米.甲,乙两车分别从A、B两地同时相对开出,经过4小时相遇.已知甲、乙两车的速度比是5:7,甲、乙两车每小时各行多少千米? 猫怎样睡作文 一根绳子第一次剪去全长的30%第二次剪去余下的20%剪了两次还剩下全长的百分之几 在比例尺是1比6000000的地图上,量得A、B两地相距8厘米.甲、乙两车分别从A、B两地同时相对开出,经过4小时相遇.已知甲、乙两车的速度比是5比7,甲、乙两车每小时各行多少千米?(用比例解) 配制药水9009千克,如果按1克药粉加8千克水来计算,共需要多少千克药粉? 一根绳子第一次用去了20%,第二次又用去了余下的20%,两次相差2米,这根绳原来的长是多少米? 在一幅比例尺是1:6000000的地图上,量得甲乙两地之间的距离是8厘米,甲乙两地相距多少千米? kPa是什么含义是压强,还是压力 一根绳子第一次用去20%.第二次用去25% 两次相差2米.这根绳原来长多少米 永宁乡有块4.5公顷耕地,种粮食作物、经济作物,油料作物的面积比是9:4:2.3种作物各种了多少公顷? 硬度衡量单位KPa,与压力单位kpa是相同的物理意义吗? 在比例尺为1比6000000的地图上,量得南京到北京的距离是15厘米,南京到北京的实际距离大约是多少千米?南京长江大桥全长6700米,如果画在比例尺是100000分之1的地图上,应画多少厘米? 绳量井深,三折余4尺,四折短1尺,绳有多长(只列方程) 在比例尺是1:4000000的地图上量得甲乙两地之间的距离为20厘米两列火车同时从甲乙两地相对开出,甲每小时行55千米,乙车每小时行45千米,几小时两车相距100千米? 在比例尺1:6000000的地图上,量出南京到北京的直线距离是15厘米.一架飞机以每小时900千米的速度飞往北京,几个小时可到达? 李叔叔家种粮食作物8分之3公顷中油料作物0.21公顷中经济作物5分之1公顷那种作物种植面积最大那种最大那种种植面积最小 在比例尺是1:4000000的地图上,量得甲、乙两地相距20厘米,实际多少米? K=A的纸箱耐破数据是35.86kgf 纸皮受力面积是50.0cm2,施压面积是3.0cm2 请问如何转换成 lbs/in2 如果我是要转换成kgf/cm2 是不是:35.86/3=11.95kgf/cm2 有两根绳子,第一根的长度是第二根的1.5倍,第一根比第二根长3.6米,第一根长多少米?列方程 1mm²与m²的换算单位 纸箱抗爆破力150LBS-200LBSLBS是什么意思? 请问 1BAR=多少 = 多少kg/cm2 mW/cm²怎么换算成W/m² K=K 纸箱耐破强度=150LBS/IN 是否标准太低 正确的耐破强度事多少? 我这..是头虱 还是 狗狗的虱子?我家养狗狗,它总是挠痒痒,我也没太在意,后来我觉得我全身都养,就像是有虫子,但是什么都看不到,躺下的时候能听到耳边有"皮皮"声,那天,一洗澡,关水后能看到 ψm与mm单位之间的换算关系 动物一生都要经历哪些时期 一只小狗的重量等于6只鸡的重量,3只鸡的重量等于4只鸡的重量.一只小狗的重量等于几只鸭的重量? 十斤铁和十公斤棉花哪个重? 动物的一生都要经历 等生长时期 某农场种植粮食作物和经济作物面积的比是3:2,一直种粮食作物252公顷,两种作物一共种了多少公顷 为这么压力传感器的标称值是psia,而psia是压强单位!我想知道传感器的测量范围这么求! 10斤棉花和10斤铁 哪个重 居然有人说一样重 棉花怎么可能比铁重 没常识 动物一生要经历过哪些变化?可以多选什么都行 畦是什么意思?是个单位吗 十斤棉花,和十斤铁那个要重? 不同动物的一生所经历的生命周期一样吗?急 第一次准备去海拔5000米的高原地区,都要注意哪些问题?三月中旬就出发,而且现在还有点感冒! 10斤棉花和10斤铁哪个重? 动物的一生都要经历( )、()、()、( )等生长时期.这些生长时期构成了动物的( )动物的一生都要经历( )、( )、( )、( )等生长时期.这些生长时期构成了动物的( ) 浪费掉人生三分之一时间的会是什么东西? 10公斤棉花和10斤铁哪个重?我就被难住了 5公斤等于多少毫升 在比例尺是4000000分之1的地图上,量的甲乙两地的距离是15cm,一辆汽车以每小时60千米的速度从甲乙两地开要几小时(用比例) 在比例尺是1:4000000的地图上,量得A,B两地的距离是20厘米.在比例尺是1:4000000的地图上,量得A,B两地的距离是20厘米.一辆汽车以每小时80千米的速度从A地到B地,几小时可以到达? 0.5公斤到底等于多少克啊
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn