写入放大

写入放大英語:,简称WA)是闪存固态硬盘(SSD)中一种不良的现象,即实际写入的物理資料量是写入資料量的多倍。

垃圾回收和耗损平衡导致了SSD的写入放大,从而增加了驱动器的写入次数,减少了其使用寿命[1]

由于闪存在可重新写入数据前必须先擦除,而擦除操作的粒度与写入操作相比低得多[lower-alpha 1],执行这些操作就会多次移动(或改写)用户数据和元数据。因此,要改写数据,就需要读取闪存某些已使用的部分,更新它们,并写入到新的位置,如果新位置在之前已使被用过,还需连同先擦除;由于闪存的这种工作方式,必须擦除改写的闪存部分比新数据实际需要的大得多。此倍增效应会增加请求写入的次数,缩短SSD的寿命,从而减小SSD能可靠运行的时间。增加的写入也会消耗闪存的带宽,此主要降低SSD的随机写入性能[1][3]。许多因素会影响SSD的写入放大,一些可以由用户来控制,而另一些则是数据写入和SSD使用的直接结果。

在2008年,英特尔[4]SiliconSystems(2009年为西部数据所收购)[5]首先在他们的论文和出版物使用了术语“写入放大”。写入放大通常用闪存的写入与主机系统的写入之比来衡量。没有开启数据压缩时,写入放大不小于1。在使用压缩的情况下,SandForce声称他们的典型写入放大达到了0.5[6],而在最佳情况下,使用SF-2281控制器,此值能低至0.14[7]

SSD基本操作

NAND闪存以每页4 KB写入数据,以每块256 KB擦除数据[2]

由于闪存操作的性质,数据不能像在硬盘中那样直接覆写。当首次向SSD写入数据时,单元都处于已擦除状态,因而数据可以直接写入,一次一(大小通常为4至8千字节(KB))。SSD中管理闪存与主控系统接口的SSD控制器,使用称为逻辑区块地址(LBA)的逻辑到物理映射系统,这是闪存转换层(FTL)的一部分[8]。当新的数据要替换已写入的旧数据时,SSD控制器将会写入新的数据至新的位置,并且更新逻辑映射,将其指向新的物理位置。原位置的数据将不再有效。在可以再次写入之前,它需要先被擦除[1][9]

闪存的编程和擦除次数有限。通常以闪存在整个寿命中最多可忍受的编程/擦除循环(P/E循环)次数来表示。单层单元(SLC)闪存,通常设计为高性能和长寿命,一般能有50000到100000次循环。截至2011年 (2011-Missing required parameter 1=month!),设计用于低成本应用的多层单元(MLC)闪存,循环次数就大为减少,一般只有3000至5000次循环。自2013年起,已有三层单元(TLC)闪存,其编程-擦除(P/E)循环次数又降至1000。写入放大越低,则越为理想,因为与之对应的是闪存中P/E循环次数减少,所以能延长SSD的寿命。[1]

计算数值

即使是在定义术语之前,写入放大就已经存在于固态硬盘中,但直到2008年,才有英特尔[4][10]和SiliconSystems开始在他们的论文和出版物中使用它[5]。所有的SSD都有一个写入放大值,基于目前正在写入的数据及先前已写入到SSD的数据。为了能准确地测量特定SSD的该值,应使选定的测试流程运行足够长的时间,以确保驱动器已达到稳态[3]

一个简单计算SSD写入放大的公式是:[1][11][12][13]

闪存写入的数据量 ÷ 主控写入的数据量 = 写入放大

影响因素

SSD的写入放大会受许多因素的影响。下表列出了主要因素以及它们对写入放大的影响。对于变量因素,表中注明了“正面”相关或“反面”相关。如随着预留空间的增加,写入放大将减小(反相关)。如果该因素是一个开关(“启用”或“禁用”)关系,那么它的关系或“正向”或“反向”。[1][8][11]

写入放大因素
因素 描述 类型 关系*
垃圾回收 用来挑选用于擦除和重写的最佳块的算法的效率 变量 反面(小为好)
预留空间 分配到SSD控制器的物理容量百分比 变量 反面(小为好)
SATA的TRIM命令 或 SCSI中的UNMAP 这些命令必须由操作系统(OS)发送,可以通知存储设备哪些扇区含有无效数据。可以处理这些命令的SSD能在擦除块时,将包含这些扇区的页作为空闲空间回收,而不是复制无效的数据到干净的页中。 开关 正向(小为好)
空闲用户容量 没有实际用户数据的用户容量百分比;需要TRIM,否则SSD不会从任何空闲的用户容量中获得好处 变量 反面(小为好)
安全擦除 擦除所有的用户数据和相关元数据,将SSD的性能重置到最初状态(直至重新开始垃圾回收) 开关 正向(小为好)
耗损均衡 算法的效率,令每块的写入次数与其他的块尽可能相同 变量 正面(大为坏)
静动数据分离 将数据按修改频率分组 开关 正向(小为好)
顺序写入 理论上,顺序写入的写入放大为1,但其他因素仍会影响此值 开关 正向(小为好)
随机写入 写入到非连续的LBA对写入放大的影响最大 开关 反向(大为坏)
数据压缩,包括重复数据删除 数据压缩和重复数据删除能消除更多的冗余数据,降低写入放大,同时提升SSD速度。 变量 反面(小为好)
SLC模式使用MLC NAND 以每单元1位,而不是以设计的每单元位数(通常为每单元2位)写入数据,以加快读取和写入操作。如果临近SLC模式下的NAND容量限制,SSD必须把旧有用SLC模式写入的数据改写为MLC或TLC模式,才能让SLC模式的NAND空间释放出来,以便容纳更多的数据。然而,通过让经常更改的页面维持在SLC模式,而不是以MLC或TLC模式修改,这种做法也可以降低磨损,因为比用SLC模式,用MLC或TLC模式写入对闪存的伤害确实更大。因此,这种做法提高了写入放大,但当写入模式设为向常写页面上写入时,却可以减少磨损。然而,顺序和随机写入却会加剧磨损,因为这样就没有或少有频繁写入的页是SLC模式,迫使旧数据不断地从SLC模式改写到MLC或TLC。 开关 反向(大为坏)
*关系定义
类型 关系 描述
变量 正面 随着因子增加WA增加
反面 随着因子增加WA减小
开关 正向 当因子开启时WA减小
反向 当因子开启时WA增加

垃圾回收

页面能一直写入,直至填满区块。然后,当前的数据页被移动至新的区块,旧的区块被擦除[2]。(图示:1.四个页面(A-D)写入一个区块(X)。单独的空闲(已擦除)页面可以直接写入;2.四个新页(E-H)和四个替代页(A'-D')写入区块(X)。原来的A-D页现在包含的是无效(过期)数据,但直至整个区块被擦除前,页面都不能重新写入;3.要向含有过期数据的页面(A-D)写入数据,有效页面(E-H和A'-D')被读取并写入区块(Y),然后区块(X)被擦除。最后一步称为“垃圾回收”。)

数据以页面(由多个单元组成)为单位写入到闪存中。然而,存储器只能以较大的单位区块(由多个页面组成)擦除[2]。如果不再需要一个块中某些页内的数据(称为过期页),仅会读取该块中含有有效数据的页面,并重新写入到另一个先前擦除的空块中[3]。因而,由于没有移动过期数据,留下的空闲页就可用来存储新的数据。这一过程称为“垃圾回收”(GC)[1][12]所有的SSD都包含不同程度的垃圾回收机制,但在执行的频率和速度上有所不同[12]。垃圾回收占了SSD上写入放大的很大一部分[1][12]

读取数据不需要擦除闪存,因此通常与写入放大无关。在有限的情况下会发生读取干扰错误,此时会读取并重新写入区块中的数据,但是这不会对驱动器的写入放大造成实质性的影响。[14]

后台垃圾回收

垃圾回收的过程包括读取并重新向闪存写入数据。这意味着,主控写入新数据时,就必须先读取整个区块,再写入区块中仍包含有效数据的部分,之后才写入新数据。这显著降低了系统的性能[15]。有的SSD控制器实现了“后台垃圾回收”(BGC),有时也被称为“空闲垃圾回收”或“空闲时间垃圾回收”(ITGC),能让控制器在主控需要写入新的数据之前,使用空闲时间整理闪存块。这使驱动器能维持较高的性能[16]

如果能在需要快閃記憶體前,控制器在后台垃圾回收时,就已经收集好了所有的空闲区块,那么就可以直接写入主控要写入的新数据,而無須先移動数据,这样驱动器就总能表现出最佳性能。不幸的是,实际上某些區块上的数据主控并不需要,它们最终将会被删除,但操作系统并没有告诉控制器这些信息。结果,要被删除的数据被重写到了闪存的另一个位置,因而提高了写入放大。在一些OCZ的SSD中,后台垃圾回收仅会清除少量的块,之后便停止,以此限制过度写入的数量[12]。另一种解决方案是配备一个高效的垃圾回收系统,在主控写入的同时同步执行必要的数据移动。在SSD少有空闲的环境中,这种解决方案更有效[17]SandForce的SSD控制器[15]Violin Memory的系统有这项功能[11]

文件系统感知垃圾回收

2010年,一些厂商(特别是三星)推出的SSD控制器扩展了BGC的概念,它们会分析固态硬盘上使用的文件系统,以识别出最近删除的文件,及未分区的空间。制造商声称,系统(操作系统和SATA控制器硬件)即便不支持TRIM,也能获得相似的性能。三星实现的操作似乎在假定、并且需要有一个NTFS文件系统[18]。目前,这些厂商生产的SSD是否仍具备该功能不得而知。有报道称,如果没有正确地用MBR和NTFS格式化这些驱动器,将会出现系统数据的损坏[19]

预留空间

SSD中的三级预留空间[15][20]。(图示:层级1:7.37%,230和109之间的差距。HDD和SSD基于十进制衡量空间,而不是像内存那样用二进制单位。层级2:0,7,或28%,控制寿命、容量、性能达到期望平衡的比例。SSD由工厂设置层级2的预留空间,以维持基本的性能和寿命。层级3:?%,在SSD的使用过程中波动。(假设支持TRIM)存储的用户数据在变化,空闲空间被自动用作预留空间。)

预留空间(有时简称OP)是闪存的物理容量和操作系统(OS)呈现给用户的可用逻辑容量之间的差值。在SSD的垃圾收集、耗损均衡及坏块映射操作中,额外的预留空间有助于降低控制器写入闪存时的写入放大。[4][20][21][22]

预留空间的第一级来自容量的计算,单位使用吉字节(GB),而不是gibibyte(GiB)。HDD和SSD的厂商都使用术语GB来表示“十进制”的GB,即1,000,000,000(10^9)字节。闪存(象其它大多数电子存储器一样)以二的幂组装,所以SSD的物理容量将以每二进制GB 1,073,741,824(230)字节来计算。两个值之间的差距是7.37%(=(230-109)/109 × 100%)。从而预留0%空间的128 GB SSD提供给用户的容量是128,000,000,000字节。这个初始的7.37%通常不计算在总的预留空间数量中。[20][22]

预留空间的第二级来自制造商。这一级的预留空间大小通常为0%、7%或28%,基于十进制吉字节的物理容量与十进制吉字节的用户可用空间之差。举例而言,制造商发布的规格为100 GB、120 GB或128 GB的SSD,可能它们的实际物理容量都是128 GB。这种差异就是由28%、7%和0%造成的,而这也是制造商声称它们的驱动器有28%预留空间的依据。这不包括额外的十进制和二进制吉字节之间相差的7.37%。[20][22]

预留空间的第三级来自驱动器上的已知可用空间,以获得持久性和性能,前提是报告未使用的部分,和/或以目前或未来的空间为代价。可以藉由操作系统使用TRIM命令来确定空闲空间。另外,一些SSD提供了工具,以让最终用户选择额外的预留空间。此外,如果在SSD上没有100%地使用可用空间划分分区布局,SSD也将会自动把未分区的空间作为预留空间使用[22]。还有一个预留空间来源于操作系统的最小可用空间限制;一些操作系统在每一个驱动器上都保留有一定的最小可用空间,特别是在启动或主驱动器上。如果SSD,也许是通过连续使用TRIM命令,能够识别出这些额外空间,那么它就能作为半永久性的预留空间。预留空间往往需要占用用户容量,或暂时或永久,但它能减少写入放大,增加持久性,并提高性能[17][21][23][24][25]

预留空间计算
( 物理容量 - 用户容量 ) ÷ 用户容量 = 预留空间

TRIM

TRIM是一个SATA命令,使得操作系统可以告诉SSD不再需要哪些之前保存过数据的区块。可能这些文件已被删除,或整个分区已被格式化。若操作系统替换了一个LBA的同时覆写了一个文件时,SSD就能知道可以标记原来的LBA为过时或无效,在垃圾回收的过程中就不用再保留那些块。如果用户或操作系统删除一个文件(不只是除去它的一部分),通常只会将该文件标记为已删除,而并未真正擦除磁盘上的实际内容。正因如此,SSD不知道可以擦除文件先前占用的LBA,所以在垃圾回收时仍会保留它们。[26][27][28]

在有操作系统支持的情况下,TRIM命令解决了这个问题,如Windows 7[27]、Mac OS(Snow Leopard、Lion及Mountain Lion的最新版,有些情况下需要补丁)[29]Linux >= 2.6.33[30]。当永久删除一个文件或格式化硬盘时,操作系统依据不再包含有效数据的LBA发送TRIM命令。这可告知SSD可以擦除并重新使用哪些使用中的LBA。垃圾回收过程中需要移动的LBA因此而减少。结果是SSD将有更多的空闲空间,同时获得低写入放大及更高的性能[26][27][28]

限制和依赖

TRIM命令也需要SSD支持。SSD固件如果不支持TRIM命令,就不会标记TRIM命令收到的LBA为无效,而仍假设数据有效,并在垃圾回收时继续予以保留。只有当操作系统向这些LBA中保存新数据时,SSD才能将最初的LBA标记为无效[28]。若驱动器中没有内建支持TRIM,SSD厂商可以为用户升级固件,或提供一个单独的实用程序,以从操作系统中提取关于无效数据的信息,再另外TRIM SSD。只有用户每次运行程序后,才能从中获得好处。用户可以设定计划任务,让该实用程序在后台定期自动运行[15]

正因为SSD支持TRIM命令,在收到命令后,它不一定能立即表现出最快性能。TRIM命令释放的空间可能随机散落于SSD中。要经过几轮的数据写入和垃圾回收之后,空间才会逐渐合并,表现的性能才能提高。[28]

即使已配置OS和SSD支持TRIM命令,其他情况也可能会使TRIM无法发挥出它的功效。截至2010年初,数据库和RAID系统还没有配备TRIM感知,因而无法向SSD传递信息。这种情况下,SSD将继续保留那些区块,直到OS将那些LBA用于新的写操作。[28]

实际可从TRIM命令中得到的益处取决于SSD上的空闲用户容量。如果SSD用户容量为100 GB,用户实际在驱动器上存储了95 GB数据,任何TRIM操作为垃圾回收和耗损均衡增加的可用空间都不会超过5 GB。在这种情况下,增加5 GB的预留空间将使SSD的性能更加稳定一致,因为可用空间总会有额外的5 GB,而不必等待OS发来TRIM命令。[28]

空闲用户容量

SSD控制器将使用SSD上的任何空闲块以进行垃圾回收和耗损均衡。无用户数据的用户容量部分(或已TRIM,或从未写入)就如同预留空间(直至用户向SSD保存新数据)。如果用户保存的数据仅占驱动器总用户容量的一半,用户容量的另一半看起来就如同额外的预留空间(只要系统支持TRIM命令)。[28][31]

安全擦除

ATA安全擦除命令旨在从驱动器中删除所有用户数据。对于没有内置加密功能的固态硬盘,此命令将会把驱动器恢复至其出厂状态。刚开始,它的性能将恢复至可能的最高水平及最佳的(最低)写入放大,但只要驱动器再次开始垃圾收集,性能和写入放大就会逐渐降至先前水平[32][33]。许多工具能使用ATA安全擦除命令重置驱动器,而且有用户界面。在行业中经常提到的一个免费工具是HDDErase[33][34]GpartedUbuntu live CD提供可启动的Linux系统,上有包含安全擦除的磁盘实用程序[35]

实时加密所有写入数据的驱动器可以以另一种方式实现ATA安全擦除。方法是简单地向其补零,并在每次完成安全擦除后产生一个新的随机加密密钥。这样就无法再读取旧数据,因为无法解密[36]。内置加密的驱动器可能需要发送TRIM命令,以将其设为出厂状态[37]

耗损均衡

如果反复地编程和擦写某區块,而其他區块却没有写入,该區块会早于其他的區块而磨损——从而过早地结束了SSD的寿命。由于这个原因,SSD控制器使用称为耗损均衡的技术,以尽可能均匀地将写入分配到SSD的所有闪存區块上。

理想情况下,每一區块都能写入到最大次数,这样它们都能同时失效。不幸的是,耗损均衡操作會要求移动之前写入後就未改变的数据(冷数据),以使频繁变动的数据(热数据)可以写入到冷數據的區块中,讓冷數據的區塊達到均衡。数据被重定位,而主控却并没有修改它们,这增加了写入放大,而降低了闪存的寿命。关键是要找到最优算法以使两者同时达到最佳化。[38]

静动数据分离

对SSD控制器来说,静动数据分离并不是一件简单的事。该方法需要SSD控制器将数据不断变化、需要重写(动态数据)的与数据很少改变、且不需要任何重写(静态数据)的LBA分离开来。如果数据混于同一区块,正如目前几乎所有系统所做的那样,SSD控制器在重写时,就需要垃圾回收动态数据(引起重写的原因)和静态数据(不需要任何重写)。任何对操作中未涉及数据的垃圾回收都会增加写入放大。因此分离数据将使静态数据留在原地,如果它永远不会改写,写入放大就能达到最低。[1]

顺序写入

当顺序向固态硬盘写入数据时,写入放大等于1,意为没有写入放大。这是因为在数据写入时,依次用来自同一文件的数据填充区块。如果OS确认该文件将被替换或删除,可以标记整个块为无效,也不需要读取它以将垃圾收集到的数据重写入另一个块。它只需要擦除,比随机数据写入所需的“读取-擦除-修改-写入”的垃圾收集过程更易、更快。[8]

随机写入

在完全垃圾回收、安全擦除、100%TRIM、或新安装之后,SSD有大量的空闲区块,随机写入性能达到峰值。最大速度将取决于连接到SSD控制器的并行闪存通道数、固件效率及闪存写入页面的速度。在此阶段,写入放大之于随机写入达到最佳,接近1。一旦区块都写入了一次,垃圾收集过程将启动,性能将会被此过程的速度和效率所限制。此阶段的写入放大将增至驱动器经历过的最高水平。[8]

对性能的影响

SSD的总体性能取决于许多因素,其中包括写入放大。向闪存设备写入比从它读取所需的时间更长[16]。SSD通常并联使用多个闪存组件,以提高性能。如果SSD的写入放大高,控制器将不得不多次向闪存写入。主控将需要更多的时间写入数据。低写入放大的SSD不需要写那么多的数据,因此能比高写入放大的驱动器更早写入完毕[1][9]

产品声明

2008年9月,英特尔宣布了X25-M SATA SSD,声称WA能低至1.1[6][39]。2009年4月,SandForce宣布了SF-1000 SSD处理器系列,报称其WA为0.5,似乎是借由某种形式的数据压缩而达到[6][40]。在此次发布前,曾认为1.0的写入放大是SSD可以达到的最低水平[16]。目前,只有SandForce的SSD控制器使用了压缩。

参见

注释

  1. 数据以页面为单位写入到闪存中,其由多个单元组成。然而,存储器只能以较大的单位区块擦除,其由多个页面组成。[2]

参考

  1. Hu, X.-Y. and E. Eleftheriou, R. Haas, I. Iliadis, R. Pletka. . IBM. 2009 [2010-06-02]. CiteSeerX: 10.1.1.154.8668. (原始内容存档于2013-07-03).
  2. Thatcher, Jonathan. (PDF). SNIA. 2009-08-18 [2012-08-28]. (原始内容存档 (PDF)于2012-09-07).
  3. Smith, Kent. (PDF). SandForce. 2009-08-17 [2012-08-28]. (原始内容存档 (PDF)于2011-12-06).
  4. Lucchesi, Ray. (PDF). Silverton Consulting. September 2008 [2010-06-18]. (原始内容 (PDF)存档于2011-05-31).
  5. Kerekes, Zsolt. . ACSL. [2010-06-19]. (原始内容存档于2010-06-20).
  6. Shimpi, Anand Lal. . AnandTech. 2009-12-31 [2011-06-16]. (原始内容存档于2011-06-23).
  7. Ku, Andrew. . Tomshardware. 2012-02-06 [2012-02-10].
  8. Hu, X.-Y. and R. Haas. (PDF). IBM Research, Zurich. 2010-03-31 [2010-06-19]. (原始内容存档 (PDF)于2011-07-13).
  9. Agrawal, N., V. Prabhakaran, T. Wobber, J. D. Davis, M. Manasse, R. Panigrahy. . 微软. June 2008 [2010-06-02]. CiteSeerX: 10.1.1.141.1709. (原始内容存档于2013-06-22).
  10. Case, Loyd. . 2008-09-08 [2011-07-28]. (原始内容存档于2011-08-23).
  11. Kerekes, Zsolt. . ACSL. [2010-05-31]. (原始内容存档于2010-06-11).
  12. (PDF). OCZ Technology. [2012-11-13]. (原始内容 (PDF)存档于2012-05-26).
  13. . Intel. [2010-05-31]. (原始内容存档于2010-05-26).
  14. (PDF). Micron. 2006 [2010-06-02]. (原始内容 (PDF)存档于2011-07-19).
  15. Mehling, Herman. . Enterprise Storage Forum. 2009-12-01 [2010-06-18]. (原始内容存档于2010-12-09).
  16. Conley, Kevin. . Corsair.com. 2010-05-27 [2010-06-18]. (原始内容存档于2011-08-12).
  17. Layton, Jeffrey B. . Linux Magazine. 2009-10-27 [2010-06-19]. (原始内容存档于2010-07-01).
  18. Bell, Graeme B. (PDF). Journal of Digital Forensics, Security and Law. 2010 [2012-04-02]. (原始内容 (PDF)存档于2012-04-23).
  19. . [2014-10-11]. (原始内容存档于2014-10-18).
  20. Bagley, Jim. (PDF). StorageStrategies Now: 2. 2009-07-01 [2010-06-19]. (原始内容 (PDF)存档于2010-01-04).
  21. Drossel, Gary. (PDF). Storage Developer Conference, 2009. 2009-09-14 [2010-06-20].
  22. Smith, Kent. (PDF). flashmemorysummit.com: 14. 2011-08-01 [2012-12-03]. (原始内容存档 (PDF)于2014-10-19).
  23. Shimpi, Anand Lal. . AnandTech.com: 2. 2010-05-03 [2010-06-19]. (原始内容存档于2010-06-10).
  24. OBrien, Kevin. . Storage Review. 2012-02-06 [2012-11-29]. (原始内容存档于2012-11-15). 20% over-provisioning adds substantial performance in all profiles with write activity
  25. (PDF). Intel. 2010 [2012-11-29]. (原始内容 (PDF)存档于2011-11-25).
  26. Christiansen, Neal. (PDF). Storage Developer Conference, 2009. 2009-09-14 [2010-06-20]. (原始内容 (PDF)存档于2010-03-26).
  27. Shimpi, Anand Lal. . AnandTech.com. 2009-11-17 [2010-06-20]. (原始内容存档于2010-06-17).
  28. Mehling, Herman. . Enterprise Storage Forum. 2010-01-27 [2010-06-20]. (原始内容存档于2010-06-06).
  29. . osxdaily.com. 2012-01-03 [2012-08-14]. (原始内容存档于2012-08-10).
  30. . kernelnewbies.org. 2010-02-04 [2010-07-23]. (原始内容存档于2012-06-30).
  31. Shimpi, Anand Lal. . AnandTech.com: 9. 2009-03-18 [2010-06-20]. (原始内容存档于2010-06-12).
  32. Shimpi, Anand Lal. . AnandTech.com: 11. 2009-03-18 [2010-06-20]. (原始内容存档于2010-06-12).
  33. Malventano, Allyn. . PC Perspective. 2009-02-13 [2010-06-20]. (原始内容存档于2010-02-21).
  34. . CMRR. [2010-06-21]. (原始内容存档于2010-06-10).
  35. OCZ Technology. . 2011-09-07 [2014-12-13]. (原始内容存档于2012-01-07).
  36. . anandtech. [2011-06-29]. (原始内容存档于2011-07-05).
  37. . Thomas-Krenn.AG. [2011-09-28]. (原始内容存档于2011-10-27).
  38. Chang, Li-Pin. . National ChiaoTung University, HsinChu, Taiwan. 2007-03-11 [2010-05-31]. CiteSeerX: 10.1.1.103.4903. (原始内容存档于2013-08-01).
  39. . Intel. 2008-09-08 [2010-05-31]. (原始内容存档于2010-08-02).
  40. (PDF). SandForce. 2008-09-08 [2010-05-31]. (原始内容存档 (PDF)于2011-07-16).

外部链接

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.