Mengoptimalkan SSD di Sistem Operasi Linux

Solid-state drive adalah perangkat penyimpanan solid-state yang menggunakan rangkaian sirkuit terintegrasi untuk menyimpan data secara terus-menerus, biasanya menggunakan memori flash dan berfungsi sebagai penyimpanan sekunder dalam hierarki penyimpanan komputer. Media penyimpanan SSD menggunakan komponen yang berbeda dengan HDD konvensional, oleh karena itu perawatan serta penggunaannya berbeda dengan HDD. Secara teori SSD memang jauh lebih cepat dibanding HDD, tetapi bukan berarti kamu bisa memperlakukannya sama dengan HDD.

Seiring berjalannya waktu, bertambahnya jumlah total penulisan data (Total Bytes Written) mempengaruhi umur SSD. Oleh karena itu, berikut ada beberapa penyesuaian yang harus dilakukan untuk mengoptimalkan solid-state drive pada sistem operasi linux agar tetap bekerja secara optimal dan panjang umur.

Aktifkan TRIM dan kurangi WRITE

TRIM memastikan bahwa ketika sistem operasi ingin menulis di sektor yang sama, data lama akan dihapus sepenuhnya tanpa sampah. Ini berjalan pada minimal kernel linux 3.8 atau lebih baru, dan menggunakan ext4 atau filesystem yang mendukung TRIM lainnya.

Pertama, edit filesystem table menggunakan text editor, misalnya nano.
$ sudo nano /etc/fstab

Tambahkan flag discard ke partisi root dan flag noatime ke masing-masing partisi yang berada di SSD.
# Static information about the filesystems.
# See fstab(5) for details.

# <file system>                             <dir> <type>  <options>                                               <dump> <pass>
# FileSystem on /dev/sda2 [Gentoo]
UUID=7f59e8fa-bfcf-4a53-a58c-08627d30a061    /     f2fs    discard,noatime,active_logs=2,compress_algorithm=lz4    0      0

# Boot EFI on /dev/sda1
UUID=E476-E614                               /boot vfat    noatime                                                 0      0
Untuk partisi f2fs sebenarnya tidak perlu menambahkan opsi discard, karena defaultnya otomatis hidup. Selain f2fs perlu menambahkan.

Selanjutnya, tambahkan 4 baris berikut sehingga menggunakan RAM sebagai penyimpanan untuk file temp dan log.
tmpfs   /tmp            tmpfs   noatime,mode=1777      0 0
tmpfs   /var/log        tmpfs   noatime,mode=0755      0 0
tmpfs   /var/spool      tmpfs   noatime,mode=1777      0 0
tmpfs   /var/tmp        tmpfs   noatime,mode=1777      0 0

Setelah reboot, jalankan TRIM secara berkala.
$ sudo fstrim -va


Mengubah nilai Swappiness

Parameter sysctl swappiness mewakili preferensi (penghindaran) kernel dari ruang swap. Swappiness dapat memiliki nilai antara 0 - 100, nilai standarnya adalah 60. Nilai yang rendah menyebabkan kernel menghindari penulisan swap, nilai yang lebih tinggi menyebabkan kernel mencoba menggunakan lebih banyak ruang swap. Menggunakan nilai rendah pada memori yang cukup diakui dapat meningkatkan daya tanggap (responsiveness) pada banyak sistem.

Debian dan Ubuntu
$ sudo nano /etc/sysctl.conf

Arch Linux
$ sudo nano /etc/sysctl.d/99-sysctl.conf
 
Kemudian, tambahkan dua baris ini pada kernel parameter sysctl.
vm.swappiness=1
vm.vfs_cache_pressure=50

Simpan konfigurasi dan reboot.

Mengubah I/O Scheduler (Advanced Preference)

Linux memberi opsi untuk memilih I/O scheduler. Secara default biasanya menggunakan mq-deadline atau bfq.

I/O scheduler berupaya meningkatkan throughput dengan menyusun ulang akses permintaan ke dalam urutan linear berdasarkan alamat logis dari data dan mencoba untuk mengelompokkannya bersama-sama. Meskipun hal ini dapat meningkatkan throughput keseluruhan, hal itu dapat menyebabkan beberapa permintaan I/O menunggu terlalu lama sehingga menyebabkan masalah latensi. I/O scheduler berupaya menyeimbangkan kebutuhan akan throughput tinggi dan mencoba membagi secara adil permintaan I/O diantara proses.

Berbagai pendekatan telah diambil untuk berbagai I/O scheduler dan masing-masing memiliki kekuatan dan kelemahan masing-masing dan aturan umumnya adalah bahwa tidak ada I/O scheduler default yang sempurna untuk semua rentang tuntutan I/O yang mungkin dialami oleh suatu sistem.

Ubuntu Wiki

Best I/O scheduler to use
Different I/O requirements may benefit from changing from the Ubuntu distro default. A quick start guide to select a suitable I/O scheduler is below. The results are based on running 25 different synthetic I/O patterns generated using fio on ext4, xfs and btrfs with the various I/O schedulers using the 5.3 kernel.

SSD or NVME drives
It is worth noting that there is little difference in throughput between the mq-deadline/none/bfq I/O schedulers when using fast multi-queue SSD configurations or fast NVME devices. In these cases it may be preferable to use the 'none' I/O scheduler to reduce CPU overhead.

HDD
Avoid using the none/noop I/O schedulers for a HDD as sorting requests on block addresses reduce the seek time latencies and neither of these I/O schedulers support this feature. mq-deadline has been shown to be advantageous for the more demanding server related I/O, however, desktop users may like to experiment with bfq as has been shown to load some applications faster.

Of course, your use-case may differ, the above are just suggestions to start with based on some synthetic tests. You may find other choices with adjustments to the I/O scheduler tunables produce better results.

ArchWiki

The best choice of scheduler depends on both the device and the exact nature of the workload. Also, the throughput in MB/s is not the only measure of performance: deadline or fairness deteriorate the overall throughput but may improve system responsiveness. Benchmarking may be useful to indicate each I/O scheduler performance.

Rekomendasi 

Untuk SSD disarankan untuk mengganti I/O scheduler menjadi none sedangkan untuk HDD gunakan mq-deadline atau bfq.

Pertama, cek I/O scheduler yang aktif sekarang ini.
$ grep "" /sys/block/*/queue/scheduler

Berikut contoh I/O scheduler yang aktif ditandai dengan kurung siku [bfq].
mq-deadline kyber [bfq] none
mq-deadline kyber [bfq] none

Kemudian, ubah I/O scheduler menjadi none pada langkah selanjutnya.

Kernel Boot Parameters

Ini berlaku untuk semua storage yang terpasang.
$ sudo nano /etc/default/grub

Tambahkan elevator=none ke baris GRUB_CMDLINE_LINUX_DEFAULT.
GRUB_CMDLINE_LINUX_DEFAULT="elevator=none quiet"

Update konfigurasi GRUB.
$ sudo update-grub
 

Udev Rules

Ini lebih powerful. Dengan udev rules kita dapat mengkonfigurasi banyak storage, tidak hanya untuk perangkat komputer yang menggunakan satu storage saja.
$ sudo nano /etc/udev/rules.d/60-ioschedulers.rules

Untuk NVME tambahkan baris berikut.
ACTION=="add|change", KERNEL=="nvme[0-9]n[0-9]", ATTR{queue/scheduler}="none"

Untuk SATA tambahkan baris berikut.
ACTION=="add|change", KERNEL=="sd[a-z]|mmcblk[0-9]*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"

Simpan konfigurasi dan reboot.


Bagaimana cukup mudah kan?  
Cukup itu yang dapat saya berikan.

Semoga bermanfaat bagi kalian semua.  
Terima Kasih.

Posting Komentar untuk "Mengoptimalkan SSD di Sistem Operasi Linux"