Difference between revisions of "OS: Complete Teori Tuning I/O Performance"
Onnowpurbo (talk | contribs) |
Onnowpurbo (talk | contribs) |
||
(9 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
==Switching I/O Scheduling== | ==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 | + | 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 | Secara default, scheduler CFQ (Completely Fair Queuing) akan digunakan. Ubah default ini dengan cara masuk ke boot parameter | ||
Line 40: | Line 40: | ||
===CFQ (Completely Fair Queuing)=== | ===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 | + | 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 | man ionice | ||
Line 54: | Line 52: | ||
'''/sys/block/<device>/queue/iosched/quantum''' | '''/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. | + | 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''' | '''/sys/block/<device>/queue/iosched/low_latency''' | ||
Line 64: | Line 60: | ||
===NOOP=== | ===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=== | ||
Line 72: | Line 68: | ||
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. | 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 | + | 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''' | '''/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''' | '''/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/write_expire''' | ||
− | sys/block/<device>/queue/iosched/read_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== | ==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== | ==Referensi== | ||
Line 108: | Line 99: | ||
* [[Linux]] | * [[Linux]] | ||
* [[Ubuntu]] | * [[Ubuntu]] | ||
+ | * [[Buku Sistem Operasi]] | ||
+ | |||
+ | ===Secara Umum=== | ||
+ | |||
* [[Sistem Operasi]] | * [[Sistem Operasi]] | ||
+ | |||
+ | ===Instalasi Linux=== | ||
+ | |||
+ | * [[Linux: CLI untuk Survival]] | ||
+ | * [[Linux: Skema Partisi di Linux]] | ||
+ | * [[Linux: Instalasi Sistem Operasi]] | ||
+ | * [[Membuat Repository Ubuntu Lokal menggunakan debmirror]] | ||
+ | |||
+ | ===Compile Kernel=== | ||
+ | |||
* [[Kernel]] | * [[Kernel]] | ||
+ | * [[OS: Linux Kernel]] | ||
+ | * [[Kernel: Anatomi Kernel Source]] | ||
* [[Compile Kernel]] | * [[Compile Kernel]] | ||
− | * [[ | + | * [[Compile Kernel: Konfigurasi Kernel]] |
+ | |||
+ | ===Remaster Linux=== | ||
+ | |||
+ | * [[Cara Cepat Melakukan Remastering Ubuntu]] | ||
+ | |||
+ | ===Sistem Operasi untuk Embedded=== | ||
+ | |||
+ | * [[OpenWRT]] | ||
+ | * [[OpenWRT: Download Firmware yang sudah jadi]] | ||
+ | * [[OpenWRT: Source Repository Download]] | ||
+ | * [[OpenWRT: Melihat Daftar Package]] | ||
+ | |||
+ | ====Membuat Firmware Sendiri==== | ||
+ | |||
+ | * [[OpenWRT: Build Firmware]] | ||
+ | * [[OpenWRT: Build Firmware Buffalo WZRHPG450H]] | ||
+ | * [[OpenWRT: Build Firmware Buffalo WZRHPG300N]] | ||
+ | * [[OpenWRT: Build Firmware Ubiquiti NanoStation2]] | ||
+ | * [[OpenWRT: Build Firmware Mikrotik RB433]] | ||
+ | * [[OpenWRT: Build Firmware Linksys WRT160NL]] | ||
+ | * [[OpenWRT: Build Firmware Linksys WRT54GL]] | ||
+ | |||
+ | ====Flash ke Device==== | ||
+ | |||
+ | * [[OpenWRT: Flash Linksys WRT54GL]] | ||
+ | * [[OpenWRT: Flash Buffalo WZRHP450H]] | ||
+ | * [[OpenWRT: Flash Buffalo WZRHP300N]] | ||
+ | * [[OpenWRT: Flash UBNT NanoStation2]] | ||
+ | * [[OpenWRT: Flash Linksys WRT160NL]] | ||
+ | |||
+ | ====Beberapa Tip==== | ||
+ | |||
+ | * [[OpenWRT: Mikrotik RB433]] | ||
+ | * [[OpenWRT: 3G modem]] | ||
+ | * [[OpenWRT: Build Firmware dengan 3G Modem Support]] | ||
+ | * [[OpenWRT: Setup Firewall]] | ||
+ | * [[OpenWRT: Konfigurasi UBNT NanoStation2 tanpa WebGUI]] | ||
+ | |||
+ | ===Tuning Kernel=== | ||
+ | |||
* [[OS: Parameter Kernel Default]] | * [[OS: Parameter Kernel Default]] | ||
+ | |||
+ | ====Tuning Kernel Scheduler==== | ||
+ | |||
* [[OS: Kernel Scheduler]] | * [[OS: Kernel Scheduler]] | ||
+ | * [[OS: Tuning Kernel Scheduler]] | ||
+ | * [[OS: Tuning Completely Fair scheduler CFS]] | ||
* [[OS: Complete Teori Tuning Kernel Scheduler]] | * [[OS: Complete Teori Tuning Kernel Scheduler]] | ||
+ | |||
+ | ====Tuning I/O Scheduler==== | ||
+ | |||
+ | * [[OS: Tuning Completely Fair Queueing CFQ I/O scheduler]] | ||
* [[OS: Complete Teori Tuning I/O Performance]] | * [[OS: Complete Teori Tuning I/O Performance]] | ||
− | * [[OS: Tuning | + | |
− | * [[OS: | + | ====Tuning Manajemen Memory==== |
− | * [[OS: | + | |
+ | * [[OS: Tuning Manajemen Memory]] | ||
+ | |||
+ | ===Android=== | ||
+ | |||
+ | * [[OS: Android - Download]] | ||
+ | |||
+ | ===Membuat Kernel Module=== | ||
+ | |||
+ | * [[OS: Mengerti System Call]] | ||
+ | * [[OS: Membuat Kernel Modul]] | ||
+ | |||
+ | ===Monitoring & Benchmark=== | ||
+ | |||
* [[OS: Build in Monitoring Tool]] | * [[OS: Build in Monitoring Tool]] | ||
* [[Linux Benchmarking]] | * [[Linux Benchmarking]] | ||
* [[OS: Benchmarking menggunakan UnixBench]] | * [[OS: Benchmarking menggunakan UnixBench]] | ||
* [[OS: Benchmarking menggunakan LLCBench]] | * [[OS: Benchmarking menggunakan LLCBench]] | ||
− |
Latest revision as of 16:21, 16 September 2023
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
- http://doc.opensuse.org/documentation/html/openSUSE/opensuse-tuning/book.tuning.html
- http://doc.opensuse.org/documentation/html/openSUSE/opensuse-tuning/cha.tuning.io.html
Pranala Menarik
Secara Umum
Instalasi Linux
- Linux: CLI untuk Survival
- Linux: Skema Partisi di Linux
- Linux: Instalasi Sistem Operasi
- Membuat Repository Ubuntu Lokal menggunakan debmirror
Compile Kernel
- Kernel
- OS: Linux Kernel
- Kernel: Anatomi Kernel Source
- Compile Kernel
- Compile Kernel: Konfigurasi Kernel
Remaster Linux
Sistem Operasi untuk Embedded
- OpenWRT
- OpenWRT: Download Firmware yang sudah jadi
- OpenWRT: Source Repository Download
- OpenWRT: Melihat Daftar Package
Membuat Firmware Sendiri
- OpenWRT: Build Firmware
- OpenWRT: Build Firmware Buffalo WZRHPG450H
- OpenWRT: Build Firmware Buffalo WZRHPG300N
- OpenWRT: Build Firmware Ubiquiti NanoStation2
- OpenWRT: Build Firmware Mikrotik RB433
- OpenWRT: Build Firmware Linksys WRT160NL
- OpenWRT: Build Firmware Linksys WRT54GL
Flash ke Device
- OpenWRT: Flash Linksys WRT54GL
- OpenWRT: Flash Buffalo WZRHP450H
- OpenWRT: Flash Buffalo WZRHP300N
- OpenWRT: Flash UBNT NanoStation2
- OpenWRT: Flash Linksys WRT160NL
Beberapa Tip
- OpenWRT: Mikrotik RB433
- OpenWRT: 3G modem
- OpenWRT: Build Firmware dengan 3G Modem Support
- OpenWRT: Setup Firewall
- OpenWRT: Konfigurasi UBNT NanoStation2 tanpa WebGUI
Tuning Kernel
Tuning Kernel Scheduler
- OS: Kernel Scheduler
- OS: Tuning Kernel Scheduler
- OS: Tuning Completely Fair scheduler CFS
- OS: Complete Teori Tuning Kernel Scheduler