SSD, Hapus Ukuran Blok & LVM: PV pada perangkat mentah, Alignment

15

Saya ingin menginstal SSD baru dan menggunakan seluruh perangkat sebagai PV untuk LVM - dengan kata lain: saya tidak berencana untuk menempatkan satu partisi pun pada perangkat ini. Jadi tidak perlu menyejajarkan partisi pada blok erase.

Pertanyaan

Apakah cukup untuk mengatur --dataalignmentukuran blok hapus saat pvcreateing dan --physicalextentsizeke beberapa ukuran blok hapus saat vgcreateing?

Jadi, anggap SSD saya memiliki ukuran blok penghapusan 1024k, apakah boleh?

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

Ada lagi yang harus diperhitungkan?

Dengan asumsi saya akan meletakkan ext4-filesystems pada LVs di VG ini, itu akan menjadi ide yang bagus untuk menyelaraskan ext4-extents ke ukuran LVM-PE, kan? Jadi ext4-extents harus memiliki ukuran yang sama atau kelipatan dari LVM-PE-size?

Terima kasih atas klarifikasi!

mr
sumber

Jawaban:

9

Ya, saya juga memeriksa semua tata letak pada disk MBR / PBR / GPT / MD / LVM, dan sampai pada kesimpulan yang sama.

Untuk kasus Anda (LVM pada disk mentah), jika LVM-PE (tingkat fisik) adalah 1MB-disejajarkan dengan pvcreate, Anda dapat yakin bahwa semua alokasi data lebih lanjut akan disejajarkan, selama Anda menjaga ukuran alokasi menjadi (1MB * N) .

Karena "vgcreate -s" dan "lvcreate -L" menangani ukuran-tanpa-unit sebagai nilai MB secara default, Anda mungkin tidak perlu terlalu peduli tentang perataan setelah Anda selesai membuat pvcreate dengan benar. Pastikan untuk tidak memberikan ukuran dalam% / PEs (untuk lvcreate -l) dan B (byte) / S (512B - sektor selalu 512B dalam LVM) / K (KB) (untuk vgcreate -s dan lvcreate -L).

=== ditambahkan untuk klarifikasi ===

Sama seperti tindak lanjut, sementara SSD mungkin memiliki ukuran blok 1024KB menghapus sebagai keseluruhan perangkat, masing-masing ukuran blok memori flash rw internal / ukuran halaman rw mungkin sekitar 32KB-128KB / 512B-8KB.

Meskipun ini tergantung pada masing-masing pengontrol SSD, penalti I / O karena siklus baca-modifikasi-tulis tambahan mungkin tidak akan terjadi selama Anda tetap menulis agar selaras untuk menghapus ukuran blok setiap chip internal, yaitu 32KB-128KB di atas contoh. Hanya saja Anda ingin satu permintaan menulis cukup besar (= menghapus ukuran blok SSD sebagai perangkat keseluruhan), sehingga Anda dapat mengharapkan kinerja yang lebih baik dengan menggerakkan semua chip / saluran internal secara efisien.

Pemahaman saya adalah bahwa penyelarasan 1024KB hanya merupakan ukuran keamanan, karena fungsi chip pengontrol bervariasi oleh vendor, dan spesifikasi chip flash berubah dengan cepat. Lebih penting untuk memiliki permintaan penulisan tingkat OS untuk dilakukan dalam bundel besar (1024KB, dalam hal ini).

Sekarang, setelah mengatakan itu, melakukan mkfs (8) pada blok LVM yang selaras 1MB hampir pasti akan memecah 1MB-alignment untuk data / metadata tingkat-sistem file. Sebagian besar filesystem hanya peduli untuk melakukan 4KB-alignment, jadi mungkin tidak sempurna untuk SSD (tetapi, IIRC, fs terbaru seperti btrfs mencoba untuk menjaga keselarasan 64KB + ketika mengalokasikan blok yang berdekatan secara internal). Tetapi banyak fs memang memiliki fitur untuk bundle write (mis: konfigurasi stripe-size) untuk mendapatkan kinerja dari RAID, sehingga dapat digunakan untuk membuat permintaan penulisan ke SSD mendekati optimal.

Saya benar-benar ingin mendukung pernyataan saya dengan data aktual, tetapi sangat sulit untuk membuktikan karena pengontrol SSD saat ini sangat cerdas, dan tidak akan menunjukkan banyak penurunan kinerja setelah ukuran perataan dan ukuran penulisan "cukup besar". Pastikan itu tidak selaras (hindari <4KB-aligment di semua biaya) dan tidak terlalu kecil (1024KB cukup besar).

Juga, jika Anda benar-benar peduli dengan penalti IO, periksa kembali dengan menonaktifkan cache perangkat dan pembandingan dengan uji baca-tulis-menulis-ulang yang disinkronkan.

Taisuke Yamada
sumber
6

Menurut pemahaman saya, standarnya sudah cukup baik. Saya tidak berpikir Anda perlu khawatir tentang opsi --dataalignment karena LVM secara otomatis akan mencoba untuk menyelaraskan semua berdasarkan nilai yang diekspor sysfs, lihat opsi "data_alignment_detection" di 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

Selain itu, tidak perlu menentukan ukuran fisik untuk vgcreate karena standarnya sudah 4MB.

Kereoz
sumber