SSD, Usuń rozmiar bloku i LVM: PV na urządzeniu surowym, Wyrównanie

15

Chcę zainstalować nowy dysk SSD i używać całego urządzenia jako PV dla LVM - innymi słowy: nie planuję umieszczać nawet jednej partycji na tym urządzeniu. Wyrównanie partycji na blokach wymazywania nie jest więc potrzebne.

Pytania)

Czy wystarczy ustawić --dataalignmentrozmiar bloku kasowania podczas pvcreateing i --physicalextentsizewielokrotność rozmiaru bloku kasowania podczas vgcreateing?

Zakładając, że mój dysk SSD ma rozmiar bloku kasowania wynoszący 1024 k, czy to w porządku

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

Coś jeszcze do wzięcia pod uwagę?

Zakładając, że w tym VG umieściłem systemy plików ext4 na LV, dobrym pomysłem byłoby wyrównanie ext4 z rozmiarami LVM-PE, prawda? Czyli ext4 powinny być tego samego rozmiaru co wielokrotność LVM-PE?

Dzięki za wyjaśnienia!

m.sr
źródło

Odpowiedzi:

9

Tak, sprawdziłem również cały układ na dysku MBR / PBR / GPT / MD / LVM i doszedłem do tego samego wniosku.

W twoim przypadku (LVM na dysku surowym), jeśli LVM-PE (zasięg fizyczny) jest wyrównany 1 MB z pvcreate, możesz być pewien, że wszystkie przyszłe przydziały danych zostaną wyrównane, o ile utrzymasz rozmiar przydziału na (1 MB * N) .

Ponieważ zarówno „vgcreate -s”, jak i „lvcreate -L” domyślnie traktuje rozmiar-bez-jednostki jako wartość MB, prawdopodobnie nie musisz zbytnio dbać o wyrównanie, gdy poprawnie wykonasz pvcreate. Tylko pamiętaj, aby nie podawać rozmiaru w% / PE (dla lvcreate -l) i B (bajt) / S (512B - sektor to zawsze 512B w LVM) / K (KB) (dla vgcreate -s i lvcreate -L).

=== dodano dla wyjaśnienia ===

Jako uzupełnienie, podczas gdy dysk SSD może mieć rozmiar bloku kasowania 1024KB jako całe urządzenie, rozmiar bloku każdego kasowania pamięci wewnętrznej / rozmiar strony rw to prawdopodobnie około 32KB-128KB / 512B-8KB.

Chociaż zależy to od kontrolera każdego dysku SSD, kara we / wy z powodu dodatkowego cyklu odczytu-modyfikacji-zapisu prawdopodobnie nie nastąpi, dopóki utrzymasz wyrównanie zapisu, aby skasować rozmiar bloku każdego wewnętrznego układu, który wynosi 32KB-128KB powyżej przykład. Po prostu chcesz, aby jedno żądanie zapisu było wystarczająco duże (= wymazuj rozmiar bloku dysku SSD jako całego urządzenia), abyś mógł oczekiwać lepszej wydajności dzięki wydajnemu sterowaniu wszystkimi wewnętrznymi układami / kanałami.

Rozumiem, że wyrównanie 1024 KB jest jedynie środkiem bezpieczeństwa, ponieważ funkcja układu kontrolera różni się w zależności od dostawcy, a specyfikacja układu flash zmienia się szybko. Ważniejsze jest, aby żądanie zapisu na poziomie systemu operacyjnego było wykonywane w dużym pakiecie (w tym przypadku 1024 KB).

Teraz, powiedziawszy to, wykonanie mkfs (8) na bloku LVM wyrównanym do 1 MB prawie na pewno przerwie wyrównanie 1 MB dla danych / metadanych na poziomie systemu plików. Większość systemów plików dba tylko o wyrównywanie 4KB, więc prawdopodobnie nie jest to idealne rozwiązanie dla dysków SSD (ale, IIRC, najnowsze fs, takie jak btrfs, próbują zachować wyrównanie 64KB + podczas przydzielania wewnętrznego ciągłego bloku). Ale wiele plików fs ma funkcję grupowania zapisów (np. Konfiguracja rozmiaru paska), aby uzyskać wydajność z macierzy RAID, dzięki czemu można użyć do żądania zapisu na dysk SSD prawie optymalnego.

Naprawdę chcę poprzeć moje oświadczenie rzeczywistymi danymi, ale naprawdę trudno było to udowodnić, ponieważ dzisiejszy kontroler SSD jest tak inteligentny i nie będzie wykazywał znacznego spadku wydajności, gdy zarówno rozmiar wyrównania, jak i rozmiar zapisu będą „wystarczająco duże”. Tylko upewnij się, że nie jest źle wyrównany (unikaj wyrównania <4KB za wszelką cenę) i nie jest zbyt mały (1024 KB jest wystarczająco duży).

Ponadto, jeśli naprawdę zależy Ci na karach we / wy, sprawdź dwukrotnie, wyłączając pamięć podręczną urządzeń i testy porównawcze za pomocą zsynchronizowanego testu odczytu-zapisu-przepisania.

Taisuke Yamada
źródło
6

Według mnie wartości domyślne są już wystarczająco dobre. Nie sądzę, że musisz się martwić opcją --dataalignment, ponieważ LVM automatycznie spróbuje wyrównać wszystko na podstawie wartości eksportowanych przez sysfs, patrz opcja „data_alignment_detection” w lvm.conf:

# 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

Ponadto nie jest konieczne określanie rozmiaru physicalextentsize do vgcreate, ponieważ domyślnie jest to już 4 MB.

Kereoz
źródło