Difference between revisions of "OS: Complete Teori Tuning I/O Performance"

From OnnoWiki
Jump to navigation Jump to search
 
(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 mengset algoritma yang berbeda, misalnya untuk, device hosting partisi sistem dan device hosting sebuah database.
+
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 (lihat man 1 ionice)
+
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
 
 
-oriented scheduler and is used by default on openSUSE. The algorithm assigns each thread a time slice in which it is allowed to submit I/O to disk. This way each thread gets a fair share of I/O throughput. It also allows assigning tasks I/O priorities which are taken into account during scheduling decisions, 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.
 
 
This option limits the maximum number of requests that are being processed by the device at once. The default value is 4. For a storage with several disks, this setting can unnecessarily limit parallel processing of requests. Therefore, increasing the value can improve performance although this can cause that the latency of some I/O may be increased due to more requests being buffered inside the storage. When changing this value, you can also consider tuning /sys/block/<device>/queue/iosched/slice_async_rq (the default value is 2) which limits the maximum number of asynchronous requests—usually writing requests—that are submitted in one time slice.  
 
  
 
'''/sys/block/<device>/queue/iosched/low_latency'''
 
'''/sys/block/<device>/queue/iosched/low_latency'''
Line 64: Line 60:
 
===NOOP===
 
===NOOP===
  
A trivial scheduler that just passes down the I/O that comes to it. Useful for checking whether complex I/O scheduling decisions of other schedulers are not causing I/O performance regressions.
+
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.
  
In some cases it can be helpful for devices that do I/O scheduling themselves, as intelligent storage, or devices that do not depend on mechanical movement, like SSDs. Usually, the DEADLINE I/O scheduler is a better choice for these devices, but due to less overhead NOOP may produce better performance on certain workloads.
+
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 in cases where several threads read and write and fairness is not an issue. For example, for several parallel readers from a SAN and for databases (especially when using “TCQ” disks). The DEADLINE scheduler has the following tunable parameters:
+
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'''
  
Controls how many reads can be sent to disk before it is possible to send writes. A value of 3 means, that three read operations are carried out for one write operation.  
+
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'''
  
Sets the deadline (current time plus the read_expire value) for read operations in milliseconds. The default is 500.  
+
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 Sets the deadline (current time plus the read_expire value) for read operations in milliseconds. The default is 500.
+
/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==
  
Most file systems (XFS, ext3, ext4, reiserfs) send write barriers to disk after fsync or during transaction commits. Write barriers enforce proper ordering of writes, making volatile disk write caches safe to use (at some performance penalty). If your disks are battery-backed in one way or another, disabling barriers may safely improve performance.
+
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.
 
 
Sending write barriers can be disabled using the barrier=0 mount option (for ext3, ext4, and reiserfs), or using the nobarrier mount option (for XFS).
 
[Warning]
 
 
 
Disabling barriers when disks cannot guarantee caches are properly written in case of power failure can lead to severe file system corruption and data loss.
 
 
 
 
 
  
 +
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]]
* [[OS: Linux 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 Kernel Scheduler]]
+
 
* [[OS: Tuning Completely Fair Queueing CFQ I/O scheduler]]
+
====Tuning Manajemen Memory====
* [[OS: Tuning Completely Fair scheduler CFS]]
+
 
 +
* [[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]]
* [[OS: Membuat Kernel Modul]]
 

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

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