【问题标题】:Which version of Linux Kernel start to support SPC-4 for VMware 6.5 UNMAP哪个版本的 Linux Kernel 开始支持 VMware 6.5 UNMAP 的 SPC-4
【发布时间】:2016-10-25 06:49:42
【问题描述】:

VMware 6.5 announced 支持使用支持 SCSI 主要命令 - 4 (SPC-4) 的 VMFS6 和 Linux 虚拟机的 UNMAP 命令(存储系统上的精简 LUN 的空间回收)。 哪个版本的 Linux 内核开始支持 VMware 6.5 UNMAP 的 SPC-4? 这很有帮助article

【问题讨论】:

    标签: linux vmware scsi san


    【解决方案1】:

    这不是“Linux 何时会支持 SPC-4 用于 UNMAP”的问题(您始终可以尝试发送原始 SCSI 命令,而 Linux 不必真正“理解”这些命令)所以我认为您的意思是问“哪个版本的 Linux 会在适当的 ESXi 磁盘上自动通告 discard?”。

    在过去的几年里,只要“磁盘”说它可以支持 SCSI 标准 SPC-2 或更高版本,Linux 就会继续检查并公开对丢弃(也称为 TRIM 或 UNMAP)的支持(如果可用)。通过提交 https://github.com/torvalds/linux/commit/c98a0eb0e90d1caa8a92913cd45462102cbd5eaf 公开丢弃支持,最终在 2.6.39 中出现。请参阅https://github.com/torvalds/linux/blob/v4.8/include/scsi/scsi_device.h#L546,它显示了如何读取 VPD 页面仅在以下情况下发生:a)它以某种方式被强制(通过 er,“古怪”设备的显式怪癖)或 b)设备声称至少实现 SCSI SPC-2 规范。反过来,需要能够读取 VPD 页面来检查设备是否支持 https://github.com/torvalds/linux/blob/v4.8/drivers/scsi/sd.c#L2840 上的精简配置。

    我检查了 ESXi 6.0 上的精简配置 VMDK 磁盘,版本 11 VM 运行 Ubuntu 16.04,Guest OS 设置为 Ubuntu 64 位。如果您查看磁盘的“逻辑块配置”VPD 页面(通过sg_vpd -p lbpv),您会被告知:

    Logical block provisioning VPD page (SBC):
      Unmap command supported (LBPU): 1
      Write same (16) with unmap bit supported (LBWS): 0
      Write same (10) with unmap bit supported (LBWS10): 0
    

    (我必须在 VM 上将高级选项 EnableBlockDelete 设置为 1 才能得到这个)

    如果您查看 READCAPACITY(16) 结果(通过sg_readcap -16):

    Read Capacity results:
       Protection: prot_en=0, p_type=0, p_i_exponent=0
       Logical block provisioning: lbpme=1, lbprz=1
    

    所以它又声称自己很瘦。

    但是sg_inq 显示该磁盘仅声称支持 SCSI-2:

    standard INQUIRY:
      PQual=0  Device_type=0  RMB=0  LU_CONG=0  version=0x02  [SCSI-2]
    

    (SCSI-2 是 SPC-2 之下的几个修订版,请参阅https://github.com/torvalds/linux/blob/v4.8/include/scsi/scsi.h#L253 了解 Linux 如何订购 SCSI 规范版本)。

    所以 Linux 不会宣传丢弃:

    grep . /sys/block/sdc/queue/discard_max_bytes
    0
    

    任何试图使用丢弃的东西都会失败:

    # blkdiscard --offset 0 --length=2048 /dev/sdc
    blkdiscard: /dev/sdc: BLKDISCARD ioctl failed: Operation not supported
    

    尽管如此,仍可以手动向下发送原始 SCSI UNMAP:

    # sg_unmap --lba=0 --num=2048 /dev/sdc
    

    (请注意,取消映射操作的最小大小为 1MByte,否则您会收到错误消息)

    TLDR; Linux 中的广告丢弃是在 2.6.39 中添加的,但几乎所有 Linux 都可以手动通过 SCSI UNMAP 命令(并且在 ESXi 上,您的 VM 必须满足正确的要求)。

    【讨论】:

    • 嗨。 我必须在 VM 上将高级选项 EnableBlockDelete 设置为 1 才能得到这个。你是怎么做到的?
    • esxcli --server=server_name system settings advanced set --int-value 1 --option /VMFS6/EnableBlockDelete ?
    • vCenter必须有吗?我们需要在来宾操作系统中安装 vmware 工具吗?
    • @BBK 如果您愿意手动发送原始 SCSI UNMAP 内核版本无关紧要(上面我只有 SCSI-2) .从 2.6.39 开始的内核将在大多数适用情况下检查并通告 discard(文件系统用来表示区域可以“被遗忘”的丢弃)但您的设备必须 声称做SPC-2或以上。 vCenter 版本和是否安装了 VMware 工具与丢弃广告无关,但 VM 配置和 ESXi 版本很重要。有关 ESXi 6.5 上必须具有的配置设置,请参见上面的“VMware vSphere 6.5”链接。
    • 另一种说法是:您可能更关心 Linux 是否通告丢弃,而不是您是否可以发送原始 SCSI UNMAP 命令。 Linux 不必支持所有的 SPC-4 来宣传丢弃,而是 VMware 选择满足 Linux 的丢弃标准(磁盘声称至少可以做到 SPC-2,磁盘宣传它是瘦的,磁盘宣传使通过使他们的磁盘(声称)实施 SPC-4 并更改其磁盘上的版本号并且标准自 2.6.39 以来没有改变,它不会因不良行为而被列入黑名单。
    【解决方案2】:

    UNMAP 支持最早出现在ext4 文件系统的2.6.272.6.28 时间范围内。 Wikipedia page for TRIM/UNMAP 专门列出了内核版本2.6.28-25

    UNMAP 支持专门与文件系统相关联,因为文件系统知道何时完成了一系列块,并可以将它们释放回底层设备。确保选择支持它的文件系统!

    this SNIA presentationCommunity Driven Feature: Discard Support 部分有一个很好的总结。如上所述,来自2.6.32 的内核版本应该有很好的支持。特别是,这些更改使其成为主流 RHEL6。所以,到目前为止,它已经有一段时间了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2013-01-28
      • 2023-04-07
      • 2013-12-03
      • 2018-04-07
      • 2015-01-23
      相关资源
      最近更新 更多