SSD, 블록 크기 지우기 및 LVM : 원시 장치의 PV, 정렬 ing 일 때

새 SSD를 설치하고 전체 장치를 LVM의 PV로 사용하고 싶습니다. 즉,이 장치에 파티션을 하나도 배치 할 계획이 없습니다. 따라서 지우기 블록에서 파티션을 정렬 할 필요가 없습니다.

질문

ing 일 --dataalignment때 지우개 블록 크기 pvcreate와 ing 일 때 지우개 블록 크기 --physicalextentsize의 배수로 설정하면 충분 vgcreate합니까?

따라서 SSD의 지우기 블록 크기가 1024k라고 가정하면 괜찮습니다.

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

고려해야 할 다른 것이 있습니까?

이 VG에서 LV에 ext4 파일 시스템을 넣었다고 가정하면 ext4 익스텐트를 LVM-PE 크기에 맞추는 것이 좋습니다. 따라서 ext4 익스텐트의 크기는 LVM-PE 크기의 배수와 같아야합니까?

설명해 주셔서 감사합니다!



답변

예, 또한 MBR / PBR / GPT / MD / LVM의 모든 디스크 레이아웃을 확인했으며 동일한 결론에 도달했습니다.

귀하의 경우 (원시 디스크의 LVM), LVM-PE (physical extent)가 pvcreate와 1MB 정렬되면 할당 크기를 (1MB * N)으로 유지하는 한 모든 추가 데이터 할당이 정렬되도록 할 수 있습니다 .

“vgcreate -s”및 “lvcreate -L”은 기본적으로 단위가없는 크기를 MB 값으로 MB 단위로 처리하므로 pvcreate를 올바르게 수행 한 후에는 정렬에 신경 쓸 필요가 없습니다. 크기를 % / PE (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에는 적합하지 않을 수 있습니다 (그러나 IIRC, 최근 btrfs와 같은 fs는 내부 연속 블록을 할당 할 때 64KB + 정렬을 유지하려고합니다). 그러나 많은 fs는 RAID를 사용하여 성능을 얻기 위해 쓰기 (예 : 스트라이프 크기 구성)를 묶는 기능을 가지고 있으므로 SSD에 대한 쓰기 요청을 거의 최적화 할 수 있습니다.

실제 데이터로 진술을 뒷받침하고 싶지만 오늘날의 SSD 컨트롤러가 매우 지능적이어서 얼라이먼트 크기와 쓰기 크기가 “충분히 큰”경우 성능 저하를 나타내지 않기 때문에 실제로 확인하기가 어려웠습니다. 정렬이 잘못되지 않았는지 (모든 비용으로 <4KB 조정은 피함) 너무 작지 않은지 확인하십시오 (1024KB는 충분히 큼).

또한 IO 페널티에 관심이있는 경우 디바이스 캐시를 비활성화하고 동기화 된 읽기 / 쓰기 / 쓰기 테스트를 사용하여 벤치마킹하여 다시 확인하십시오.


답변

내가 이해하기에 기본값은 이미 충분합니다. LVM이 sysfs로 내 보낸 값을 기반으로 모든 것을 자동으로 정렬하려고 시도하므로 –dataalignment 옵션에 대해 걱정할 필요가 없습니다. 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

또한 기본값이 이미 4MB이므로 물리적 확장 크기를 vgcreate로 지정할 필요가 없습니다.


답변