2

VMware 6.5宣布通过支持 SCSI Primary Commands - 4 (SPC-4) 的 VMFS6 和 Linux 虚拟机支持 UNMAP 命令(存储系统上的精简 LUN 的空间回收)。哪个版本的 Linux 内核开始支持 VMware 6.5 UNMAP 的 SPC-4?这是有用的文章

4

2 回答 2

3

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

在过去的几年里,只要“磁盘”说它可以支持 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 页面仅在以下情况下发生,“古怪”设备)或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 位。如果您查看sg_vpd -p lbpv磁盘的“逻辑块配置”VPD 页面(通过 ),您会被告知:

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

(我必须在虚拟机上将高级选项设置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 必须满足正确的要求)。

于 2016-11-26T11:26:30.653 回答
1

UNMAP支持最早出现在文件系统的2.6.27时间2.6.28范围内ext4。维基百科页面TRIM/UNMAP专门列出了内核版本2.6.28-25

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

在此 SNIA 演示文稿的社区驱动功能:放弃支持部分下有一个很好的总结。如上所述,内核版本应该有很好的支持。特别是,这些更改使其成为主流 RHEL6。所以,到目前为止,它已经存在了一段时间!2.6.32

于 2016-10-25T21:25:48.680 回答