SSD的概念

SSD的固件是确保SSD性能的最重要组件,用于驱动控制器。主控将使用SSD中固件算法中的控制
程序,去执行自动信号处理,耗损平衡,错误校正码(ECC),坏块管理、垃圾回收算法、与主机
设备(如电脑)通信,以及执行数据加密等任务。由于固件冗余存储至NAND闪存中,因此当SSD制
造商发布一个更新时,需要手动更新固件来改进和扩大SSD的功能。

缓存:缓存是指可以进行高速数据交换的存储器,它先于内存CPU交换数据,因此速率很快

缓存**工作原理**:缓存的工作原理是当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存

RAM是随机存取存储器(英语:Random Access Memory),又称作“随机存储器”。是与CPU直接bai交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。

寄存器:是距离CPU最近、访问数据速度最快的存储介质,用来做一些最基本的指令和地址存储。

寄存器从内存中获取数据,然后在CPU中进行处理,处理完后又将数据暂时存放在寄存器中,再从寄
存器传输到内存中。寄存器不需要很大容量,但是必须有匹配CPU的数据传输速度,所以它被集成
在了CPU内部以节省数据传输的时间,是CPU的一部分。寄存器具有高性能、高耗电的特点,所以
造价成本较高。

冷数据 热数据 温数据

冷(**cold**)数据: 是对于离线类不经常访问的数据,比如企业备份数据、业务与操作日志数据、话单与统计数据。
热数据是需要被计算节点频繁访问的在线类数据。
温(**warm)数据 是非即时的状态和行为数据**

SSD:主要用于存放和用户贴近的热数据,其对总容量需求较小,性能优先。
HDD:主要用于存放和用户较远的 温数据或冷数据,其对总容量需求较大,价格优先。这是一种设计的平衡。

1).数据加速层:采用pcie接口的高性能的SSD
2).热数据(频繁访问)层:采用普通SATA。SAS SSD
3).温数据层:采用高性能的HDD
4).冷数据层:采用HDD
5).归档层:采用大容量低廉的HDD,甚至磁带。

GPIO

GPIO(英语:General-purpose input/output),通用型之输入输出的简称,功能类似8051的P0—P3,其接脚可以供使用者由程控自由使用,PIN脚依现实考量可作为通用输入(GPI)或通用输出(GPO)或通用输入与输出(GPIO),如当clk generator, chip select等。
既然一个引脚可以用于输入、输出或其他特殊功能,那么一定有寄存器用来选择这些功能。对于输入,一定可以通过读取某个寄存器来确定引脚电位的高低;对于输出,一定可以通过写入某个寄存器来让这个引脚输出高电位或者低电位;对于其他特殊功能,则有另外的寄存器来控制它们。

GPIO的优点(端口扩展器)
SSD汇总 - 图1gpio
低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。
集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。
小封装:GPIO器件提供最小的封装尺寸 ― 3mm x 3mm QFN!
低成本:您不用为没有使用的功能买单。
快速上市:不需要编写额外的代码、文档,不需要任何维护工作。
灵活的灯光控制:内置多路高分辨率的PWM输出。
可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。
更好的灯光效果:匹配的电流输出确保均匀的显示亮度。
布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。
与ARM 的几组GPIO引脚,功能相似,GPxCON 控制引脚功能,GPxDAT用于读写引脚数据。另外,GPxUP用于确定是否使用上拉电阻。 x为A,B,,H/J,
GPAUP 没有上拉电阻。

IOPS

IOPS(Input/OutputOperations Per Second)是一个用于计算机存储设备(如硬盘(HDD)、固态硬盘(SSD)或存储区域网络(SAN))性能测试的量测方式,可以视为是每秒的读写次数。和其他性能测试一様,存储设备制造商提出的IOPS不保证就是实际应用下的性能。
IOPS的数值会随系统配置而有很大的不同,依测试者在测试时的控制变因而异,控制变因包括读取及写入的比例、其中循序访问及随机存取的比例及配置方式、线程数量及访问队列深度,以及数据区块的大小。其他因素也会影响IOPS的结果,例如系统设置、存储设备的驱动程序、操作系统后台运行的作业等。若在测试固态硬盘时,是否先进行预调(preconditioning)机制也会影响IOPS的结果。

性能特性

最常量测的性能特性是随机存取及循序访问时的IOPS。循序访问是访问存储设备中相邻位置的数据,一般和较大的数据区块访问有关,例如128KB,随机存取是访问存储设备中非相邻位置的数据.一般访问的数据区块比较少,例如4KB。
最常见的性能特性如下:

量测 说明
总IOPS 每秒读写次数的总和(混合读取及写入测试)
随机读取IOPS 每秒平均的随机读取次数
随机写入IOPS 每秒平均的随机写入次数
循序读取IOPS 每秒平均的循序读取次数
循序写入IOPS 每秒平均的循序写入次数

一些IOPS的示例
硬盘驱动器
随机存取处理下,一些常见的IOPS平均值,计算方式是1/(寻址时间 + 回应时间) = IOPS:

设备 形式 IOPS 接口 注解
7,200RPMSATA硬盘驱动器 硬盘驱动器 ~75-100 IOPS SATA 3Gbit/s
10,000 RPM SATA硬盘驱动器 硬盘驱动器 ~125-150 IOPS SATA 3 Gbit/s
10,000 rpmSAS硬盘驱动器 硬盘驱动器 ~140 IOPS SAS(串列SCSI)
15,000 rpmSAS硬盘驱动器 硬盘驱动器 ~175-210 IOPS SAS(串列SCSI)

固态设备

设备 形式 IOPS 接口 注解
英特尔Intel X25-M G2(MLC SSD ~8,600 IOPS SATA 3 Gbit/s 英特尔的数据表声称在4KB数据的写入及读取时,分别有有6,600/8,600 IOPS (80GB/160GB版本)及35,000 IOPS的速度。
英特尔 Intel X25-E (SLC) SSD ~5,000 IOPS SATA 3 Gbit/s 英特尔数据表声称在写入和读取的速度为3,300 IOPS及35,000 IOPS。写入和读取混和时为5,000 IOPS。英特尔的X25-E G1比X25-M G2快了约三倍
G.SkillPhoenix Pro SSD ~20,000 IOPS。 SATA 3 Gbit/s SandForce-1200为基础的固态硬件,配合加强版的固件,最快可到50,000 IOPS,性能测试的结果是随机读取可到~25,000 IOPS,随机写入可到~15,000 IOPS。
OCZVertex 3 SSD 最高可到60,000 IOPS SATA 6 Gbit/s 随机写入4KB (Aligned)
CorsairForce Series GT SSD 最高可到85,000 IOPS SATA 6 Gbit/s 240GB Drive,循序读取为555 MB/s,循序写入为525 MB/s。随机写入4KB (Aligned)

访问SSD原理

1.Host是通过LBA(Logical BlockAddress,逻辑地址块)访问SSD的,Host访问SSD的基本单元叫 用户页(Host Page)

2.SSD内部,SSD主控与Flash之间是Flash Page为基本单元访问Flash的,我们称Flash Page为物理页(PhysicalPage)

3.Host每写入一个Host Page, SSD主控会找一个Physical Page把Host数据写入,SSD内部同时记录了这样一条映射(Map)。有了这样一个映射关系后,下次Host需要读某个Host Page 时,SSD就知道从Flash的哪个位置把数据读取上来。 SSD内部维护了一张映射表(Map Table),Host每写入一个Host Page,就会产生一个新的映射关系,这个映射关系会加入(第一次写)或者更改(覆盖写)Map Table;当读取某个Host Page时,SSD首先查找Map Table中该Host Page对应的Physical Page,然后再访问Flash读取相应的Host数据。

4.大部分映射是存储在FLASH里面,还有一部分存储在片上RAM上。当Host需要读取一笔数据时,对有板载DRAM的SSD来说,只要查找DRAM当中的映射表,获取到物理地址后访问Flash从而得到Host数据.这期间只需要访问一次FlashH;而对Sandforce的SSD来说,它首先看看该Host Page对应的映射关系是否在RAM内,如果在,那好办,直接根据映射关系读取FLASH;如果该映射关系不在RAM内,那么它首先需要把映射关系从FLASH里面读取出来,然后再根据这个映射关系读取Host数据,这就意味着相比有DRAM的SSD,它需要读取两次FLASH才能把HOST数据读取出来,底层有效带宽减半。

垃圾回收(Garbagecollection)

当整个SSD写满后,从用户角度来看,如果想写入新的数据,则必须删除一些数据,然后腾出空间再写。
用户在删除和写入数据的过程中,会导致一些Block里面的数据变无效或者变老。Block中的数据变老或者
无效,是指没有任何映射关系指向它们,用户不会访问到这些FLASH空间,它们被新的映射关系所取代。
比如有一个Host Page A,开始它存储在FLASH空间的X,映射关系为A->X。后来,HOST重写了该Host Page,
由于FLASH不能覆盖写,SSD内部必须寻找一个没有写过的位置写入新的数据,假设为Y,这个时候新的映
射关系建立:A->Y,之前的映射关系解除,位置X上的数据变老失效,我们把这些数据叫垃圾数据。

随着HOST的持续写入,FLASH存储空间慢慢变小,直到耗尽。如果不及时清除这些垃圾数据,HOST就无法写入。SSD内部都有垃圾回收机制,它的基本原理是把几个Block中的有效数据(非垃圾数据)集中搬到一个新的Block上面去,然后再把这几个Block擦除掉,这样就产生新的可用Block了.

垃圾回收策略

a: 闲置垃圾回收:,SSD 主控制器可以设置在系统闲置时候做“预先”垃圾回收(提前做垃圾回收操作),保证一定
数量的”备用空白块”,让 SSD 在运行时候能够保持较高的性能

b:被动垃圾回收:每个 SSD 都支持的技术,在垃圾回收操作消耗带宽和处理能力的同时处理用户操作数据,如果
没有足 够强劲的主控制器性能则会造成明显的速度下降。

c:手动垃圾回收:用户自己手动选择合适的时机运行垃圾回收软件,执行垃圾回收操作。

Trim 指令

Trim 只是条 ATA 指令指令,让操作系统告诉 SSD 主控制器这个页已经“无效”了。Trim 会减少写入放大,因为主控制器不需要复制“无效”的页(没Trim 就是“有效”的)到空白块里,这同时代表复制的“有效”页变少了,垃圾回收的效率和 SSD 性能也提升了。Trim 能大量减少伪有效页的数量,它能大大提升垃圾回收的效率。

磨损平衡(Wear leveling)

磨损平衡是确保闪存的每个块被写入的次数相等的一种机制。

动态磨损算法是基本的磨损算法:只有用户在使用中更新的文件占用的物理页地址被磨损平衡了。

而静态磨损算法是更高级的磨损算法:在动态磨损算法的基础上,增加了对于那些不常更新的文件占用的物理地址进行磨损平衡,这才算是真正的全盘磨损平衡。简单点说来,动态算法就是每次都挑最年轻的 NAND 块来用,老的 NAND 块尽量不用。静态算法就是把长期没有修改的老数据从一个年轻 NAND 块里面搬出来,重新找个最老的 NAND 块放着,这样年轻的 NAND 块就能再度进入经常使用区

预留空间(Over-provisioning)

预留空间是指用户不可操作的容量,为实际物理闪存容量减去用户可用容量。这块区域一般被用来做优化,包括磨损均衡,GC和坏块映射。
(1)垃圾回收:就是要把数据搬来搬去,那就需要始终有空的地方来放搬的数据。空的越多,搬的越快,多多益善,有些SSD
为了更快,还会再拿走一些用户的容量。

(2)映射表等内部数据保存:SSD里面有一个巨大的映射表,把用户地址转成物理Flash颗粒地址,需要保存,以防掉电丢失。这个大概是千分之三的容量。

(3)**坏块替换:**写得多了,坏块会逐渐增加,需要用好的顶替。随着Flash的制程从32nm不断变小,变到现在的14nm,Flash质量
越来越差,坏块越来越多,这部分可能会到3%甚至更多。

写入放大

因为闪存必须先擦除(也叫编程)才能写入,在执行这些操作的时候,移动或覆盖用户数据和元数据(metadata)不止一次。
这些额外的操作,不但增加了写入数据量,减少了SSD的使用寿命,而且还吃光了闪存的带宽,间接地影响了随机写入
性能。这种效应就叫写入放大(Write amplification)。一个主控的好坏主要体现在写入放大上。

影响因素:


(1)垃圾回收虽然增加了写入放大(被动垃圾回收不影响,闲置垃圾回收影响),但是速度有提升。

(2)预留空间可以减少写入放大,预留空间越大,写入放大越低。

(3)开启 TRIM 指令后可以减少写入放大

(4)用户使用中没有用到的空间越大,写入放大越低(需要有 Trim 支持)。

(5)持续写入可以减少写入放大。理论上来说,持续写入的写入放大为1,但是某些因素还是会影响这个数值。

(6)随机写入将会大大提升写入放大,因为会写入很多非连续的 LBA。

(7)磨损平衡机制直接提高了写入放大

交叉操作

交错操作可以成倍提升NAND的传输率,因为NAND颗粒封装时候可能有多Die、多Plane(每个plane都有4KB寄存器),Plane操作时候可以交叉操作(第一个plane接到指令后,在操作的同时第二个指令已经发送给了第二个plane,以此类推),达到接近双倍甚至4倍的传输能力(看闪存颗粒支持度)。

ECC

为了检测数据的可靠性,在应用NAND Flash的系统中一般都会采用一定的坏区管理机制,而管理坏区的前提是能比较可靠的进行坏区检测。如果操作时序和电路稳定性不存在问题的话,NAND Flash出错的时候一般不会造成整个Block或是Page不能读取或是全部出错,而是整个Page中只有一个或几个bit出错,这时候ECC就能发挥作用了。不同颗粒有不同的基本ECC要求,不同主控制器支持的ECC能力也不同,理论上说主控越强ECC能力越强。

MBR:

MBR是主引导记录(Master Boot Record引导记录)的英文缩写bai,在传统硬盘分区模式中,引导扇区是每个分区(Partition)的第一扇区,而主引导扇区是硬盘的第一扇区。

为了方便计算机访问硬盘,把硬盘上的空间划分成许许多多的区块(英文叫sectors,即扇区),然后给每个区块分配一个地址,称为逻辑块地址(即LBA)。

在MBR中,分区表的大小是固定的,一共可容纳4个主分区信息。在MBR分区表中逻辑块地址采用32位二进制数表示,因此一共可表示2^32(2的32次方)个逻辑块地址。如果一个扇区大小为512字节,那么MBR硬盘最大分区容量仅为2TB。

FTL:(Flash Translation Layer,闪存转换层)

作用:完成Host逻辑地址空间到闪存(Flash)物理地址空间的映射。
FTL算法的优劣,决定了SSD的性能,可靠性,耐用性等,它是SSD固件的核心。

说明:
1)SSD会把每一笔用户逻辑数据写入闪存地址空间,便记录下该逻辑地址到物理地址的映射关系
2)当host读取数据时,SSD会根据这个映射,从闪存读取这笔数据,然后返回给用户
种类:
1)基于主机(Host Based)
FTL在主机端实现,用自己计算机的CPU和内存资源,如图
SSD汇总 - 图2


2)基于设备(Device Based,主流)
FTL在设备端实现,用的是SSD上的控制器和RAM资源。

SOC(sysetm on ship)芯片级系统

由多个具有特定功能的集成电路组合在一个芯片上形成的 系统或产品,其中包含完整的硬件系统及其承载的嵌入式软件。

特点:1.硬件规模庞大,通用基于IP设计模式

2.软件比重大,需要软硬件协同设计

优势:**降低耗电量减少体积,节省成本,增加系统功能,提高速度。**

DPT:

偏移地址01BE
字节数1
含义分析bai分区类型:00表示非活动分区;80表示活动分区;其他为无效分区
偏移地址01BF ~ 01C1
字节数3
含义分析 分区的起始地址(磁头/扇区/柱面):通常第一分区的起始地址开始于1磁头0柱面1扇区,因此这三个字节应为010100
偏移地址01C2
字节数1
含义分析 常见的分区操作系统的类型:00 [none-use] 04 [DOS FAT16 <32M] 05 [EXTEND] 06 [DOS FAT16 >32M] 07 [NTFS (OS/2)] 0B [ FAT32] 83 [LINUX >64M]
偏移地址01C3 ~ 01C5
字节数3
含义分析 该分区的结束地址(磁头/扇区/柱面)
偏移地址01C6 ~ 01C9
字节数4
含义分析 该分区起始逻辑扇区[在线性寻址方式下的分区相对扇区地址]
偏移地址01CA ~ 01CD
字节数4
含义分析 该分区占用的总扇区数
注释: 注意分区的起始地址 (磁头/扇区/柱面) 和结束地址 (磁头/扇区/柱面) 中字节分配:
00000000
01000001 00010101 (第一字节为磁头,第二字节2~7位为扇区,第二字节0~1位和第三字节为柱面)

CRC:循环冗余校验(Cyclic Redundancy Check, CRC)。

CRC是一种根据网络数据包或电脑文件等bai数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

CRC简介:

在数据传输过程中,无论传输系统的设计再怎么完美,差错总会存在,这种差错可能会导致在链路上传输的一个或者多个帧被破坏(出现比特差错,0变为1,或者1变为0),从而接受方接收到错误的数据。

为尽量提高接受方收到数据的正确率,在接收方接收数据之前需要对数据进行差错检测,当且仅当检测的结果为正确时接收方才真正收下数据。检测的方式有多种,常见的有奇偶校验、因特网校验和循环冗余校验等。

DDR(双倍数据速率):

DDR=Double Data Rate双倍速率,DDR SDRAM=双倍速率同步动态随机存储器,人们习惯称为DDR,其中,SDRAM 是Synchronous Dynamic Random Access Memory的缩写,即同步动态随机存取存储器。而DDR SDRAM是Double Data Rate SDRAM的缩写,是双倍速率同步动态随机存储器的意思。DDR内存是在SDRAM内存基础上发展而来的,仍然沿用SDRAM生产体系,因此对于内存厂商而言,只需对制造普通SDRAM的设备稍加改进,即可实现DDR内存的生产,可有效的降低成本

NAND

NAND闪存(NANO flash memory)是一种比硬盘驱动器更好的存储设备,在不超过4GB的低容量应用中表现得尤为明显。随着人们持续追求功耗更低、重量更轻和性能更佳的产品,NAND被证明极具吸引力。NAND闪存是一种非易失性存储技术,即断电后仍能保存数据。它的发展目标就是降低每比特存储成本、提高存储容量。
**

SLC,MLC和TLC三者是闪存的不同类型,三者区别如下:

1、SLC=Single-LevelCell。即1bit/cell,涑度快寿命长,亻介格贵〔约MLC的3倍以上的价格〕约10万次写寿命

2、MLC=Multi-LevelCell,即2bit/cell,速一般寿命一葫殳价格一葫殳约3000.一10000次写

3、TLC=TrinaryLevelCell,即3bit/cell,也有Fsh厂家叫8LC,涑寿命短亻介彳各便宣约500次写寿命目前还没有厂家 能做到1佣0次。

闪存的重要特性

1.闪存块需要先擦除才能写入,不能覆盖写
2.闪存都是有一定寿命的,每擦除一次闪存块,都会对其造成磨损,一般用PE(Program/EraseCount)数来衡量
3.每个闪存块的读是有限的,读的太多,上面的数据就会出错,造成读干扰问题
4.闪存的数据保持问题,由于电荷的流失,存储在闪存上的数据是会丢失的
5.闪存天生就有坏块
6.对MLC和TLC来说,存在Lower Page corruption的问题说明:在对Upper Page/Extra Page写入时,如果发生异常掉电,可能会把Lower Page上成功写入的数据破坏掉,好的FTL应该尽量避免这种情况
7.MLC和TLC的读写速度不如SLC,但它们都可以配成SLC模式来使用,好的FTL应该会利用这个特性来改善SSD的性能和可靠性

LBA:逻辑区块地址(Logical Block Address, LBA)是描述计算机存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。LBA可以意指某个数据区块的地址或是某个地址所指向的数据区块。现今计算机上所谓一个逻辑区块通常是512或1024位组。ISO-9660格式的标准CD则以2048位组为一个逻辑区块大小

SAS

SAS:串行SCSI(SAS:Serial Attached SCSI)是一种电脑集线的技术,其功能主要是做周边零件的数据传输,如:硬盘、CD-ROM等设备而设计的接口。串行SCSI 由并行SCSI物理存储接口演化而来,是由ANSI INCITS T10技术委员会(T10 committee)开发及维护的新的存储接口标准。与并行方式相比,串行方式能提供更快速的通信传输速度以及更简易的配置。此外SAS并支持与串行式ATA(SATA)设备兼容,且两者可以使用相类似的电缆。

SAS由3种类型协议组成,根据连接的不同设备使用相应的协议进行数据传输。
1.串行SCSI协议 (SSP) —用于和SCSI设备沟通。
2.串行ATA通道协议 (STP) —用于和SATA设备沟通。
3.SCSI管理协议 (SMP) —用于对SAS设备的维护和管理。
第一代SAS为数组中的每个驱动器提供 3.0 Gbps(3000 Mbps)的传输速率。
第二代SAS为数组中的每个驱动器提供 6.0 Gbps(6000 Mbps)的传输速率。

性能剖析:

性能指标 :

1).IOPS:设备每秒完成IO请求数,一般是小块数据读写命令的响应次数,比如4KB数据块尺寸。IOPS数字越大越好。

2)**.吞吐量:单位MB/s,即每秒读写命令完成的数据传输量,也叫宽带(Bandwidth),一般是大块数据读写命令,比如 512KB 数据块尺寸。吞吐量越大越好。

3).响应时间:也叫时延(Latency),即每个命令从出发到收到状态回复所需要的响应时间,时延指标有平均时延(Average latency)和最大时延两项(Max latency)。响应时间越小越好。**

访问模式:**

** 1. Random/Sequential: 随机(Random)和连续(Sequential)数据命令请求,连续的地址称为(Sequential)不连续的称为Random。

2. Block Size:块大小,即单条命令的数据大小。

3. Read/Write Ratio:读写命令数混合的比例。
任何测试负荷(workload)都是这些模式的组合
**
1)顺序读测试:LBA连续读,块大小为256KB,512KB等大尺寸数据块,读写比例为100%:0

2)随机写测试:指LBA不连续的写,块大小一般为4KB,读写保持一定的比例。

时延指标:

时延有平均时延和最大时延,数值越低越好,平均时延计算公式是整个应用或者测试过程中所有命令响应时间总和除以命令的个数,反映的是SSD总体水平时延性能,最大时延的是在测试周期内所有命令中响应时间最长的那笔,反应的是用户体验,例如最大时延影响应用通过操作系统SSD时有无卡顿的用户体验,时延上了秒级,用户就会有明显的卡顿感知。

功耗分为:巅峰功耗(peak power) ,读写功耗(active power),空闲功耗(idle power),省电功耗(启动SSD内部休眠,尽可能多地关掉不工作的硬件模块)

SSD功耗最大的是SAIC主控闪存模块

SSD 产品功耗:

空**闲(idle)功耗**, MAX active(有效)功耗:最大功耗是SSD 处于最大工作负载下所消耗的功耗,SSD的最大工作负载条件是连续写,让闪存并发忙写和主控ASIC满负荷工作,这时的功耗值对应最大功耗。

Standby/Sleep 功耗**:规范规定了SSD状态 ,包括:Active(有效),idle(空置),Standby(备用)和sleep(睡眠)功耗值从 Active 到 sleep 逐级递减,具体的实现由各商家自行定义**

DevSleep(深眠模式)功耗**:是SATA和PCIE新定义的 一种标准功耗,目的是在Standby和sleep 基础上再降一级功耗,配合主机和操作系统完成系统再休眠状态下SSD关掉一切自身模块,处于极致低功耗模式,甚至是零功耗。一般是10mW以下。**

对主机而言它的功耗状态和**SSD作为设备端是一一对应的,而功耗模式发起端是主机,SSD被动执行和切换对应的功耗状态。**

PS0-PS4状态

系统Powerstate
S0:工作模式,OS可以管理SATA SSD的Power State,D0或D3都可以**(系统是可以管理SSD的电源状态)

S1:是低唤醒延时的状态,系统上下文不会丢失(**CPUChipset**),硬件负责维持所有的系统都是上下文

S2:与S1相似不同的是处理器和系统cache(电脑高速缓冲储存器)上下文会丢失(OS负责维护cache和处理器 上下文),收到唤醒后,从处理器的rest vector(其他向量) 开始执行。

S3:睡眠模式(**sleep),CPU不运行指令,SATA SSD关闭,除了内存之外的所有上下文都会丢失,硬件会保存一部分的处理器和L2 cache(二级缓存**) 配置上下文,处理器的rest Vector 开始执行。

S4:休眠模式([Hibernate Mode]()) CPU不运行指令,SATA SSD关闭,DDR内容写入SSD中所有系统的上下文都会丢失,OS负责上下文的保存与恢复。

S5:软关闭状态(soft off state) 与S4相似,但是 OS不会保存和恢复系统上下文,消耗很少的电能,可通过鼠标键盘唤醒。

进入功耗模式有一定的时延,退出功耗模式也需要一定的时延,通常恢复SSD到初始功耗模式所花费的时间更长**

ACPI规定的DevicePowerState(设备电源状态):

D0状态,又被称为Full-On状态。其有两个子状态——D0(未初始化,Uninitialized)和D0(活动,Active)。
当PCIe设备刚完成Fundamental Reset(前面的文章详细介绍过)时,或者刚从D3 Hot状态进入D0状态时,该PCIe设备的Function默认进入的是D0未初始化状态。在D0未初始化状态下,所有的寄存器(除了Sticky位)都恢复为其默认的状态。此时,只能响应配置请求(Configuration Transaction),且不能发起事务,也不能处理接收到的Memory或者IO事务。
当处于D0未初始化状态的Function完成配置后,便会进入D0活动状态。在D0活动状态下,Function的所有功能都是可操作的,即正常工作的状态。
D1状态,又称为轻睡眠状态(Light Sleep)。该状态是可选的。
D2状态,又称为深睡眠状态(Deep Sleep)。该状态也是可选的。
D3状态,又称为Full-Off状态。其也有两个子状态D3 Hot状态和D3 Cold状态。当设备进入D3 Hot状态,表明该设备的电源尚未切断;而进入D3Cold状态,则表明设备的电源已被切断,如有Vaux存在,则链路进入L2状态,否则进入L3状态。
软件层可以通过向PMCSR(Power Mgt Control and Status Register)的PowerState位置写相关值,使得设备的某个Function进入D3 Hot状态。在D3 Hot状态下,该Function只能发送PME消息和PME_TO_ACK消息或者应答配置请求和PME_Turn_Off消息。

注意:Hot还存在电压,cold完全切断电源

L2Cache:L2Cache,即CPU的二级缓存。二级缓存是CPU性能表现的关键之一,在CPU核心不变化的情况下,增加二级缓存容量能使性能大幅度提高。而同一核心的CPU高低端之分往往也是在二级缓存上有差异,由此可见二级缓存对于CPU的重要性。