SSD,擦除块大小和LVM:原始设备上的PV,对齐


15

我想安装一个新的SSD,并将整个设备用作LVM的PV-换句话说:我不打算在该设备上放置一个分区。因此,不需要在擦除块上对齐分区。

问题

--dataalignmentpvcreateing 时设置为擦除块大小并在ing 时设置为擦除块大小--physicalextentsize的倍数是否足够vgcreate

因此,假设我的SSD的擦除块大小为1024k,可以

  • pvcreate --dataalignment 1024k /dev/ssd
  • vgcreate --physicalextentsize $(( x * 1024 ))k ...

还有什么要考虑的吗?

假设我将ext4文件系统放在此VG的LV上,将ext4范围与LVM-PE大小对齐是个好主意,对吗?那么ext4范围应该与LVM-PE大小相同或是LVM-PE大小的倍数吗?

感谢您的澄清!

Answers:


9

是的,我还检查了MBR / PBR / GPT / MD / LVM的所有磁盘布局,并得出了相同的结论。

对于您的情况(原始磁盘上的LVM),如果LVM-PE(物理范围)与pvcreate对齐1MB,则可以确保所有进一步的数据分配都将对齐,只要将分配大小保持为(1MB * N) 。

由于默认情况下,“ vgcreate -s”和“ lvcreate -L”都将大小无单位作为MB值处理,因此,正确完成pvcreate后,您可能不需要太在意对齐。只要确保不要以%/ PEs(对于lvcreate -l)和B(byte)/ S(512B-扇区在LVM中始终为512B)/ K(KB)(对于vgcreate -s和lvcreate -L)给出大小即可。

===为澄清起见添加===

作为后续措施,虽然SSD整个设备可能具有1024KB擦除块大小,但每个内部闪存芯片的擦除块大小/ rw页大小可能约为32KB-128KB / 512B-8KB。

尽管这取决于每个SSD的控制器,但只要保持写入对齐以擦除每个内部芯片的块大小,就不会发生由于额外的读-修改-写周期而导致的I / O损失,即上面的32KB-128KB例。只是您希望单个写入请求足够大(=擦除SSD作为一个完整设备的块大小),因此您可以通过有效地驱动所有内部芯片/通道来获得更好的性能。

我的理解是,由于控制器芯片的功能因供应商而异,并且闪存芯片的规格会迅速变化,因此1024KB对齐只是一种安全措施。在大捆绑包(在这种情况下为1024KB)中完成OS级写请求更为重要。

话虽如此,对文件系统级数据/元数据而言,对1MB对齐的LVM块执行mkfs(8)几乎可以肯定会破坏1MB对齐。大多数文件系统只关心4KB对齐,因此它可能不适用于SSD(但是,IRC,IIRC,最近的bsffs等fs在分配内部连续块时尝试保持64KB +对齐)。但是许多fs确实具有捆绑写入功能(例如,条带大小配置)以使RAID发挥性能的功能,因此可以用于向SSD发出写入请求,而这种请求几乎是最佳的。

我确实想用实际数据来支持我的陈述,但是由于今天的SSD控制器是如此智能,并且一旦对齐大小和写入大小都“足够大”时,就不会表现出太多的性能下降,这确实很难证明。只要确保它没有对齐(不惜一切代价避免<4KB的内存)并且不要太小(1024KB足够大)即可。

另外,如果您确实关心IO损失,请通过禁用设备缓存和使用同步读写读写测试进行基准测试来仔细检查。


6

据我了解,默认值已经足够好了。我认为您不必担心--dataalignment选项,因为LVM会根据sysfs导出的值自动尝试对齐所有内容,请参阅lvm.conf中的“ data_alignment_detection”选项:

# By default, the start of a PV's data area will be a multiple of
# the 'minimum_io_size' or 'optimal_io_size' exposed in sysfs.
# - minimum_io_size - the smallest request the device can perform
#   w/o incurring a read-modify-write penalty (e.g. MD's chunk size)
# - optimal_io_size - the device's preferred unit of receiving I/O
#   (e.g. MD's stripe width)
# minimum_io_size is used if optimal_io_size is undefined (0).
# If md_chunk_alignment is enabled, that detects the optimal_io_size.
# This setting takes precedence over md_chunk_alignment.
# 1 enables; 0 disables.
data_alignment_detection = 1

此外,由于vgcreate的默认物理大小已为4MB,因此无需指定物理扩展大小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.