我现在工作就是做SSD(flash)控制芯片。不过是企业级的,但应该和终端级的在原理上差别不会太大。
首先通道数对写性能影响很大,一般有4/8/16 channels,如果是相同的flash颗粒和相同的控制芯片,通道数就决定了写性能的上限,写性能上限与通道数基本成正比。但是,这仅仅是理想情况。
另外,假如两者所用flash颗粒不同,如SLC,MLC,TLC,读写性能当然会有差异,价格也差异明显。
即使是同一块flash和同一颗控制芯片,在不同使用情况下,写性能差异也很大。这是因为flash是需要擦除的,即写过数据的地方想要二次写,是需要先进行擦除才能二次写;并且,写和擦的最小单位是不同的。以服务器所用的SSD为例,写是以page单位写的,page的大小一般在0.5~16 kbytes;而擦是以block来擦,block的大小一般在1024~8192个page之间。实际设计中,控制芯片一般更是将大概16~512个block捆绑为raid block,作为一组,一起拿来用于写和擦。
在使用过程中,随着用户的不同操作,没写过的raid block依次被逐渐写入数据;而已经写过的raid block里面,有的数据变为无效。最后,没写过的raid block越来越少,写过的raid block里有效的数据也越来越少,假如继续写下去而不进行其他操作,所有的raid block将被写完,假设没有一个写过的raid block中的数据全变无效,那么盘就被写死了,因为擦任意一个raid block 都会擦到有效数据造成数据丢失。这就需要gc(garbage collection)。
gc一般将会在剩余未写的raid block不多时启动,它会将所剩有效数据最少得raid block中的所有有效数据读出来重新写,这样一来该raid block就可以拿去被擦了,擦完之后就重新变成未写的raid block作为备用。通过gc,就可以保持整个盘可以一直被往复写。但问题是,gc的读写会占用flash的读写带宽,并且为了防止gc太慢赶不上用户写数据的速度而导致盘被写死,控制芯片在进入gc阶段时会限制用户的写入速度,并且剩余raid block越少,将用户写入速度限制得越低,gc则被允许更大速率的读写以产生足够多新的未写的raid block。所以,SSD使用时不要写太满,并不是因为上面
@北极所提到的平衡磨损,而是因为gc。
因此在不清楚题主所提到的写入速度测试的flash的存储情况的条件下,不能断定32g比256g写速率慢这么多。当然,256g很可能通道数要比32g的多,写性能的上限本来就比32g的高。
所以,要比较两者真实写性能的差异,最好在两者都空盘的情况下测试,并且测试所用的写入数据也不能大到使32g盘进gc。
1. 麻烦仔细看视频42MB/s和341MB/s都是写速度,不是读速度,读速度一个是600+另一个是800+,差距没那么大:
2. iPhone7的32G和其它版本用的Flash不一样,好像一个是MLC一个是TLC,主控的设计不同可能会影响测试结果。
3. 因为不知道他的测试参数,目测可能是持续写128M数据,对于256G的iPhone7来说,这点数据可能还没填满缓存,而另一个很有可能已经满了,做设备performance测试的一个原则就是要填满缓存,否则测试没意义。换句话说,如果256G版本的iPhone写的数据足够大,可能看着也没那么好看。
4. 注意视频开头有提到两个设备剩余空间不一样,一个剩余200多G,另一个只有一半的样子。闪存类的存储设备,剩余空间比较少的时候,可能会触发回收机制,性能有可能急剧下降。从视频中看,手机都是装了一些东西了,肯定用了一段时间,所以不好说过去写了多少数据。
5. 不同容量的存储器,通道数是不同的,通道越多,并发效果越好,自然速度就快一些,已知的是256G的通道数肯定大于32G。
我的结论是:肯定有差别,但不代表差别就一定是实情(注:同样的设备,不同的测试方案能得到很多不同的结果),设备本身强大与否,与所在的整个系统的方案有很大关联。
要说这个视频有没有意义,我觉得也有意义,至少说明在实际使用中32G的确实不尽人意,至于是不是苹果故意阉割,那还不好说。
至于后面那个复制4.2G数据的东西,可能是因为lightning线接到USB2.0口上的原因,没有参考价值。
还有,如果拿这个跟华为P10去比就比错地方了,flash持续写性能,不管是什么设备都好不到哪去,P10的问题是在读上面的巨大差异。截图就可以看出来苹果不同设备的读性能差距没那么大,还有,华为洗地的水平太差,不说别的,就性能测试这块,我手头同样的一个华为手机、同样的一个软件,就能跑出好几种结果,真要洗地麻烦提高点知识水平好不?