AHCI对性能的影响

AHCI,全称Advanced Host Controller Interface,即高级主机控制器接口,是一种相比老旧的“IDE虚拟模式”更适合新一代SATA存储设备通信的协议(如果主板BIOS不开启AHCI,那么SATA设备其实是工作在IDE虚拟模式下的,南桥会把SATA设备认为是老旧的IDE设备,占用主板IRQ 14/15),通过它可激活设备的高级SATA功能如原生指令队列和热插拔,支持64bit LBA寻址(大容量机械盘会需要),完全抛弃老一套的“主/从”设备概念,高级电源管理(HIPM/DIPM),端口复用等等。
       其中对SSD性能有影响的就是NCQ(Native Command Queuing,原生指令队列)。目前主流的SSD产品都已支持NCQ,NCQ主要是为了在高并发多线程读写的情况下重新排列读写指令顺序,尽量提供更高的并行读写可能性,从而掩盖多线程并发读写延迟而产生的。在SSD支持的情况下,开启AHCI模式可以使多线程、深并发队列的读写请求,通过NCQ重新排列读写指令操作顺序来让SSD按NCQ已重排的串行数据流做并行读写操作,这样便可以大大的提高随机读写IOPS性能。
       技术上说,Trim指令也支持IDE模式,不过在IDE模式下执行Trim时,他会禁用系统的读写指令。因此Trim的时候可能造成系统出现无响应,而具体时间取决于Trim的范围,一般在几秒到几分钟,非常影响用户体验。

LPM节能技术的作用

LPM,全称Link Power Management,是SATA接口物理层上的一个功能,它能够将主机(Host)和存储设备(Device)的链接分成3种形态:Active、Partial和Slumber形态,目的是降低物理层总线传输速度,这样即可有省电的功效。由主机(Host)发出改变形态请求的我们叫做HIPM(Host-Initiated LPM, HIPM),而直接由设备(Device)发出形态请求的叫(Device-Initiated LPM,DIPM) 
       Intel Rapid Storage Technology驱动支持LPM功能来降低高速高容量存储设备的耗电。当然,LPM功能首先需要SATA硬盘支持这个功能。从ICH6M开始,笔记本平台安装完Intel Matrix Storage Manager驱动(RST 驱动前身)后就默认支持LPM。台式机平台从ICH9R开始支持(需要安装Intel Matrix Storage Manager 7.5版本及更新的驱动),但是默认并没开启。 
       从Intel Rapid Storage Technology 10.0版驱动开始,默认安装完驱动后是开启LPM的(包括所有笔记本和台式机平台)。 
所以造成高速SSD使用中卡顿的问题很可能是Intel Rapid Storage Technology驱动的问题导致(还有部分可能是主机板不兼容,或者设置问题导致),既然这个技术是为了节能而开启的,为何会带来卡顿问题呢?目前主流的SSD可都是已支持LPM技术的。 
       本站neeyuese猜想带来卡顿的原因主要有下面几个:
       1.主机发送HIPM形态改变指令,而SSD设备标准不同,不能很好的支持,出现兼容问题导致卡顿;
       2.主机发送HIPM形态改变指令太频繁,导致SSD设备不能及时反映,出现不兼容而卡顿;
       3.LPM开启后造成SATA总线传输延迟增加,导致高速SSD的传输受到阻塞而卡顿;
       4.SSD内部的DIPM和主机请求的HIPM发生冲突导致卡顿。 
       不管如何,目前解决卡顿的方法就是完全禁用LPM,虽这样会带来耗电的增加,但总比卡顿来得舒服

SSD性能(跑分)下降的原因

对于接触SSD不久的人,经常都会产生一种疑问,那就是当SSD使用过一段时间后,再运行测试软件,得到的成绩几乎都肯定要比刚买回来时差,而且时间越长,差距就越明显,这是为什么呢?
       大家从之前的内容已经了解SSD的工作原理及特点,相比传统HDD,SSD最大的差异就在于其使用的NAND闪存无法进行覆盖操作,在已经被写入数据的位置,要重复写入的话,SSD就必须先对该位置进行擦除的操作,而且擦除操作的最小单位比写入操作的要大。说到这里,相信大家都已发觉原因所在了。
       SSD写入数据后,相同的地方未进行擦除是无法再写入数据的,当有需要写入新数据时,就只能写入到‘空闲’的地方,但若‘空闲’的地方不足以存放需要写入的数据,SSD便要进行GC,而GC操作是肯定要消耗占用一部分的SSD性能的,因此此时进行测试,所得的成绩自然就比刚买回来的时候要差,那时因为没写入过数据,全盘空间都是‘空闲’的,没需要进行GC,SSD自然可以用全部性能来进行测试。
            
       上面是一张本站neeyuese所画关于SSD三种状态的图片,大家看过后应该更能理解SSD下降的性能都跑到什么地方去了。

SSD为何必须分区对齐

通过前面SSD相关知识的介绍,大家应该已经知道,NAND颗粒的最小写入单位是页,而一般每个页的大小是4KB。在HDD时代,分区起始扇区的定义在第63个扇区,也就是31.5KB的位置,这里各位应该会发现问题了,31.5KB并不是4KB的整数倍,若继续使用这个分区方式,势必导致以后每写入一个页(4KB)的数据,都必须要横跨写入到2个页内,这样不单写入时间增加一倍,WA同样也增加了一倍(写一页实际变成写二页)。因此不管从任何方面来说,对SSD都不是一件好事,既影响性能表现(最显著的就是测试成绩低下),也影响SSD的寿命。
            
       如图上所示: 图中SSD出现分区没对齐问题,读写正好在2个16KB边界,所以需要做2次读-改-写操作,那么我们说这时候的操作所需时间就 是原来的2倍。如果系统请求写入4KB,那么发生这种情况的概率就是25%(图中第一个4KB在边界,后面3个在16KB内,而第5个又到下个16KB边 界了),性能为原本的80%。如果把写入请求提升到32KB的话,发生的概率就是8/9了,随着请求容量的增大,差距就会缩小。所以对持续速度来说,分区不对齐并不会影响很大。

IOPS数值的意义

IOPS,中文为每秒操作数,代表一个在定义的数据传输尺寸大小下每秒能够操作这个尺寸数据的次数。数值越高代表对磁盘IO响应能力越好,可以提高系统IO的响应能力,大大提高用户体验。在一些高密度IO场合(大多数是企业级应用),IOPS是关键性能参数。但对于一般家庭消费者而言,10000的IOPS和100000的IOPS,并无多大差别,因为家用环境上,无法用到这么高的IOPS性能。

SSD常见问题的技术分析的更多相关文章

  1. [转帖]SSD和内存数据库技术

    SSD和内存数据库技术 自己的理解还是不是很对 SSD 提升的是 随机读 并没有对顺序写有多大的提升, 因为数据库采用的是redo的模式. 理论上写入 时是顺序写 所以 写并发的提升不会很大 但是会很 ...

  2. 蓝牙协议分析(7)_BLE连接有关的技术分析

    转自:http://www.wowotech.net/bluetooth/ble_connection.html#comments 1. 前言 了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connec ...

  3. WaterfallTree(瀑布树) 详细技术分析系列

    前言 WaterfallTree(瀑布树) 是最强纯C#开源NoSQL和虚拟文件系统-STSdb专有的(版权所有/专利)算法/存储结构. 参考 关于STSdb,我之前写过几篇文章,譬如: STSdb, ...

  4. iOS直播的技术分析与实现

    HTTP Live Streaming直播(iOS直播)技术分析与实现 发布于:2014-05-28 13:30阅读数:12004 HTTP Live Streaming直播(iOS直播)技术分析与实 ...

  5. 横向技术分析C#、C++和Java优劣

    转自横向技术分析C#.C++和Java优劣 C#诞生之日起,关于C#与Java之间的论战便此起彼伏,至今不辍.抛却Microsoft与Sun之间的恩怨与口角,客观地从技术上讲,C#与Java都是对传统 ...

  6. tolua++实现lua层调用c++技术分析

    tolua++技术分析 cocos2dx+lua 前言 一直都使用 cocos2dx + lua 进行游戏开发,用 Lua 开发可以专注于游戏逻辑的实现,另外一方面可以实现热更新:而且 lua 是一个 ...

  7. 美链BEC合约漏洞技术分析

    这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈.这篇文章就来分析下BEC智能合约的漏洞 漏洞攻击交易 我们先来还原下攻击交易,这个交易可以在这个链接查询到. 我截图给大家 ...

  8. NetSarang软件中nssock2.dll模块被植入恶意代码技术分析与防护方案

    原文地址:http://blog.nsfocus.net/nssock2-dll-module-malicious-code-analysis-report/ NetSarang是一家提供安全连接解决 ...

  9. 包建强的培训课程(3):App竞品技术分析

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

随机推荐

  1. SPRING中事务的配置

    采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统自动创建.容器中的目标bean自动消失,避免需要使用嵌套bean来保证目标bean不可被访问.这 种配置方式依赖于Spring提供的bea ...

  2. 解读机器学习基础概念:VC维的来龙去脉 | 数盟

    http://dataunion.org/14581.html

  3. BZOJ 2726: [SDOI2012]任务安排( dp + cdq分治 )

    考虑每批任务对后面任务都有贡献, dp(i) = min( dp(j) + F(i) * (T(i) - T(j) + S) ) (i < j <= N)  F, T均为后缀和. 与j有关 ...

  4. 加密传输SSL协议1_OpenSSL的安装

    终于在自己不断的奋斗之后,来到科大的一波考试过去了,但是为了不使自己过于放松,回顾一下之前的东西,做一下笔记.所以新开一个专题笔记: Using Apache with SSL 引入:首先我们在平时的 ...

  5. php7 install script

    ./configure --prefix=/home/admin/local/php7 --with-gd=/home/admin/local/libgd-2.1.1/ --with-jpeg-dir ...

  6. echarts的使用总结;

    题外话:好久没来博客园了,这几个月自己的工作经历可以算是相当丰富,其实一直不知道自己做web前端能做到什么时候,但是想说既然现在还在做着这个职位,就好好的学习.之前很少写js代码,来了新公司大多数都是 ...

  7. 17.java.lang.CloneNotSupportedException

    java.lang.CloneNotSupportedException不支持克隆异常 当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常.

  8. poj2389---大数乘法

    #include<stdlib.h> #include<stdio.h> #include<string.h> #define MAX 100 int main() ...

  9. applet部署,无需修改客户端设置。

    1  开发applet程序,编译成jar包 2  给jar包做数字签名: (1).用keytool生成密钥: keytool -genkey -keystore myapplet.keystore - ...

  10. Day01

    1.@Test函数,执行后控制台没有输出结果? 1)  不能用静态方法,控制台会没有结果. 2)  不能把类名命名为Test,@Test不识别. 2.遍历Map集合的entrySet方法不会? 3.使 ...