Kinerja Linux RAID-0 tidak meningkatkan lebih dari 1 GB / s

8

Saya mengalami kesulitan mengeluarkan throughput maks dari pengaturan saya. Perangkat kerasnya adalah sebagai berikut:

  • Prosesor AMD Opteron Quad-Core ganda (tm) 2376
  • RAM ECC DDR2 16 GB
  • pengendali RAID ganda Adaptec 52245
  • 48 1 TB SATA drive diatur sebagai 2 array RAID-6 (256KB stripe) + suku cadang.

Perangkat lunak:

  • Kernel vanilla 2.6.32.25, dikompilasi untuk AMD-64, dioptimalkan untuk NUMA; Pengguna Debian Lenny.
  • menjalankan benchmark: disktest, bonnie ++, dd, dll. Semua memberikan hasil yang sama. Tidak ada perbedaan di sini.
  • io scheduler yang digunakan: noop. Ya, tidak ada trik di sini.

Sampai sekarang saya pada dasarnya berasumsi bahwa striping (RAID 0) beberapa perangkat fisik harus meningkatkan kinerja secara linear. Namun ini tidak terjadi di sini:

  • setiap array RAID mencapai sekitar 780 MB / s tulis, berkelanjutan, dan 1 GB / s baca, berkelanjutan.
  • menulis ke kedua array RAID secara bersamaan dengan dua proses yang berbeda menghasilkan 750 + 750 MB / s, dan membaca dari keduanya memberikan 1 + 1 GB / s.
  • namun ketika saya memisahkan kedua array menjadi satu, menggunakan mdadm atau lvm, kinerjanya sekitar 850 MB / s dan membaca 1,4 GB / s. setidaknya 30% kurang dari yang diharapkan!
  • menjalankan dua proses penulis atau pembaca paralel terhadap array bergaris tidak meningkatkan angka, bahkan menurunkan kinerja lebih jauh.

Jadi apa yang terjadi di sini? Pada dasarnya saya mengesampingkan anggapan bus atau memori, karena ketika saya menjalankan dd pada kedua drive secara bersamaan, kecepatan tulis agregat sebenarnya mencapai 1,5 GB / s dan kecepatan membaca mencapai 2 GB / s.

Jadi bukan bus PCIe. Saya kira itu bukan RAM. Ini bukan sistem file, karena saya mendapatkan angka yang persis sama dengan perangkat mentah atau menggunakan XFS. Dan saya juga mendapatkan kinerja yang persis sama menggunakan striping LVM dan strip md.

Apa yang salah? Apa yang mencegah proses naik ke kemungkinan throughput maksimum? Apakah striping Linux rusak? Tes apa lagi yang bisa saya jalankan?

wazoox
sumber
Saya tidak mengerti mengapa Anda menggunakan RAID 6 + 0 di sini, mengapa Anda melakukan itu ketika Anda bisa menggunakan RAID 1 + 0 biasa?
Chopper3
Itu tidak akan menyelesaikan masalah. md / lvm berbagi perilaku yang sama saat menghapus array RAID-10. Saya menjaga kurangnya kinerja secara umum, bukan pengaturan tertentu. Ini adalah sistem pengujian, bukan mesin produksi.
wazoox
5
apakah raid 0 raid Anda sejajar dengan raid 6 raid Anda? Umumnya RAID berlapis adalah bidang yang sangat berbahaya dan tidak ok untuk mengasumsikan bahwa RAID yang diberikan akan bertindak seolah-olah itu adalah harddisk tunggal dengan kecepatan yang sama.
JamesRyan
1
Sudahkah Anda mencoba mengonfigurasi kartu Adaptec sebagai JBOD dan hanya melakukan RAID-10 dalam perangkat lunak (md)? itu tidak akan mengejutkan saya jika fitur RAID controller sebagian ditangani oleh driver, meniadakan keuntungan kinerja setelah Anda interleave dua RAID yang berbeda. md, di sisi lain, akan mencoba untuk mengoptimalkan akses ke setiap drive secara mandiri, mendekati waktu teoritis (jika tidak ada hambatan lain, tentu saja)
Javier
1
Itu tidak terdengar seperti penyelidikan yang mudah. Pada pandangan pertama saya akan mendukung kemungkinan bahwa stripingprogram tidak dapat melakukan melalui algoritma multi-threading. Karena Anda menggunakan soft RAID dari mdadm, saya sarankan Anda untuk melihat sumbernya.
e2-e4

Jawaban:

3

Sudahkah Anda mencoba menjalankan latencytop saat melakukan tolok ukur? mungkin bermanfaat untuk melihat syscall linux mana yang menjadi penyebab (jika ada).

Andika Triwidada
sumber
2

Sejauh ini yang saya tahu adalah kartu x8 PICe Gen 1 - laju data maksimum absolut yang dapat didukungnya adalah 2GBytes / detik dengan asumsi nol overhead. Adaptec sendiri hanya mengklaim bahwa kartu dapat mempertahankan 1,2Gbytes / detik paling baik dan Anda melebihi itu.

Dilengkapi dengan RAID dual-core RAID on Chip (RoC), konektivitas PCI Express x8 dan cache DDR 512MB, mereka menyediakan lebih dari 250.000 IO per detik dan 1.2GB / s.

Dugaan saya adalah bahwa karena Anda dapat secara signifikan melebihi kinerja yang diklaimnya dengan dua set RAID 0 yang bekerja secara independen dengan beban tambahan, kecil dan semuanya mungkin, striping menambah yang terlalu menekankan CPU RAID, atau mungkin subsistem RAM pada controller, pada GByte / detik dimuat.

Helvick
sumber
1
Saya tidak begitu mengerti ... Seperti yang diungkapkan oleh OP, menurut saya dia memiliki 2 pengontrol RAID, masing-masing menangani array RAID6. Kemudian dia RAID 0 dua RAID 6 array dalam perangkat lunak, yaitu. menggunakan Linux bawaan kernel RAID. Dalam hal ini, setiap pengontrol hanya menangani setengah dari beban, sehingga masing-masing pengontrol hanya perlu melakukan 780MB / s tulis dan 1GB / s dibaca. Kontroler telah membuktikan mereka dapat melakukan ini (sebelum perangkat lunak RAID ditambahkan). Jadi pengendali bus PCI-Express / RAID itu sendiri seharusnya tidak menjadi faktor pembatas?
Jesper M
Titik adil - melewatkan komentar pengontrol ganda (dan bagian lvm \ md yang menekankan itu). Maksudnya tentang tidak menjadi batasan bus sudah cukup terbukti saat itu.
Helvick