加载中…
个人资料
古猫先生-存储随笔
古猫先生-存储随笔
  • 博客等级:
  • 博客积分:0
  • 博客访问:35,691
  • 关注人气:10
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

对NVMe硬盘如何实现SCSI命令转换?

(2017-05-02 13:06:42)
标签:

scsi

nvme

ssd

分类: SCSI

一、前情回顾

在这篇文章之前,本公众号有发表过一篇文章:

“如何对SSD固态硬盘下发SCSI command?”                           

对于SCSI含义以及SCSI命令的一些基础概念在本篇将不再赘述,麻烦各位看官先翻阅一下前面的文章,非常感谢~


二、SCSI/ATA以及SCSI/NVMe转换层

针对SATA和NVMe SSD下发SCSI命令,其实不是直接将SCSI命令下发到硬盘,而是要经过转换层。

  1. SCSI to ATA转换层结构如下:

    转换层全称是SCSI / ATA Translation Layer,  缩写SATL.

    对NVMe硬盘如何实现SCSI命令转换?


  2. SCSI to NVMe转换层结构如下:

    同样, SCSI to NVMe转换层全称SCSI to NVMe Translation Layer,简称SNTL。这个转换层会嵌入到NVMe driver里面。

对NVMe硬盘如何实现SCSI命令转换?


三、实例: 如何对NVMe硬盘下发SCSI命令?

我们前面有对SATA硬盘下发SCSI命令,其实对NVMe硬盘下发SCSI的方式大同小异。下面我们就来试一下,这里我们用到的SCSI命令是READ CAPACITY。


SCSI Spec对READ CAPACITY的定义:

对NVMe硬盘如何实现SCSI命令转换?


首先,我们先看一下NVMe SSD的状态:

对NVMe硬盘如何实现SCSI命令转换?

如上图,这里显示的是SCSI device, 符合我们的预期。


本篇继续用sg3这个工具下发SCSI CMD,详细的解释请见:

“如何对SSD固态硬盘下发SCSI command?”                           

用sg_scan找盘,并用sg_raw下发 Read Capacity,

对NVMe硬盘如何实现SCSI命令转换?

如上图,我们看到有8字节返回结果, 3b f4 54 7f 00 00 02 00,

这个怎么解析呢?我还是先看SCSI SPEC,

对NVMe硬盘如何实现SCSI命令转换?

从SPEC来看, byte0-3代表最后一个逻辑Block地址,byte4-7代表逻辑block的长度。


那么,我们可以解析上面的结果如下:

byte0-3:最后一个逻辑Block地址=0x3bf4547f=1005868159, 那么,

逻辑block的数目=逻辑Block地址+1=1005868159+1=1005868160,


byte4-7:逻辑block的长度=0x200=512 bytes,


所以硬盘的容量= 逻辑block的数目 * 逻辑block的长度 = 1005868160 * 512 bytes = 515004497920 bytes = 515004497920/(1024*1024*1024) = 479.635GB,


我们从两个方面确认一下读出的结果是否正确:

a, 直接用电脑的资源管理器查看:

对NVMe硬盘如何实现SCSI命令转换?

资源管理器里看到的容量是479.64GB,跟我们读出来的一致!


b,在之前的文章中有提到sg3其实有很多集成好的SCSI cmd, 详细请见:

“如何对SSD固态硬盘下发SCSI command?”                           




我们这里用的read capacity其实也集成好了,我们直接用集成SCSI CMD再读一下:

对NVMe硬盘如何实现SCSI命令转换?

从上面的结果来看,跟我们前面手动填写CDB的方式读出来的结果是一致的!


更多内容,请关注微信公众号:存储随笔,ID: Memory-logger,

对NVMe硬盘如何实现SCSI命令转换?

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有