但作为一个计算机体系结构的研究生,在这些名词满天飞的时候,我的好奇心是抑制不住的,想一探这几样技术的究竟。本文不对某一特定事件进行点评,仅从技术角度分析对比一下这三种技术。就算是当做自己的技术储备+科普了。

首先,这三种技术都是属于闪存(Flash Memory)的不同种类,区别主要在于控制器,接口标准以及更底层的 Flash 芯片标准。它们在电脑/手机等系统中的主要作用是作为存储设备(storage)/文件系统。(注意它们虽然也叫memory,但和运存的 memory是完全两回事儿)

以前电脑系统中的主要的存储设备是机械式磁盘,访问速度慢,体积庞大,功耗高,而且对震动非常敏感,因此很难用于小型化的移动设备里。Flash Memory 出现后,由于没有移动部件,几乎完美解决了以上机械硬盘的各种问题,因此很快在各种移动设备中获得广泛应用。(当然,Flash的写操作和寿命的问题也比较复杂,但这不是本文的讨论重点) 而且基于Flash 的 SSD 硬盘性能普遍好于传统机械硬盘,因此也成为了PC/服务器的主流存储设备。

那么既然 SSD,eMMC,UFS 都是 Flash,它们的区别在哪呢?

想要了解它们的区别,首先要了解他们解决的问题。

SSD 主要作用是取代 PC/服务器 上的 HDD 硬盘,它需要:

  • 超大容量(百GB~TB级别)
  • 极高的并行性以提高性能
  • 对功耗,体积等要求并不敏感
  • 兼容已有接口技术 (SATA,PCI等)

而 eMMC 和 UFS主要都是针对移动设备发明的,它们需要:

  • 适当的容量
  • 适当的性能
  • 对功耗 ,体积的要求极其敏感
  • 仅需遵循一定的接口标准 (稍后解释)

为了直观感受一下区别,我刚才特意找来了一个 PCIe 的 SSD,如下图,上面黑色的芯片就是Flash:

我又拆了一个手机,它里面的 Flash 芯片是这样的(中间那个最大的黑色芯片):

看到区别了吗? (之前写的文章各种被人盗转,只好给图打码了,见谅)

一个SSD,为了达到高并行高性能的要求,有多个Flash 芯片,这样就可以在每个芯片上进行相互独立的读写操作,以并行性来提高硬盘吞吐量,还可以增加冗余备份。而手机中为了节省空间和功耗,通常只有一片密度较高的 Flash 芯片。

管理一个 Flash 芯片,和管理多个 Flash 芯片,策略肯定是不一样的,因此它们的控制器 (controller)就完全不同了。而且 PC 上需要兼容 SATA 或 PCIe 或 m2 接口,这样你电脑硬盘坏了的时候,可以拔下来换上另一块同样接口的硬盘能照样用。而手机上的 Flash 芯片大多是直接焊在主板上的,基本上不需要考虑更换的问题,所以只要遵从一个特定标准,能和CPU正常通讯就好了。因此接口的不同也是 SSD 和 eMMC,UFS 的重要区别之一。

好了,SSD 和 (eMMC, UFS)的区别说完了,下面说一下可能很多人会关心的 eMMC 和 UFS 的区别了。

eMMC 和 UFS 都是面向移动端 Flash 的标准,区别在于,二者的接口技术大相径庭。

eMMC 是一个起源较早的技术,全称叫 embedded MultiMedia Card,为什么单单e是小写呢? 因为先有的MMC啊。所谓MMC,大家可能没听过但可能见过,相机中用得较多,和SD卡长得很像(之前的图片就搞错了,感谢评论中各位的提醒)。

MMC前面加了个embedded,主要就是为了突出现在这个设备是embedded 在电路板上。eMMC 和 MMC一样,沿用了 8 bit 的并行接口。在传输速率不高的时代,这个接口够用了。但随着设备对接口的带宽要求越来越高,想把并行接口速率提高也越来越难。eMMC 的最新 5.1标准理论最高值最高可以达到400 MB/s,再往上提高频率也不是不行,但就未必划算了。

好在这几年接口串行化大潮轰轰烈烈。所谓接口串行化,简单来说就是工程师们发现:与其用一个比较宽的并行接口以较低的速率传输,用一个串行接口用非常高的速率传输似乎更划算一些(带宽,功率,成本各方面综合考虑)。所以这个时候 UFS 应运而生,用高速串行接口取代了并行接口,而且还是全双工的,也就是可以读写同时进行。所以相比 eMMC, UFS的理论性能提高不少,甚至可以达到一些SSD的水准。可以在下图直观感受一下,蓝色的是UFS,红色的是eMMC,当然是越高越好:

(图片引自[1] Micron 的文档)

最后,大家可能比较关心的一个问题:我设计好了一个使用UFS的系统,然后悲伤地发现没有UFS可以用了,那能不能直接换成eMMC呢?

答案是不行的,因为 UFS 和 eMMC 接口完全不兼容,控制器也不可通用。下面两个示意图分别是eMMC和UFS的接口(图片引自[2][3] JEDEC标准)。

即使是示意图,也能看出两者的明显差别。eMMC有两条总线,分别传输指令数据输入和输出,而且因为是并行总线还要有额外的data strobe。而UFS则是有两条差分的数据lane,指令和数据都是以packet的形式发送的。就更不要提二者的信号线的电气特性也有很大差别了。这些将直接导致控制侧(CPU那边)SoC 的控制器和电路设计会有很大不同。

所以一个系统的SoC以及电路板一定要经过重新设计,才能把 UFS 替换成 eMMC,这不是在生产线上换个 Flash 芯片那么简单的事儿,还得经过比较长时间的设计和测试才行。否则想要快速拿出替代方案的话,恐怕从一开始就要设计兼容两套方案了,嗯。

---------------------------------------------------

评论中有很多业内人士的讨论,我们大概可以得到以下新的结论:

一款SoC可以设计为兼容两种标准的。

相应地,电路板也可以用一套方案兼容两种标准,或者即使用两种不同方案,但成本都不高。

两套方案的软件驱动也不一样。

浅谈 SSD,eMMC,UFS(转自知乎)的更多相关文章

  1. 浅谈Linux中的信号处理机制(二)

    首先谢谢 @小尧弟 这位朋友对我昨天夜里写的一篇<浅谈Linux中的信号处理机制(一)>的指正,之前的题目我用的“浅析”一词,给人一种要剖析内核的感觉.本人自知功力不够,尚且不能对着Lin ...

  2. 浅谈五大Python Web框架

    转载:http://feilong.me/2011/01/talk-about-Python-web-framework 说到Web Framework,Ruby的世界Rails一统江湖,而Pytho ...

  3. [转]浅谈Python web框架

    说到web framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全列表见:http://wi ...

  4. 浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...

  5. (转)浅谈千万级PV/IP规模高性能高并发网站架构

    浅谈千万级PV/IP规模高性能高并发网站架构 原文:http://blog.51cto.com/oldboy/736710 文章架构简图:   高并发访问的核心原则其实就一句话“把所有的用户访问请求都 ...

  6. c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程

    c#Winform程序调用app.config文件配置数据库连接字符串 你新建winform项目的时候,会有一个app.config的配置文件,写在里面的<connectionStrings n ...

  7. 浅谈Python Web的五大框架

    说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界.各种micro-framework.framework不可胜数. 尽管还有一大脚本语言PHP也有 ...

  8. 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招

    朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...

  9. [转帖]浅谈响应式编程(Reactive Programming)

    浅谈响应式编程(Reactive Programming) https://www.jianshu.com/p/1765f658200a 例子写的非常好呢. 0.9312018.02.14 21:22 ...

随机推荐

  1. 在js代码中调用jsp的变量

    <% int coblid=Integer.parseInt(request.getParameter("blid")); %> <script> var ...

  2. Spark读取文件

    spark默认读取的是hdfs上的文件. 如果读取本地文件,则需要加file:///usr/local/spark/README.md. (测试时候发现,本地文件必须在spark的安装路径内部或者平行 ...

  3. C++类的实例化对象的大小之sizeof()

    之所以写这篇<C++类的实例化对象的大小之sizeof()>.是由于在參加笔试的时候遇到例如以下这么一道题,当时感觉就是这个一个坑,但.我还是义无反顾的跳了下去,由于存在知识点盲区啊.现, ...

  4. java list分组 list里面分装的都是对象 按照对象的属性来分组

    http://www.iteye.com/problems/86110 —————————————————————————————————————————————————————————— List& ...

  5. table获取checkbox是否选中的几种方法

    function test() { $(".table tbody tr").find("td:first input:checkbox").each(func ...

  6. MATLAB中常用的排列、组合、阶乘函数

    1.求n的阶乘,方法如下:a.factorial(n)b.gamma(n+1)c.v='n!'; vpa(v) 2.求组合(数),方法如下:a.combntns(x,m)    列举出从n个元素中取出 ...

  7. 关于Unity中的NGUI和UGUI

    一.用Unity开发2D游戏,有三套关系 1.GUI:Unity本身自带的GUI 2.NGUI:以前在Unity中广泛来做2D的,是第三方的包,需要安装 3.UGUI:Unity5.X后(其实是Uni ...

  8. 利用百度地图API根据地址查询经纬度

    传上来只是为了记录下三种jsonp方式,$.get(url, callback)方式不行,会出错 -- 必须指明返回类型为”json”才行. 或者使用$.getJSON()或者$.ajax({}). ...

  9. JAVA 多线程机制(一)

    PS:又开始忙叨JAVA了..前一阵子搞定了HTML+CSS,要开始写实验室的界面了,真没劲...博客到时候再更新吧! 先更新JAVA的吧... 多线程(一) 主要内容 1.JAVA中的线程 2.用T ...

  10. sdi 采集卡---环视频拼接直播方案

    http://www.upano.cn/# 360度无死角直播1080p 30fps http://search.jd.com/Search?keyword=sdi%E9%87%87%E9%9B%86 ...