口袋数码E族

作者: 孑影吟风
查看: 2666|回复: 0

魅族 MX3 深入拆解第二集:科学向

[复制链接]
孑影吟风 发表于 2015-5-1 10:58 | 显示全部楼层 |阅读模式
查看: 2666|回复: 0
  
  之前带来 第一集温柔向 第二集丧心病狂向 今天是接着带来上一集中的科学解释,博客图片挂了我都没有重新整理,开门见衫是美德,楼主决定直奔主题。这一集属于科学向分析,会拆成几个帖子发目前不确定,要看感觉,当然一篇肯定是不可能的。本来做了详细的计划,第几篇写啥,但是到头来还是觉得想到哪儿写到哪儿吧……说不废话的还是废话了这么多。
  之前带来 第一集温柔向 第二集丧心病狂向 今天是接着带来上一集中的科学解释,博客图片挂了我都没有重新整理,开门见衫是美德,楼主决定直奔主题。这一集属于科学向分析,会拆成几个帖子发目前不确定,要看感觉,当然一篇肯定是不可能的。本来做了详细的计划,第几篇写啥,但是到头来还是觉得想到哪儿写到哪儿吧……说不废话的还是废话了这么多。
  一、真八核 VS 双四核?
  相信通过三星和MTK的口水仗各位显然已经知道了所谓的真八核和双四核。目前为止,采用EXYNOS 5410的手机,包括Galaxy S4和MX3都没有开启八核工作模式,这是无可辩驳的事实。但是奇怪的是MZ从MX3一发布起就声称自己采用的是智能八核处理器,毫无避讳的在只能同时开启四核的时候说出了有争议的八核,这在当时看来是一个营销上的疑问。
  然而没过多久,三星发布新闻称将在年底(已经到了)给Exynos 5 Octa处理器带来一次软件升级,打开所谓的异构多核心模式,让Exynos 5 Octa实现八核全开,变身真・八核处理器,而MZ在第一时间,也是唯一一个,对于自家产品将要支持此技术作出了宣称――虽然不一定是保证。
  但是还没来得及让人开心,又传来了一种说法:那就是三星所谓的Exynos 5 Octa仅针对新出的5420,HMP模式并不支持5410,而且5410由于某些硬件上的缺陷,实际上是无法开启HMP模式的,而MZ的宣称就成了悬而未决的疑案:到底是谁搞错了?由于三星一直对此语焉不详,因此这个事情到今天都没有完全得到确认(虽然后期的文档中开始越来越明确的指明5420,但是三星至今都没有承认这样的功能仅限5420)。
  相信很多人会觉得奇怪,为什么看起来如此正常的处理器会因为硬件问题而无法支持八核全开?对此楼主也进行了一些研究,问题大致有了一种说法。由于不论是Cortex A15还是Cortex A7,或者是未来的Cortex A12甚至A53、A57,ARM的一个SMP组,包括处理器、中断控制器、二级缓存等等的所谓Cluster里最多也只能容纳四个核心,因此如果系统要容纳超过四个核心的话,那就必须有两个SMP Cluster以上,它们各自拥有独立的缓存和中断控制器。
  我们都知道,缓存是内存的映射,缓存里的数据要做到和内存绝对一致,至少可以唯一确定到底谁是有效的。而在操作系统看来,几乎所有任务的时间片都可以随意的在任何一个处理器里执行,那么对于多处理器系统而言,除去保证缓存和内存一致以外,还需要保证每一个核心所附带的缓存也是一致的,否则在某些情况下系统就会出错,这就是所谓的同步,也叫一致性维持。
  对于一个Cluster内的四个核心而言,由于有着同样一套SCU和L2C,并且共享一套缓存,所以一致性是有保证的,但是现在核心数量超过了四个,系统里必须有两个Cluster,它们之间的就产生了额外的缓存一致性需求(当然还有中断等等其他资源的共享)。在ARM的设计中,负责维持这个需求的是CCI-400,目前最大的怀疑就在它上面。
  根据XDA论坛(国外那个,不是国内的冒牌货)上的一种说法,Exynos 5410的CCI-400有不可修复的bug,因此在实际产品中是不工作的,由于这样一个问题,如果系统同时启用两个Cluster,它们之间将无法维持缓存一致,自然也就无法共同工作。否则不同处理器读取到的同一个内存地址的数据不同,系统不崩溃就怪了。当然,如果抛弃所有的缓存,这八个处理器还是可以同时工作的,但是那样就得不偿失了――八核的目的是为了快,而不是慢。另外一个网站,SAMMOBILE针对这个问题写了一篇很长的文章,进一步阐述了这个问题:由于CCI-400存在问题,这个部件在Exynos 5410里甚至根本没有供电。因此事实上它是不存在的。Exynos 5410前后经过了六次流片,最终依然让这个bug成为了漏网之鱼,所以三星才这么急急忙忙的出了Exynos 5420,终于用上了修复版的CCI400――显然,MTK也是,这也是MTK可以嘲笑三星的资本。
  只是……三星否认了这一点。
  所以事情就成了一个奇怪的循环:XDA说5410无法开启八核模式,对此MTK的嘲讽可以看作证据,而且三星也没反驳;三星自己出了新型号5420,大肆宣传支持HMP,对5410不置可否;MZ又表示MX3支持HMP。这里面充满了矛盾,这意味着必然有人说谎了,那是谁呢?XDA上的人倾向于认为MZ根本不知道自己在说什么,楼主认为问题应该没有这么简单。
  因为只需要一个假设,就可以圆满解决所有的问题:Exynos 5410有两个版本。注意,从这里开始,都是楼主YY的,不要作为证据,我也不对说法的正确性负责任。
  假设楼主这个猜测是真的,那么一切就好解释了:早期的Exynos 5410的确有CCI-400的bug,因此无法开启HMP模式,而三星由于需要赶时间发布Galaxy S4,因此决定无视这个问题,以双四核的模式将产品推向市场――毕竟等到HMP调度器软件就绪的时候Galaxy S5也要上市了,这的确不是什么大问题。而在这之后,三星在设计完毕Exynos 5420时,也做出了一个修订版的Exynos 5410B,解决了CCI400的bug,MX3因为发布够晚所以买到的是这个版本,才敢于宣称自己是八核处理器。
  这个只有一个难以解释的地方,那就是为什么三星还要出这个修订版,理由只可能是,CCI400的这个bug非常小,小到六次流片都没有发现,就像当年Intel主板南桥的一个晶体管引发的惨案一样,因此修复也很简单,于是顺手修复了。
  OK,到了这里,至少楼主YY出了一个理论,虽然看起来荒诞,但是毕竟可以自圆其说,剩下的事情就是找证据了。毕竟三星的确有着出一半改型号的“光荣传统”――还记得M9上的S5PC110与S5PC111之争么?现在来看,S5PC111相比S5PC110在同样性能下功耗要低得多,也许也是因为S5PC110内部有一些没有公开的问题,或者是S5PC111做了大幅度的优化,才会有如此大的差异。当然,任何改动都不会不留下痕迹,就如同S5PC110和S5PC111两只蜂鸟,楼主在寻找的时候也发现了一些不知道能不能算作证据的区别。这些区别很小,也没有多少说服力,但是具体的判断,各人都可以有各人的想法。
  如果是像上一代一样,编号改了,那么自然是皆大欢喜,可问题麻烦在三星没有修改型号。只是即便型号不修改,在芯片表面的封装上应该也能看出蛛丝马迹,对比一下,果然略有区别。
  

  这是MX3的处理器。第一行GZE2708H是类似于序列号的东西,内存的;1322是生产日期编码,13年第22周制造。下面的K3QF2F200C代表内存规格,32bit LPDDR3,双通道,每通道1GB,后面的XGCE代表速度标定,意味着等效1600MHz。
  中间是LOGO,不管了,再往下则是CPU部分的编号。5410代表着Exynos 5410,没什么好说的,ARM也不用多说。BEB应该是频率标记或者版本标记,在之前的Exynos 4系列上也能看到,1.2GHz的4210编号为BAB,1.4GHz的是ABB。下面N5WA7Q11是类似于核心序列号的东西,最后的1322是核心生产日期,也是13年第22周。
  再来看看Galaxy S4的。
  

  根据上面的编号规则,可以看出GS4用的5410,内存制造于12年49周,核心制造于13年1周。型号同样是5410,频率标记也是BEB,但是BEB右边GS4是一个点,而在MX3上则是一个W。
  处理器表面编号是有明确含义的,不会乱打数字,楼主找了很多张GS4的处理器照片,发现在BEB的右侧均为一个点,没有看到是W的。这意味着什么,楼主不知道,但这也许代表了一些区别。
  除了表面文字的差异,在发热量上两台机器也有巨大的差异。如果单从散热角度来看,MX3的散热设计并不比GS4高明到哪儿去,也没有见到特殊的设计――对于散热设计的分析会放在后续篇幅介绍――但是不论是CPU满负荷压力测试还是正常使用测试,MX3的机身温度都要明显低于GS4,而且在同样的温度下,也可以工作更久的时间不降频:GS4满负荷工作10秒,核心温度就会突破93度而切换到A7,但MX3在达到93度之前可以工作长达一分半的时间。这种发热之间的差异与当年S5PC110和S5PC111非常类似,相信这进一步暗示了两颗处理器可能是有区别的。
  最后一点是视频解码,GS4不支持4K硬解众人皆知,但是同样使用5410的MX3却可以,这不禁让人又想到当年的两只蜂鸟:C110支持1080p硬解,而C111只支持到720p。
  到这里,楼主找到了三个方面的差异,虽然不足以证明这两个5410的确是两颗不同的5410,但是也提供了一些可以用来做谈资的对比。是不是三星真的有两个版本的Exynos 5410?是不是MX3因为用的是新版5410才可以打开HMP?楼主写到这里其实也没有得到任何结论,还是让我们等着MZ兑现HMP升级诺言的时候再看吧。
  二、更深入的了解Sensor Hub
  Sensor Hub在上一集拆机里已经看到了真身,本质上是一个小单片机。那么这个东西为什么能省电?又是怎么工作的?可以干什么,又不可以干什么呢?这里来做进一步的分析。
  首先来看一看Sensor Hub的物理规格。这颗芯片是一枚AVR单片机,使用的是AVR32内核,32bit AVR指令集。片内包含16KB的内存、128KB的闪存,以及较为丰富的接口,最大工作频率可以到50MHz。
  也许你要说,这啥破烂?16K内存?50MHz?但是其实放在嵌入式领域来看,这样的性能已经非常不错了。苹果的M7处理器,其实也就是一个Cortex M3内核的ARM,性能和AVR32内核差不多,最大频率150MHz,其实也没多多少。为什么选择这么低的,是因为其实这类协处理器并不需要承担复杂的计算任务,它更多的只是一个数据收集者。也许M7这个名字还不太具有说明性,但是Sensor Hub则非常明确的告诉了你这个东西的用途:读取Sensor数据。
  让我们回到问题的本源:为什么现在手机要加入这样一个协处理器?原因很简单,因为现在手机内部传感器消耗的电流越来越低,已经低到可以忽略的地步。比如说加速度感应器,早期加速度感应器的工作电流是mA级别的,但是现代的加速度传感器的最大速度工作模式下,需要消耗的电流也只有区区400uA――也就是0.4mA。要知道即便在最低功耗的待机模式下,手机的电流消耗也是5mA级别的,因此只要做适当的功耗处理,额外增加一个永远打开的加速度传感器,也只会多消耗不到0.1mA的电流,这点开销是足以忽略的,也就是说,目前的智能手机已经可以做到只要开机,就永远持续感应本机加速度。
  其他传感器也是一样。不论是GPS、地磁计、触屏控制器还是陀螺仪,一代一代的传感器消耗的功率都在不断下降。这就让手机具备了实时检测更多所谓的环境状态信息的可能性,也就是说,不管手机是在工作还是在待机,连续读取诸如加速度、指向、坐标、温度、气压、磁场等环境数据的传感器所消耗的能量成本接近为0。这可以带来广阔的应用前景,那么问题就来了,负责读取它们的消耗呢?
  传统的手机CPU内核在进入深度待机模式的时候其实是完全不工作的,甚至连核心供电都会被切断。因此传统上直接靠CPU来读取传感器数据的设计下,深度待机的时候,手机的主CPU无法读取传感器。否则系统就永远都无法进入深度待机,续航自然也是会完蛋的。Sensor Hub的意义就在于,用这一枚超低性能、超低功耗的嵌入式单片机,为给手机提供一个完整的、监控所有外围传感器并且可以进行初级数据加工的解决方案。让主CPU可以随时随地进入休眠状态,保持外围传感器开启,让Sensor Hub接管它们,然后在需要主处理器介入的时候将其唤醒。
  那么作为Sensor Hub的AVR单片机功耗多大呢?根据数据表可知,它每MHz消耗的电流仅需300uA,也就是说,2MHz的频率,只需要用掉600uA,也就是0.6mA的电流。这样的开销是足以接受的,性能也是可以接受的,而且我们有理由认为,虽然苹果的M7最大频率可以工作到150MHz,但实际上苹果也不会工作在这个频率,因为这是有违M7设计初衷的。
  结合具体的例子可以更好的理解Sensor Hub的工作方式,最好的例子自然就是MX2和MX3那个可以唤醒系统的触摸Home键。传统电容触屏手机的Home键都是依靠触屏主控制器读取的,它们实际上是触屏在屏幕外的延伸。因此一旦休眠待机,系统关闭了触摸屏以后,它们也就跟着失灵了。很明显,为了一个按键打开整个触屏在功耗上是不合理的,所以除了极少数手机以外,大部分手机的触摸屏在休眠时都是无相应的。
  而MX2上,MZ用了一个单独的控制器,负责实时读取这个HOME键的状态,只要检测到了双击行为,就会唤醒主处理器,因此可以实现触摸唤醒。当然这个控制器在MX3上升级成了Sensor Hub,从主管Home键变成了统领所有传感器。因此在MX3上,待机时可以监控的数据更多了:持续开启的加速度传感器,可以实现摇一摇唤醒;持续开启的麦克风,可以实现语音唤醒;持续的读取加速度传感器的数据,持续连接的蓝牙和Wifi,甚至可以在系统休眠时继续某些类型的工作――例如读取蓝牙外设、计步器、收发Email等等等,这也是苹果M7主要宣传的功能。还记得M9上开启呼吸灯会耗电么?那就是因为M9的呼吸灯是由CPU控制的,而MX3靠的是Sensor Hub,自然也就不存在这个问题。
  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|口袋数码E族 ( 豫ICP备15004038号-2 )

GMT+8, 2024-4-29 14:42 , Processed in 0.052351 second(s), 22 queries .