存储芯片 emmc、Nand flash、Nor flash之间有什么区别
随着存储领域的发展,有很多不同的存储介质,今天ICMAX就带大家来分一分emmc、Nand flash、Nor flash之间的区别。
一、定义及区别
emmc:全称为embeded MultiMedia Card,是一种嵌入式非易失性存储器系统,由Nand flash和Nand flash控制器组成,以BGA方式封装在一款chip上。
Nand flash:一种存储数据介质;若要读取其中的数据,需要外接的主控电路。
Nor flash:也是一种存储介质;它的存储空间一般比较小,但它可以不用初始化,可以在其内部运行程序,一般在其存储一些初始化内存的固件代码。
这里主要重点讲的是emmc 和Nand flash 之间的区别,主要区别如下:
(1) 在组成结构上:emmc存储芯片简化了存储器的设计,将NAND Flash芯片和控制芯片以MCP技术封装在一起,省去零组件耗用电路板的面积,同时也让手机厂商或是计算机厂商在设计新产品时的便利性大大提高。而NAND Flash仅仅只是一块存储设备,若要进行数据传输的话,只能通过主机端的控制器来进行操作,两者的结构图如下:
(2) 在功能上:eMMC则在其内部集成了 Flash Controller,包括了协议、擦写均衡、坏块管理、ECC校验、电源管理、时钟管理、数据存取等功能。相比于直接将NAND Flash接入到Host 端,eMMC屏蔽了 NAND Flash 的物理特性,可以减少 Host 端软件的复杂度,让 Host 端专注于上层业务,省去对 NAND Flash 进行特殊的处理。同时,eMMC通过使用Cache、Memory Array 等技术,在读写性能上也比 NAND Flash要好很多。而NAND Flash 是直接接入 Host 端的,Host 端通常需要有 NAND Flash Translation Layer,即 NFTL 或者 NAND Flash 文件系统来做坏块管理、ECC等的功能。另一方面,emmc的读写速度也比NAND Flash的读写速度快,emmc的读写可高达每秒50MB到100MB以上;
二、emmc的初始化和数据通信
emmc与主机之间通信的结构图:
其中包括Card Interface(CMD,DATA,CLK)、Memory core interface、总线接口控制(Card Interface Controller)、电源控制、寄存器组。
图中寄存器组的功能见下表:
CID: 卡身份识别寄存器 128bit,只读, 厂家号,产品号,串号,生产日期。
RCA: 卡地址寄存器,可写的16bit寄存器,存有Device identification模式由host分配的通信地址,host会在代码里面记录这个地址,MMC则存入RCA寄存器,默认值为0x0001。保留0x0000以用来将all device设置为等待CMD7命令状态。
CSD: 卡专有数据寄存器部分可读写128bit,卡容量,最大传输速率,读写操作的最大电流、电压,读写擦出块的最大长度等。
SCR: 卡配置寄存器, 可写的 64bit 是否用Security特性(LINUX不支持),以及数据位宽(1bit或4bit)。
OCR: 卡操作电压寄存器 32位, 只读,每隔0.1V占1位, 第31位卡上电过程是否完成。
(5)Device Identification Mode和初始化
MMC通过发CMD的方式来实现卡的初始化和数据通信
Device Identification Mode包括3个阶段Idle State、Ready State、Identification State。
Idle State下,eMMC Device会进行内部初始化,Host需要持续发送CMD1命令,查询eMMC Device是否已经完成初始化,同时进行工作电压和寻址模式协商:eMMC Device 在接收到这些信息后,会将OCR的内容(MMC出厂就烧录在里面的卡的操作电压值)通过 Response 返回给 Host,其中包含了 eMMC Device 是否完成初始化的标志位、设备工作电压范围 Voltage Range 和存储访问模式 Memory Access Mode 信息。
如果 eMMC Devcie 和 Host 所支持的工作电压和寻址模式不匹配,那么 eMMC Device 会进入Inactive State。
Ready State,MMC完成初始化后,就会进入该阶段。
在该 State 下,Host 会发送 CMD2命令,获取eMMC Device 的CID。
CID,即 Device identification number,用于标识一个 eMMC Device。它包含了 eMMC Device 的制造商、OEM、设备名称、设备序列号、生产年份等信息,每一个 eMMC Device 的 CID 都是唯一的,不会与其他的 eMMC Device 完全相同。
eMMC Device 接收到CMD2后,会将 127 Bits 的CID的内容通过 Response返回给 Host。
Identification State,发送完 CID 后,eMMC Device就会进入该阶段。
Host 会发送参数包含 16 Bits RCA 的CMD3命令,为eMMC Device 分配 RCA。设定完 RCA 后,eMMC Devcie 就完成了 Devcie Identification,进入 Data Transfer Mode。
注:emmc初始化和数据通信的过程,有点类似USB协议,USB控制器去发送请求给USB设备,以IN包和OUT包的形式去建立与USB设备之间的通信,默认状态下,USB设备也是0地址的,与控制器分配设备地址。(感兴趣的可以看一下USB2.0的协议,主要是第8和9章内容)
三、eMMC工作电压和上电过程
根据工作电压的不同,MMC卡可以分为两类:
High Voltage MultiMediaCard,工作电压为3.3V左右。
Dual Voltage MultiMediaCard,工作电压有两种,1.70V~1.95V和2.7V~3.6V,CPU可以根据需要切换
我所使用的eMMC实测工作电压VCC为2.80V~2.96V,VCCQ为1.70V~1.82V。
其中VCC为MMC Controller/Flash Controller的供电电压,VCCQ为Memory和Controller之间I/O的供电。
上电初始化阶段MMC时钟频率为400KHz,需要等电压调整到它要求的VCC时(host去获取OCR中记录的电压值,上面有说),MMC时钟才会调整到更高的正常工作频率。
深入浅出信息量惊人!如何看待闪存特性与文件系统应用?
闪存存储的性能与传统磁盘的差异,是众所周知的事情。但是,闪存颗粒在物理层面可靠性和稳定性的问题往往被有意或无意地忽视。那么,针对闪存存储的性能优势和持久性劣势应该采取什么样的解决机制?当前文件系统设计与闪存存储结合存在哪些问题?同时闪存存储在不同的文件系统中具备哪些应用模式和特点 ?这些问题一直困扰着关注闪存与文件系统应用的朋友。
作为DTCC本年度的白金赞助商之一,闪存领域领导性厂商Greenliant亚太营销副总裁李炫辉分析指出,在过去,闪存与文件系统这两个方面是不搭界的事情。因为闪存存储更关注物理介质以及集成电路与底层访问控制,文件系统更关注对上层的应用提供存储的功能和特性。但是,正如CPU多核技术带来操作系统和应用采用多线程/进程并发机制提升性能一样,闪存介质的出现也对文件系统应用有所影响和变化。因此,首先需要从了解闪存存储的底层特性、实现机制以及优劣势,扬长避短,利用现有文件系统和闪存优化的文件系统,充分发挥闪存存储的优点,一步一步地解决现在面临的问题。
你所知道的闪存特性和架构是什么样子?
在回答这个问题之前,我们必须搞清楚一个常识问题:现在谈论闪存和固态硬盘的概念实际上不太一样,凡是使用Flash Memory的都叫闪存,实际上后者只是一个封装的状态,固态硬盘可以封装Flash Memory也可以是非Flash Memory,目前大部分闪存厂商采用的都是Flash Memory的固态盘, 一般都把固态盘叫闪存,闪存也叫固态盘,所以也统称闪存。
除了闪存以外,还有其它多种快速存储技术,如DRAM ,NVRAM, MRAM and Spin-Torque(自旋力矩磁阻式随机存取内存), Carbon Nanotube( 碳纳米管 ), Phase Change Memory(相变内存), Memristor ( 忆阻器 )等等。
决定快速存储大规模应用的主要因素是量产规模、稳定性以及经济性,有量产规模才能提供可能,有了量产规模才能对闪存稳定性和性能进行验证, 再就是经济性如何体现,这些因素决定了快速存储大规模应用。当前,闪存主要用于IO性能加速环境,如数据库加速、虚拟化、延时敏感型应用、Server SAN或SDS、大数据处理等等方面,也是从2010年左右,闪存才开始大规模应用。
那么闪存物理特性的优劣表现在哪些方面呢?
从闪存物理性来看,闪存谈论最多的就是SLC,MLC,它们分别是Single-Level Cell 单层单元和Multi-Level Cell多层单元的缩写,Cell就是一个物理单元,有固定隔离栅和浮动隔离栅,进行计数时候,是电子打到浮动隔离栅产生电位,电位变化形成数据00、01、11、10等,当进行操作,就是要电子进行击穿,在进行改变的时候,将电子通过引槽流出Cell,并产生变化。
闪存为什么有擦写次数限制呢?当进行数据擦写,电子流出时候,物理隔离栅就会变薄,变薄到一定程度就没有绝缘的机制了,电子进入就会漏掉,那么就会坏掉,就出现闪存擦写次数的问题。
当前NAND Flash面临的挑战主要是耐久性、数据保持性、读写干扰、制造工艺缺陷,耐久性受制于闪存颗粒的擦写次数,同时数据保持性是指闪存将数据存在一个Cell中,仍然存在电子泄漏和电子辐射造成数据丢失情况。读写干扰是指对一个Cell进行读写操作时对临近的Cell也会产生干扰。制造工艺也存在不同的品质。另外,SLC比MLC品质要好,Cell都一样,但前者只有两个状态位,后者有4个状态位,那么后者读写数据的擦写次数要增加,寿命自然会缩短。
当前SSD主要使用NAND Flash,属于非易失性存储介质,成本比较低。物理特性不容易改变,那么如何优化显得很重要。
有一个情况需要指出,对于半导体厂商而言,在不断降低制程,密度越来越高,工艺控制难度增加,造成NAND Flash可靠性随制造工艺减小而降低,如擦写次数降低,大容量闪存里面就更容易出现错误。这也就是当前闪存厂商开始更专注 3D NAND 制程工艺的原因。
明白了闪存的物理特性之后,你们清楚闪存与磁盘到底存在哪些区别呢?
闪存的性能与磁盘系统的对比毋庸置疑,前者是电子驱动,后者是机械驱动,闪存的性能是磁盘的几十倍到上百倍,但是在可靠性和稳定性层面,闪存和磁盘却有很大的差异,例如磁盘性能随时间变化不会有变动,15000转硬盘十年以后还是15000转,而闪存存储则随时间和数据擦写量增长存在波动和衰减;闪存在擦写次数方面有限制,但磁盘没有限制;在MTBF方面磁盘可以到200万小时,而闪存则与擦写次数密切相关。当前阻碍闪存大规模应用于企业级应用的主要问题不是性能,而是闪存设备的可靠性,如何在闪存产品的生命周期内保证山村的可靠和性能无衰减是关键。
如何提升闪存可靠性和保障性能无衰减,则需要在闪存设备的架构设计方面下功夫。闪存控制器是闪存设备的核心,是联系主机和NAND Flash的桥梁,闪存控制器的管理功能包括了: Error-correcting code (ECC校验)、RAID保护机制、Wear leveling(磨损平衡)、Bad block mapping(坏块管理)、Read/write disturb management(读写干扰管理)、Garbage collection(垃圾收集)等。
与此同时,闪存控制器也有其它定制化功能,如加密、安全擦除或自毁、压缩或去重方面。
由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中的可靠性,因此在NAND的生产中及使用过程中会产生坏块。为了检测数据的可靠性,在应用NAND Flash的系统中一般都会采用一定的坏区管理策略,而管理坏区的前提是能比较可靠的进行坏区检测。
NAND ECC校验机制比较复杂,由行校验、列校验 组合而成,当出现多位错误时候,可以通过ECC 校验恢复。常用的ECC算法有Hamming、Reed-Solomon码、BCH、LDPC等,和使用颗粒类型相关。SLC一般采用Hamming校验,MLC一般采用Reed-Solomon码或BCH可以实现多位纠错,LDPC一般针对3D NAND校验。
常见的闪存卡ECC模块设计,采用集中式ECC引擎设计,即在板卡的闪存控制器中集成1个或2个ECC引擎处理ECC校验。当数据写入NAND Flash时,会由ECC引擎生成ECC校验码,然后和数据一起写入后端的闪存颗粒。当读取时候,系统从颗粒里面读出数据和ECC校验码,如果验证一致就送出数据,如果发现数据和ECC校验码不一致,则需要通过ECC校验获得正确数据,然后写回后送出数据。这种架构设计比较简单,成本比较低,但是我们知道,当Flash设备随着使用时间和数据量的增长,坏块会逐渐增加,会产生大量的ECC Error,这时候由于ECC引擎成为系统瓶颈,设备性能和可靠性会大幅度下降,对应用性能和数据安全带来影响。
如何消除性能衰减和可靠性下降的问题,这就需要在架构设计方面进行创新。Greenliant在闪存设备架构上实现了分布式ECC 设计架构, 在每一个NAND Package中都封装一个闪存控制器里面。这样就避免了前面所讲的性能衰减和可靠性下降的问题。同时为了防止闪存颗粒故障造成数据丢失,在架构上还实现了板载硬件RAID的功能。
还有一个需要注意的区别:闪存与磁盘系统的物理地址映射有很大不同。
在磁盘里面逻辑块地址LBA和物理块地址PBA是一一对应的,磁盘只要写的是这个LBA那么磁盘就一直会访问这个地址,那么就存在热点;对于闪存盘来说,由于存在擦写次数的限制,则会通过磨损平衡算法,尽可能让每个块擦写次数相同增加闪存设备的寿命,因此同一个LBA在不同的时间会指向不同的物理地址,因此文件系统需要闪存的这种特性做优化。
磨损平衡如何改变逻辑块地址和物理地址对应?磨损平衡分为动态和静态磨损平衡以及全局磨损平衡。动态磨损平衡写一个文件时候,永远写在一个空白块,空白块写完之后再写回到之前的那些数据被删除块上,这样循环地写。但是当一个文件写到闪存上就不很少被访问,而其他块被写了几十上百次,在这种情况下块与块的擦写次数就不再一致,动态磨损平衡算法就失效了,因此我们又采用静态磨损平衡算法,就是当一个块擦写次数和临近块次数超过一定阀值时我们就作一个数据存储交换,这样保证擦写平衡。这样有利于改善闪存耐久性,会优化闪存的性能。另外我们在颗粒级别会有全局磨损平衡算法,这样进一步提升设备的可靠性。
可见,闪存可靠性通过闪存算法、控制器管理可以来优化。那么如何采用闪存存储优化系统性能?
业界目前采用闪存存储优化系统性能的方式主要包括三种:一是所有数据都放闪存存储;二是混合模式一部分热数据放闪存存储;三是缓存架构如缓存热数据在闪存存储,如分层存储将冷热数据进行存储分层。
这三种方式,都需要文件系统支持,由文件系统提供底层设备访问。从几个文件系统特点来展开分析,首先Linux Storage Stack Diagram version 3.17方面。
从这个图中,我们可以看到从文件系统到底层设备,路径很长,可见,文件系统是一个比较复杂的东西。这么长的访问路径会影响到闪存性能和延时优势的发挥。针对这个问题,2012年英特尔提出NVMe标准,可以缩短闪存设备的访问路径,提升访问堆栈性能,更能发挥闪存高IO性能和低延时优势。
而对于高并发的应用而言,基于PCIe的NVMe协议更有明显优势。对于采用AHCI协议的设备来说,每个PCIe卡的ssd访问都需要通过Core 0来管理,Core0成为该设备的控制核,这样的控制机制就会降低性能和访问的可靠性,但NVMe协议支持每个CPU Core采用独立的链路,可以提高并发性能。
Linux文件系统是基于日志的文件系统,利用闪存提高Linux的文件系统性能可以采用以下几种方式:1. 将Journal日志放置到闪存上,2. 对数据安全不要求的情况下可以禁用Journal,3.由于闪存不存在磁盘存储的巡道和IO合并的需要,也可以禁用系统针对磁盘优化的merge/rotational等参数提高性能,4. Linux最新的Btrfs文件系统基于闪存特性做了访问优化,也可以考虑采用Btrfs文件系统。
ZFS文件系统是也是一个非常有特色的文件系统,当前一些商业化存储系统就是基于ZFS文件系统。ZFS文件系统载在设计时就考虑了通过闪存进行性能加速的方法。ZFS使用日志机制,ZFS intent log (ZIL) 处理同步写,ZIL处理同步写越快,系统性能越好。将闪存作为ZFS日志设备,可以大幅提升同步写性能。ZFS的ARC(Adjustable Replacement Cache)读缓存淘汰算法可以优化系统的读性能,而SSD可以作为二级缓存L2ARC设备提供更大的缓存空间,缓存命中是最大限度能提高性能的。但是
当前比较热门的Ceph文件系统,相对于底层的文件系统而言,Ceph文件系统更像是在底层文件系统之上的文件服务,在这里我们就不做过多介绍,但是Ceph文件系统也大量采用闪存进行性能加速。
针对闪存特性和文件系统应用的分析之后,那么当前闪存存在哪些问题呢?
问题之一在于,大多数操作系统和应用的存储设计均是针对磁盘访问特性进行优化的。由于传统磁盘的机械设计,需要通过磁头的旋转进行寻道和数据IO操作,限制了磁盘的性能,因此操作系统和应用的底层算法大部分都是针对如何减少IO操作和寻道时间所设计的。
另外,磁盘存储架构下为了提高IO性能采用了缓存设计,从而又增加了复杂的数据保护的处理机制。
还有就是,应用的并发度也限制了利用了闪存。
当前有些研究机构通过透明地绕过文件系统使用非易失性存储器,在高并发的压力下将闪存设备的性能提升7倍以上。
来自SNIA最新的技术思路, 利用NVMe标准访问协议,针对闪存设备特性来设计存储访问机制。例如利用基于闪存设备的对象存储结构,让应用直接访问底层闪存设备;再有通过闪存优化的文件系统,提供上层的文件访问;对于一些应用提供核心层的闪存优化的块访问机制等等。
另外,出于成本的考虑,有些客户将闪存设备作为磁盘的缓存,通过将SSD作为传统磁盘的读写缓存以加速IO性能,这种使用方式其实会加速设备磨损,因为利用LFU,LRU,MRU等缓存算法,会带来大量的碎片IO操作,造成读也是写的情况,加速了SSD设备的磨损。
李炫辉根据业界趋势包括Greenliant的发展情况,对闪存做了一个很有意思的展望,他指出,未来闪存随着经济性越来越好,可靠性设计的逐步完善,那么面向NVMe闪存设备的访问机制将会成为闪存应用的现实,针对NVMe闪存设备会做成一体化的架构。(阿明)
欢迎关注阿明自媒体微信公众号:chinastor
相关问答
树莓派串口通讯问题 - OSCHINA - 中文开源技术交流社区##AfatalerrorhasbeendetectedbytheJavaRuntimeEnvironment:##SIGSEGV(0xb)atpc=0x0000ffff...
linux 服务器蜂鸣器报警故障?2短:内存ECC较验错误。在CMOSSetup中将内存关于ECC校验的选项设为Disabled就可以解决,不过最根本的解决办法还是更换一条内存。3短:系统基本内存检查失败...
服务器的配置(参数)是如何的? - axGI6xf9 的回答 - 懂得根据你的需要有两种选择,云服务器和实体服务器选择云服务器配置方便,灵活,成本低。硬件配置需要更具你是使用人数来决定。使用人数越多,需要硬件配...
如何评价搭载华为鲲鹏920 CPU、UOS操作系统的台式机?不是使用上服务器CPU的机器都叫服务器,捡个E5配上X79、X99寨版,插满RECC内存,再把其他的东西配齐,那能叫服务器吗?更何况这个台式机CPU并不是服务器的鲲鹏...性...
vrf原理?VRF(VPNRoutingandForwarding)是一种虚拟路由技术,它可以在同一网络设备上创建多个虚拟路由表,每个虚拟路由表都可以独立地维护和处理路由信息,相互之间...
Hp公司的服务器有哪些型号-ZOL问答nncid120台电脑用拨号上网...有用(0)回复5000W够了吧。有用(0)回复不确认,要看是多久的了,如果需要查询可以发私信,把服务器上面的服务编号提供给我,我帮...
如何判断一个服务器的性能好不好?服务器,作为软件承载对象,先要明确,你的服务器做什么用途。比如做的图片静态存储,那io与网络最重要,内存可以少些;如果是做数据库,那内存与cpu使用非常高...大小...
centos内存条怎么样?centos内存条类型大部分是服务器专用内存条,具有稳定、可靠、价格便宜的特点。centos是linux下的代表系统,主要用于服务器主机,服务器常用英特尔志强系列处理...
三星860 QVO SSD的性能怎么样?得益于与主机系统间更快、更流畅的通信,精确的ECC算法和全新MJX控制器带来更高的速度,改进的TRIM指令增强了Linux的兼容性,所以860QVO在带来大容量的同时也...2...
做软路由的话,J1900跟G1820哪个性能好一些?我用的是AMD四核a4-6210,4g三星内存条,英特尔82576gb双口网卡,32Gsata硬盘,1T机械硬盘,装的是Openwrt和黑群辉,多拨,跑那满200兆宽带,这一套是我去维修电...内存...