Sebagian besar sistem Linux yang saya kelola memiliki fitur pengontrol RAID perangkat keras (kebanyakan HP Smart Array ). Mereka semua menjalankan RHEL atau CentOS.
Saya mencari tunable dunia nyata untuk membantu mengoptimalkan kinerja untuk pengaturan yang menggabungkan pengontrol RAID perangkat keras dengan disk SAS (Smart Array, Perc, LSI, dll.) Dan cache yang didukung oleh baterai atau cache yang didukung flash. Asumsikan RAID 1 + 0 dan beberapa spindel (4+ disk).
Saya menghabiskan banyak waktu menyetel pengaturan jaringan Linux untuk latensi rendah dan aplikasi perdagangan finansial. Tetapi banyak dari opsi-opsi tersebut didokumentasikan dengan baik (mengubah buffer kirim / terima, mengubah pengaturan jendela TCP, dll.). Apa yang dilakukan para insinyur di sisi penyimpanan?
Secara historis, saya telah membuat perubahan pada lift penjadwalan I / O , baru-baru ini memilih deadline
dan noop
penjadwal untuk meningkatkan kinerja dalam aplikasi saya. Karena versi RHEL telah mengalami kemajuan, saya juga memperhatikan bahwa default yang dikompilasi untuk perangkat blok SCSI dan CCISS telah berubah juga. Ini berdampak pada pengaturan subsistem penyimpanan yang disarankan dari waktu ke waktu. Namun, sudah beberapa saat sejak saya melihat rekomendasi yang jelas. Dan saya tahu bahwa standar OS tidak optimal. Sebagai contoh, tampaknya buffer read-ahead standar 128kb sangat kecil untuk penyebaran pada perangkat keras kelas server.
Artikel-artikel berikut mengeksplorasi dampak kinerja dari mengubah cache baca-depan dan nilai nr_requests pada antrian blok.
http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with -linux-why-tuning-really-matter
http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html
Misalnya, ini adalah perubahan yang disarankan untuk pengontrol RAID Cerdas Array:
echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb
Apa lagi yang bisa disetel secara andal untuk meningkatkan kinerja penyimpanan?
Saya secara khusus mencari opsi sysctl dan sysfs dalam skenario produksi.
Lebih dari segalanya, semuanya tergantung pada beban kerja Anda.
read_ahead_kb
dapat membantu Anda jika sangat membantu untuk membaca banyak data dari beberapa file sebelumnya, seperti saat streaming video. Terkadang itu bisa sangat menyakitimu. Ya, 128 KB default bisa terdengar kecil, tetapi dengan konkurensi yang cukup mulai terdengar seperti besar! Di sisi lain, dengan server seperti server pengkodean video yang hanya mengubah video dari satu format ke format lain, itu mungkin ide yang sangat bagus untuk disesuaikan.nr_requests
, ketika overtuned, dapat dengan mudah membanjiri controller RAID Anda, yang lagi-lagi mengganggu kinerja.Di dunia nyata, Anda perlu menonton latensi . Jika Anda terhubung ke SAN, lihatlah
iostat
,sar
atau apa pun yang Anda suka gunakan, dan lihat apakah I / O meminta waktu layanan melalui atap. Tentu saja ini juga membantu disk lokal: jika latensi sangat besar, pertimbangkan untuk menyetel pengaturan lift I / O Anda dengan menurunkan versi max_requests dan pengaturan lainnya.sumber
FYI
read_ahead_kb
danblockdev --setra
hanya cara berbeda untuk mengatur pengaturan yang sama menggunakan unit yang berbeda (kB vs sektor):Sehingga
dalam contoh Anda tidak memiliki efek.
sumber