当我阅读SPDK的源代码时,函数fmt_lun中有两种形式的spdk_scsi_lun_id_fmt_to_int。这两种形式意味着什么?fmt_lun符合SAM格式,什么是SAM格式?
uint64_t spdk_scsi_lun_id_int_to_fmt(int lun_id) { uint64_t fmt_lun,方法;
if (SPDK_SCSI_DEV_MAX_LUN <= 0x0100) {
/* below 256 */
method = 0x00U;
fmt_lun = (method & 0x03U) << 62;
fmt_lun |= ((uint64_t)lun_id & 0x00ffU) << 48;
} else if (SPDK_SCSI_DEV_MAX_LUN <= 0x4000) {
/* below 16384 */
method = 0x01U;
fmt_lun = (method & 0x03U) << 62;
fmt_lun |= ((uint64_t)lun_id & 0x3fffU) << 48;
} else {
/* XXX */
fmt_lun = 0;
}
return fmt_lun;}
发布于 2022-06-06 17:20:00
通过使用原始规范,您将得到对您的问题的最佳回答。您可以从t10.org获得SCSI模型规范的副本,这里是:https://www.t10.org/members/w_sam5.htm。这是SAM格式中的"SAM“。
多年来,SCSI不得不适应计算机硬件方面的许多进步。早在20世纪80年代中期,即使你能预测几十年来存储方式的变化,协议本身仍然需要在当时相对较小的计算机上发挥作用。在SCSI世界中,你可以看到很多类似的东西,就像LUN编码一样。在某个时候,需要超过256个月球。谢天谢地,工程师们从一开始就建造了一个addressing method领域。当然,第一种方法是0。为了保持与现有系统的兼容性,他们创建了method 1,允许最多16,384个LUN。
SAM-5定义了四种不同的寻址方法:
F 212
我只在野外见过前两种,但我确信有一些设备使用了方法2和方法3。
https://stackoverflow.com/questions/72513806
复制相似问题