【问题标题】:SCSI Read10 vs Read16SCSI Read10 与 Read16
【发布时间】:2014-10-28 07:02:45
【问题描述】:

哪种情况会被认为是正确的?

  1. 无论 LBA 是 32 位还是 64 位,都使用 Read 16 命令进行读取。

  2. 如果最大 LBA 为 32 位,则执行读取 10 命令,如果最大 LBA 为 64 位,则执行读取 16 命令。

每种选择的优缺点是什么?

我知道对于读取容量命令,运行 10 是正确的,如果返回 FFFFFFFFh 然后运行 ​​16。为什么会这样?读取容量 16 命令适用于这两种情况,甚至根本不需要读取容量 10。

【问题讨论】:

    标签: c hard-drive scsi


    【解决方案1】:

    请记住,在许多情况下,SCSI 具有多种“大小”命令的原因是因为 SCSI 是一种非常古老的协议。 (它在 1986 年首次标准化,在那之前已经开发了一段时间!)当时,大型 SCSI 设备的范围只有数百兆字节——即使是 32 位 LBA当时认为过分。 64 位 LBA 命令直到很久以后才存在。

    这里的问题实际上只是您是否要支持这些旧设备。如果这样做,您将需要在“小型”设备上使用 Read (10) 进行读取,因为它们可能无法识别 Read (16)。同样,在读取容量 (16) 之前使用读取容量 (10) 是因为旧设备无法识别较大的版本。

    【讨论】:

    • 所以问题出在旧设备上...如果是新设备,即使 LBA 是 32 位或更小,读取 16 和读取容量 16 也可以吗?
    • 谢谢,我将把 Read 10 留在代码中。我将使用 16 并根据需要进行更改。我正在测试相当新的驱动器的吞吐量和延迟。就这一点而言,您期望有什么不同吗?
    • 如果 10 字节和 16 字节 READ CDB 之间的性能存在差异,我会感到非常惊讶。我认为只使用 READ (16) 就可以了。
    • @gubblebozer 并非所有设备(尤其是旧设备)都支持 READ (16)。如果在不必要的时候避免它,您将获得更好的兼容性结果。
    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 2013-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多