我想安装一个新的SSD,并使用整个设备作为LVM的PV – 换句话说:我不打算在这个设备上放置一个分区。 因此,不需要在擦除块上alignment分区。
在vgcreate时设置--dataalignment为擦除块的大小,当vgcreate时--dataalignment为擦除块大小的倍数就足够了?
所以,假设我的SSD有一个1024k的擦除块大小,可以
pvcreate --dataalignment 1024k /dev/ssd vgcreate --physicalextentsize $(( x * 1024 ))k ... 还有什么要考虑的?
假设我将ext4文件系统放在这个VG的LV上,那么将ext4-extents与LVM-PE-sizealignment是个好主意,对不对? 那么ext4-extents的大小应该是LVM-PE-size的倍数还是倍数?
谢谢你的澄清!
是的,我也检查了MBR / PBR / GPT / MD / LVM的磁盘布局,得出了同样的结论。
对于您的情况(原始磁盘上的LVM),如果LVM-PE(物理盘区)与pvcreatealignment1MB,则只要将分配大小保持为(1MB * N),就可以确保所有进一步的数据分配都是alignment的。 。
既然“vgcreate -s”和“lvcreate -L”默认处理size-without-unit为MB值,那么在完成pvcreate之后,你可能不需要太在意alignment。 只要确保不要以%/ PE(对于lvcreate -l)和B(字节)/ S(512B – 扇区在LVM中总是512B)/ K(KB)(对于vgcreate -s和lvcreate -L)给出大小。
===添加澄清===
就像后续一样,SSD作为一个整体设备可能具有1024KB的擦除块大小,每个内部闪存芯片的擦除块大小/ rw页面大小大约为32KB-128KB / 512B-8KB。
虽然这取决于每个SSD的控制器,但是由于额外的读取 – 修改 – 写入周期所导致的I / O损失可能不会发生,只要您保持写入alignment以擦除每个内部芯片的擦除块大小,即上面的32KB-128KB例。 只需要单个写入请求足够大(即擦除SSD作为整个设备的块大小),因此您可以通过有效地驱动所有内部芯片/通道来获得更好的性能。
我的理解是,1024KBalignment只是一个安全措施,因为控制器芯片function因供应商而异,而且闪存芯片的规格变化很快。 在一个大的包(1024KB)中执行操作系统级的写请求更为重要。
现在,话虽如此,在1MBalignment的LVM块上执行mkfs(8)几乎肯定会破坏文件系统级数据/元数据的1MBalignment。 大多数文件系统只关心4KBalignment,所以对于SSD来说可能并不完美(但是,IIRC,当分配内部连续块时,像btrfs这样的最近fs试图保持64KB +alignment)。 但是,许多fs具有绑定写入的function(例如:stripe-sizeconfiguration)以使性能脱离RAID,因此可以用来向SSD写入请求,使其接近最佳状态。
我真的想用实际的数据来支持我的陈述,但是要certificate今天的SSD控制器是如此聪明,并且一旦alignment大小和写入大小足够大,就不会显示出太多的性能下降。 只要确保它不是不alignment(不惜一切代价避免小于4KB),而不是太小(1024KB足够大)。
另外,如果你真的在意IO惩罚,请通过禁用设备高速caching并使用同步读写重写testing进行基准testing来进行仔细检查。
据我了解,默认已经足够好了。 我不认为您需要担心–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 (eg MD's chunk size) # - optimal_io_size - the device's preferred unit of receiving I/O # (eg 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。