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?
sumber
striping
program tidak dapat melakukan melalui algoritma multi-threading. Karena Anda menggunakan soft RAID darimdadm
, saya sarankan Anda untuk melihat sumbernya.Jawaban:
Sudahkah Anda mencoba menjalankan latencytop saat melakukan tolok ukur? mungkin bermanfaat untuk melihat syscall linux mana yang menjadi penyebab (jika ada).
sumber
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.
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.
sumber