http://www.hkepc.com/13139

儘管現時有不少高階 SSD 產品改用 PCIe 接口,以突破 SATA 接口的頻寬瓶頸,但控制器設計與 SATA  接口 SSD 一樣,採用老舊的 AHCI 控制器介面,優點是大部份作業系統均已原生支援 AHCI 驅動,相容性高能支援絕多部份作業系統及主機板平台,但 AHCI 控制器介面卻無法完全發揮 PCI Express 介面及 NAND Flash 顆粒的性能優勢。

 

AHCI 控制器介面 (Advanced Host Controller Interface) 是 PCI 時代非常老舊的技術規範,主要是針對旋轉碟面讀寫的機械式 HDD 而設,例如加入 NCQ (Native Command Queuing) 技術、優化硬碟的資料分佈,將存取順序作最有效率的排序以減少機械臂移動的距離,進而達到省時以及延長硬碟壽命的效果,但當時的設計並非為 SSD 產品而生。

NVMe 控制器介面特別針對 PCI Express 接口及 NAND Flash 特性作出了優化, NVMe 能同時處理最高 6 萬 4 千個 Command Queues 指令列,每個指令列最高可包含 6 萬 4 千個指令,充分發揮 NAND Flash 平行讀寫優勢。 AHCI 控制器介面則只能同時處理 1 個 Command Queues 指令列,每個指令列最高只能包含 32 個指令,令 IOPS 讀寫性能大幅落後 NVMe 。

此外, NVMe 控制器介面支援 PCIe 3.0 技術規範首次引入的 MSI-X 中斷處理 (Interrupts Processing) ,並加入了 Interrupts Steering 中斷導向能力。舊有的 AHCI 控制器僅支援 MSI 中斷處理,裝置僅獲分配 1 個定址並同時只能處理 1 個中斷,在多核心處理器環境下只能讓單顆核心進行存取。

NVMe 控制器則最高可分配多達 2048 個 Interrupts Processing 中斷處理,同時每個中斷均擁有獨立的目標定址,令系統不同處理器核心均能同時存取 SSD 裝置,此一差異令 NVMe 與 AHCI 在 IOPS 及讀寫延遲上存在巨大差距。

當指令所需的資料定址不在寄存器中, AHCI 控制器介面需要額外浪費 6-9 個指令週期才能完成讀取,約浪費 12000 ~ 18,000 個 CPU Cycles ,造成約 2.5 ~ 4μs 的延遲,而 NVMe 控制器介面僅需額外 2 個指令,約浪費 4000 個 CPU Cycles ,令 NVMe 的 SSD 裝置擁有更低延遲,減少對 CPU 資源浪費令運算性能明顯提升。

比較處理大量細碎檔案時, AHCI 與 NVMe 亦存在巨大性能差異, AHCI 控制器介面處理讀寫命令時,命令參數需進行兩次無法並行的系統記憶體存取,而 NVMe 則只需要進行一次 64 Bytes 的系統記憶體存取,令 IOPS 吞吐量大幅提升。此外, AHCI 控制器介面在發出指令時需要進行同步鎖定資料, NVMe 控制器則無需進行同步鎖定資料,將有效提升平行讀寫及多線程運算性能。

就像 IDE 接口一樣, SATA 連接埠與 AHCI 介面已完成歷史任務,為配合未來 NAND Flash 技術發展, NVMe 控制器介面將成為未來儲存介面的主流標準,基於 PCI Express 協定以不同的接口形式普及。

NVMe and AHCI Storage Interface Comparison

  AHCI NVMe
Maximum Queue Depth 1 Command Queue
32 commands per Q

64K Queues

64K Commands per Q

Un-cacheable register accesses 12,000-18,000 CPU Cycles wasted ~ 4,000 CPU Cycles wasted
MSI-X and Interrupt Single Interrupt no Steering 2048 Interrupt with Steering support
Parallelism & Multiple Threads Requires Synchronization lock
to issue command
No Locking required
Efficiency for 4KB Commands

Command parameter require

two serialized host DRAM fetches

Command parameters in one
64 Bytes Fetch 

AHCI vs NVMe的更多相关文章

  1. (转)科普:SATA、PCIe、AHCI、NVMe

    原文链接:https://forum.51nb.com/thread-1670848-1-1.html IT 界总喜欢发明新名词.而且同一个东西,可能有几个不同的名字.同一个名字,又可能指不同的东西. ...

  2. SATA、PCIe、AHCI、NVMe

    IT 界总喜欢发明新名词.而且同一个东西,可能有几个不同的名字.同一个名字,又可能指不同的东西. 从物理接口角度来说,我们常见的有IDE(淘汰),SATA,PCIe,M.2(固态硬盘) M.2插槽是有 ...

  3. NVMe 与 AHCI

    http://elf8848.iteye.com/blog/1731274 AHCI: NCQ技术,600MB/S,一个队列,每个队列32个指令 NVME:65000个队列,每个队列65000指令,3 ...

  4. SSD 的介绍 -------转载

    本文转载自: http://www.sohu.com/a/258190629_494938   背景 SSD(Solid-State Drive)是目前正处于鼎盛时期的存储设备.相较于传统的硬盘存储器 ...

  5. Day 19 磁盘管理

    1.磁盘的基本概念 1.什么是磁盘 磁盘(disk)是指利用磁记录技术存储数据的存储器. 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失. *绝大多数人对硬盘都不陌 ...

  6. 【转帖】网卡多队列技术与RSS功能介绍

    网卡多队列技术与RSS功能介绍 2017年02月08日 15:44:37 Murphy_0806 阅读数 10665 标签: rss网卡dpdk 更多 个人分类: DPDK https://blog. ...

  7. SSD接口详解,再也不会买错固态硬盘了

    http://stor.51cto.com/art/201808/582349.htm 硬盘知识科普中,我们提到了SSD的发展史虽短,但是种类和协议比HDD不知道多到哪里去了.因此,本期小编就通过接口 ...

  8. 固态硬盘的PCIE,SATA,M2,NVMe,AHCI分别都指什么?别再搞混了

    原文:https://baijiahao.baidu.com/s?id=1616207956596122967&wfr=spider&for=pc 科技娱乐屋 18-11-0420:5 ...

  9. NVMe概述

    目前企业SSD市场按照接口协议主要分为SATA SSD,PCIe SSD和NVMe SSD,其中SATA SSD沿用了传统的HDD使用的SATA协议,在企业应用和服务器兼容性上具有优势:而PCIe S ...

随机推荐

  1. TCP/IP入门学习(2)---OSI分层

    一.会话层以上的处理 1.表示层 将数据从主机特有的格式转换为网络标准传输格式.以此使得不同环境之间的通信成为可能. 2.会话层 即决定使用哪个连接或者哪种连接方式将数据发送出去.会话层也会在数首部添 ...

  2. python中的__init__ 、__new__、__call__等内置函数的剖析

    1.__new__(cls, *args, **kwargs)   创建对象时调用,返回当前对象的一个实例;注意:这里的第一个参数是cls即class本身2.__init__(self, *args, ...

  3. 【技术帖】解决 Hudson jenkins 连接等待中 - Waiting for next av

    今天构建项目发现如下问题: jenkins 连接等待中 - Waiting for next available executor 左下角那块一直不运行构建,一直在连接等待. 于是,进入一级页面, 右 ...

  4. Codeforces Round #198 (Div. 2) —— C

    C题很容易看懂题目,不过两个循环肯定会TLE,所以得用点小聪明: 首先排好序,因为是全排列,乱序和顺序的结果是一样的: 然后呢···· 如果是数列 1 2 3 4 5 元素1 被 2 3 4 5每个减 ...

  5. 盘点 PHP 和 ASP.NET 的10大对比!

    [编者按]本文主要针对开源 PHP 和非开源的 ASP.NET 在性能.成本.可扩展性,技术支持和复杂性等方面进行比较. 在网上论坛,总是有成百上千的文章和帖子在讨论 PHP 和 ASP.NET,究竟 ...

  6. 【BZOJ 1594】 [Usaco2008 Jan]猜数游戏 (二分+并查集)

    1594: [Usaco2008 Jan]猜数游戏 Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面 ...

  7. C#学习笔记二:C#程序结构

    从最简单的HelloWorld开始入手,这是一个最低限度的C#程序结构. C# Hello World 示例 一个C#程序主要由以下几部分组成: 命名空间声明 一个类 类方法 类属性 一个Main方法 ...

  8. ANDROID_MARS学习笔记_S03_002_设置可见性及扫描蓝牙设备

    一.代码 1.xml(1)AndroidManifest.xml <uses-permission android:name="android.permission.BLUETOOTH ...

  9. 使用libCurl实现断点下载

    关键部分代码如下: #include "curl.h" #pragma comment(lib, "libcurl.lib") size_t CROS_Down ...

  10. java学习多线程之创建多线程一

    现在我们有这么一个需求,就是在主线程在运行的同时,我们想做其他的任务,这个时候我们就用到了多线程.那么如何创建多线程,我们知道在系统当中qq的多线程创建是由操作系统来完成的,那么如果我们想在java当 ...