Saya mencoba untuk mengoptimalkan pengaturan penyimpanan pada beberapa perangkat keras Sun dengan Linux. Pikiran apa pun akan sangat dihargai.
Kami memiliki perangkat keras berikut:
- Sun Blade X6270
- 2 * pengendali LSISAS1068E SAS
- 2 * Sun J4400 JBODs dengan 1 TB disk (24 disk per JBOD)
- Fedora Core 12
- 2.6.33 rilis kernel dari FC13 (juga mencoba dengan kernel 2.6.31 terbaru dari FC12, hasil yang sama)
Berikut datasheet untuk perangkat keras SAS:
http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf
Ini menggunakan PCI Express 1.0a, 8x jalur. Dengan bandwidth 250 MB / detik per lajur, kita harus dapat melakukan 2.000 MB / detik per pengontrol SAS.
Setiap pengontrol dapat melakukan 3 Gb / detik per port dan memiliki dua 4 port PHY. Kami menghubungkan kedua PHY dari pengontrol ke JBOD. Jadi antara JBOD dan pengontrol kami memiliki 2 PHYs * 4 port SAS * 3 Gb / detik = 24 Gb / detik bandwidth, yang lebih dari bandwidth PCI Express.
Dengan caching tulis diaktifkan dan saat melakukan penulisan besar, setiap disk dapat mempertahankan sekitar 80 MB / detik (dekat awal disk). Dengan 24 disk, itu artinya kita harus mampu melakukan 1920 MB / detik per JBOD.
multipath { rr_min_io 100 uid 0 path_grouping_policy multibus manual failback path_selector "round-robin 0" rr_weight priority alias somealias antrian no_path_retry mode 0644 gid 0 wwid sometwid }
Saya mencoba nilai 50, 100, 1000 untuk rr_min_io, tetapi sepertinya tidak ada banyak perbedaan.
Seiring dengan rr_min_io yang bervariasi saya mencoba menambahkan beberapa penundaan antara memulai dd untuk mencegah mereka semua menulis PHY yang sama pada saat yang sama, tetapi ini tidak membuat perbedaan, jadi saya pikir I / O semakin menyebar dengan baik.
Menurut / proc / interupsi, pengendali SAS menggunakan skema interupsi "IR-IO-APIC-fasteoi". Untuk beberapa alasan, hanya inti # 0 di mesin yang menangani gangguan ini. Saya dapat meningkatkan kinerja sedikit dengan menetapkan inti terpisah untuk menangani interupsi untuk setiap pengontrol SAS:
gema 2> / proc / irq / 24 / smp_affinity gema 4> / proc / irq / 26 / smp_affinity
Menggunakan dd untuk menulis ke disk menghasilkan "Function call interrupts" (tidak tahu apa ini), yang ditangani oleh core # 4, jadi saya menjaga proses lain dari core ini juga.
Saya menjalankan 48 dd (satu untuk setiap disk), menugaskan mereka ke core yang tidak berurusan dengan interupsi seperti:
tasket -c somecore dd if = / dev / nol = / dev / mapper / mpathx oflag = langsung bs = 128M
oflag = langsung mencegah segala jenis cache buffer terlibat.
Tak satu pun dari inti saya yang tampak maksimal. Core yang berurusan dengan interupsi sebagian besar menganggur dan semua core lainnya menunggu pada I / O seperti yang diharapkan.
Cpu0: 0,0% us, 1,0% sy, 0,0% ni, 91,2% id, 7,5% wa, 0,0% hi, 0,2% si, 0,0% st Cpu1: 0,0% us, 0,8% sy, 0,0% ni, 93,0% id, 0,2% wa, 0,0% hi, 6,0% si, 0,0% st Cpu2: 0,0% us, 0,6% sy, 0,0% ni, 94,4% id, 0,1% wa, 0,0% hi, 4,8% si, 0,0% st Cpu3: 0,0% us, 7,5% sy, 0,0% ni, 36,3% id, 56,1% wa, 0,0% hi, 0,0% si, 0,0% st Cpu4: 0,0% us, 1,3% sy, 0,0% ni, 85,7% id, 4,9% wa, 0,0% hi, 8,1% si, 0,0% st Cpu5: 0,1% us, 5,5% sy, 0,0% ni, 36,2% id, 58,3% wa, 0,0% hi, 0,0% si, 0,0% st Cpu6: 0,0% us, 5,0% sy, 0,0% ni, 36,3% id, 58,7% wa, 0,0% hi, 0,0% si, 0,0% st Cpu7: 0,0% us, 5,1% sy, 0,0% ni, 36,3% id, 58,5% wa, 0,0% hi, 0,0% si, 0,0% st Cpu8: 0,1% us, 8,3% sy, 0,0% ni, 27,2% id, 64,4% wa, 0,0% hi, 0,0% si, 0,0% st Cpu9: 0,1% us, 7,9% sy, 0,0% ni, 36,2% id, 55,8% wa, 0,0% hi, 0,0% si, 0,0% st Cpu10: 0,0% us, 7,8% sy, 0,0% ni, 36,2% id, 56,0% wa, 0,0% hi, 0,0% si, 0,0% st Cpu11: 0,0% us, 7,3% sy, 0,0% ni, 36,3% id, 56,4% wa, 0,0% hi, 0,0% si, 0,0% st Cpu12: 0,0% us, 5,6% sy, 0,0% ni, 33,1% id, 61,2% wa, 0,0% hi, 0,0% si, 0,0% st Cpu13: 0,1% us, 5,3% sy, 0,0% ni, 36,1% id, 58,5% wa, 0,0% hi, 0,0% si, 0,0% st Cpu14: 0,0% us, 4,9% sy, 0,0% ni, 36,4% id, 58,7% wa, 0,0% hi, 0,0% si, 0,0% st Cpu15: 0,1% us, 5,4% sy, 0,0% ni, 36,5% id, 58,1% wa, 0,0% hi, 0,0% si, 0,0% st
Mengingat semua ini, throughput yang dilaporkan dengan menjalankan "dstat 10" berada di kisaran 2200-2300 MB / detik.
Mengingat matematika di atas saya akan mengharapkan sesuatu dalam kisaran 2 * 1920 ~ = 3600+ MB / detik.
Adakah yang tahu di mana bandwidth saya yang hilang pergi?
Terima kasih!