OS: Complete Teori Tuning I/O Performance

From OnnoWiki
Revision as of 16:21, 16 September 2023 by Onnowpurbo (talk | contribs) (→‎Switching I/O Scheduling)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Sumber: http://doc.opensuse.org/documentation/html/openSUSE/opensuse-tuning/cha.tuning.io.html


I/O scheduling mengontrol bagaimana operasi input/output akan dikirim ke storage. Linux memberikan berbagai algoritma I/O - disebut elevator - yang cocok untuk berbagai beban kerja. Elevators dapat membantu untuk mengurangi operasi seek (pencarian), dapat memprioritaskan permohonan I/O, dan memastikan permohonan I/O dilakukan sebelum deadline yang diberikan.

Memilih I/O elevator yang terbaik, tidak hanya tergantung pada beban kerja, tapi juga hardwqare. Sebuah disk ATA, SSD, RAID, atau sistem storage di jaringan, masing-masing membutuhkan strategi tuning yang berbeda.

Switching I/O Scheduling

Linux mengijinkan kita untuk menset I/O scheduler default saat boot pertama kali, ini dapat berubah sambil berjalan untuk masing-masing block device (harddisk dll). Hal ini memungkinkan kita untuk menset algoritma yang berbeda, misalnya untuk, device hosting partisi sistem dan device hosting sebuah database.

Secara default, scheduler CFQ (Completely Fair Queuing) akan digunakan. Ubah default ini dengan cara masuk ke boot parameter

elevator=SCHEDULER

Dimana SCHEDULER adalah salah satu dari cfq, noop, or deadline.

Unuk mengubah elevator dari device yang spesifik dalam sistem yang berjalan, jalankan perintah berikut:

echo SCHEDULER > /sys/block/DEVICE/queue/scheduler

dimana SCHEDULER adalah salah satu dari cfq, noop, atau deadline dan DEVICE adalah block device (contoh sda).

I/O Elevator Yang Tersedia

Elevator berikut tersedia di Linux. Setiap elevator mempunyai parameter yang dapat di tune, yang dapat di set menggunakan perintah berikut:

echo VALUE > /sys/block/DEVICE/queue/iosched/TUNABLE

dimana VALUE adalah nilai yang di inginkan untuk parameter TUNABLE dan blok DEVICE tertentu.

Untuk mengetahui elevator mana yang saat ini digunakan, jalankan perintah berikut:

cat /sys/block/sda/queue/scheduler

AKan tampak seperti di bawah ini, scheduler yang saat ini digunakan berada dalam kurung siku:

noop [deadline] cfq

CFQ (Completely Fair Queuing)

CFQ adalah scheduler yang berorientasi pada fairness dan digunakan secara default oleh Linux. Melalui algoritma ini setiap thread akan memperoleh pembagian yang adil dari throughput I/O. Algoritma ini juga memungkinkan kita menentukan prioritas task I/O yang akan di perhitungkan saat memutuskan scheduling,lihat perintah

man ionice

Scheduler CFQ mempunyai parameter tuneable berikut:

/sys/block/<device>/queue/iosched/slice_idle

Saat sebuah task tidak ada lagi I/O yang masuk pada timeslice-nya, I/O scheduler akan menungggu beberapa saat sebelum menjadwalkan thread selanjutnya untuk memperbaiki lokalitas I/O. Untuk media dimana lokalitas tidak terlalu menentukan (seperti SSD, SAN dengan banyak disk) menset /sys/block/<device>/queue/iosched/slice_idle menjadi 0 akan sangat memperbaiki throughput.

/sys/block/<device>/queue/iosched/quantum

Pilihan ini akan membatasi request maximum yang akan di proses sebuah device pada satu saat. Nilai default adalah 4. Untuk storage dengan beberapa disk, setting ini akan membatasi request paralel proses. Oleh karenanya, menaikan nilai-nya akan memperbaiki performance meskipun cara ini mungkin akan menyebabkan naiknya latency di beberapa I/O karena request di buffer dalam storage. Jika kita mengubah nilai ini, ada baiknya juga mentune /sys/block/<device>/queue/iosched/slice_async_rq (nilai default adalah 2) yang akan membatasi jumlah maximum request asinkron - biasanya request untuk menulis - yang di lakukan dalam satu time slice.

/sys/block/<device>/queue/iosched/low_latency

Untuk beban dimana latency I/O menjadi penting, menset /sys/block/<device>/queue/iosched/low_latency ke 1 akan menolong.

NOOP

scheduler sederhana yang hanya menyampaikan semua yang ditujukan dia langsung ke I/O. Akan sangat berguna untuk mencek apakah sebuah keputusan I/O scheduling dari scheduler lain tidak menyebabkan penurunan performance I/O.

Dalam beberapa kasus, scheduler ini sangat bermanfaat untuk device yang melakukan I/O scheduling sendiri, sebagai intelligent storage, atau device yang tidak tergantung pada gerakan mekanik, seperti SSD. Biasanya, DEADLINE I/O scheduler adalah pilihan yang baik untuk device ini, karena NOOP mempunyai overhead yang lebih sedikit ini akan memhasilkan performance yang lebih baik untuk beban kerja tertentu.

DEADLINE

DEADLINE adalah I/O scheduler yang berorientasi pada latency. Setiap I/O reuqest akan diberi deadline. Biasanya, request akan di simpan dalam antrian (read dan write) berdasarkan nomor sector. Algoritma DEADLINE memelihara dua antrian (read dan write) tambahan dimana request di simpan berdasarkan deadline. Selama tidak ada request yang time out, maka antrian "sector" yang akan digunakan. Jika terjadi time out, maka request dari antrian "deadline" akan digunakan sampai tidak adalah request yang habis masanya. Secara umum, algoritma ini lebih menyukai read daripada write.

Scheduler ini dapat memberikan throughput yang lebih baik daripada CFQ I/O scheduler pada saat dimana thread read dan write dan fairness (keadilan) bukan lagi masalah. Contoh, untuk beberapa proses read paralel dari SAN dan untuk database (terutama menggunakan "TCQ" disk). DEADLINE scheduler mempunyai parameter tunable berikut:

/sys/block/<device>/queue/iosched/writes_starved

Control berapa banyak read dapat dikirim ke disk sebelum dia dapat mengirim write. Nilai 3 berarti, untuk tiga operasi read dapat dilakukan satu operasi write.

/sys/block/<device>/queue/iosched/read_expire

Set deadline (waktu sekarang plus nilai read_expire) untuk operasi read dalam millisecond. Default adalah 500.

/sys/block/<device>/queue/iosched/write_expire

/sys/block/<device>/queue/iosched/read_expire set deadline (waktu sekarang plus read_expire) untuk operasi read dalam millisecond. Default adalah 500.

I/O Barrier Tuning

Kebanyakan file sistem (XFS, ext3, ext4, reiserfs) mengirim penghalang write ke disk sesudah fsync atau saat komit transaksi. Penghalang write memastikan urutan yang benar dari proses write, membuat disk write cache aman untuk digunakan (dengan sedikit pengurangan performance). Jika disk yang kita gunakan menggunakan backup batere, mematikan penghalang write akan secara aman menaikan performance.

Pengalang write dapat di disable mengunakan pilihan mount barrier=0 (untuk ext3, ext4, dan reiserfs), atau menggunakan pilihan mount nobarrier (atau XFS).

WARNING: mematikan barrier pada disk yang tidak dapat menggaransi crash saat penulisan terjadi mati lampu / listrik akan menyebabkan korup pada file system dan kehilangan data.

Referensi

Pranala Menarik

Secara Umum

Instalasi Linux

Compile Kernel

Remaster Linux

Sistem Operasi untuk Embedded

Membuat Firmware Sendiri

Flash ke Device

Beberapa Tip

Tuning Kernel

Tuning Kernel Scheduler

Tuning I/O Scheduler

Tuning Manajemen Memory

Android

Membuat Kernel Module

Monitoring & Benchmark