Aktivasi zram

Beberapa tahun ini perkembangan dunia opensource bagus. Berbagai teknologi berkembang. Di antara teknologi tersebut adalah grafis yang semakin menawan, lebih tajam, dan disertai efek-efek yang sangat menarik. Perkembangan dari sisi software berjalan beriringan dengan hardware. Semakin tinggi spesifikasi hardware semakin baik grafis yang dihasilkan. Demikian pula sebaliknya, apabila ingin interface yang aduhai menawan, seyogyanya diimbangi hardware yang mumpuni.

Perangkat yang penulis gunakan saat ini bisa dikatakan ketinggalan jaman. Tahun 2016, dengan RAM hanya 2 GB untuk komputasi perkantoran sehari-hari sangat layak dan bisa diandalkan. Namun, saat ini, saat kebutuhan multitasking meningkat pesat, terlebih di era work from home (WFH), beberapa aplikasi dijalankan sekaligus bersama-sama, apalagi ditambah dengan faktor U perangkatnya, RAM 2 GB terasa cepat penuh.

Upgrade RAM? RAM-nya onboard. Di sinilah keuntungan menggunakan linux penulis rasakan. Linux yang opensource dikembangkan banyak orang. Ribuan orang bergotong-royong membuat semakin baik dari masa ke masa untuk semua kalangan. Tak terkecuali kalangan dengan hardware jadul semacam penulis.

Solusi itu bernama zram. Dengan zram sebagian proses di RAM akan dikompres sehingga menghemat RAM. RAM lebih lega. Sisa kapasitas RAM masih bisa digunakan untuk yang lainnya. Misal, tanpa zram menjalankan zoom meeting dengan share screen libreoffice impress yang berjalan dalam DE Plasma 5, terasa agak lambat saat pindah slide presentasi. Dengan zram tidak lagi terjadi.

Bukankah ada partisi swap? Betul, tetapi swap menggunakan harddisk sedangkan zram memakai RAM. Kecepatan olah data lebih cepat menggunakan RAM.

Oke, sekarang bagaimana teknisnya?

Buat file /etc/rc.d/rc.zram. File ini akan dieksekusi segera setelah booting.

#!/bin/bash

if [ -r /etc/default/zram ]; then
  . /etc/default/zram
else
  # See /sys/block/zramX/comp_algo for available compression algorithm
  ZRAMCOMP=zstd

  # ZRAM device to use
  ZRAMDEV=/dev/zram0
  # Or if you want to use last available zram device
  #ZRAMDEV=$(/sbin/zramctl -f)

  # Set it to fixed value in gigabytes, for example 4GB:
  ZRAMSIZE="1G"
  # Or calculate by divide total available RAM by DIVNUM. Change it as you wish.
  #DIVNUM=3

  # Use higher priority than on-disk swap, priority is a value between -1 and 32767
  SWAPPRIORITY=100
fi

f_test() {
  # Disable zswap
  if [ "$(cat /sys/module/zswap/parameters/enabled)" = "Y" ]; then
    echo 0 >/sys/module/zswap/parameters/enabled
  fi
  if /sbin/swaplabel $ZRAMDEV 2>/dev/null | grep -q 'UUID:'; then
    if cat /proc/swaps | grep -q "$ZRAMDEV"; then
      return 0
    else
      return 1
    fi
  else
    return 2
  fi
}

f_create() {
  f_test
  retval=$?
  if [ $retval -eq 2 ]; then
    echo "Formatting $ZRAMDEV"
    /sbin/zramctl -a ${ZRAMCOMP} -s ${ZRAMSIZE} ${ZRAMDEV}
    /sbin/mkswap -f -L ZRAMSWAP ${ZRAMDEV} >/dev/null
  fi
}

f_start() {
  f_test
  retval=$?
  if [ $retval -eq 1 ]; then
    echo "Starting $ZRAMDEV"
    /sbin/swapon -p ${SWAPPRIORITY} ${ZRAMDEV}
  fi
}

f_stop() {
  f_test
  retval=$?
  if [ $retval -eq 0 ]; then
    echo "Stopping $ZRAMDEV"
    /sbin/swapoff ${ZRAMDEV}
  fi
}

f_reset() {
  f_test
  retval=$?
  if [ $retval -eq 1 ]; then
    echo -n "Resetting $ZRAMDEV"
    echo 1 >/sys/block/$(basename $ZRAMDEV)/reset
  fi
}

case "$1" in
  create)
    f_create
    ;;
  start)
    f_create
    f_start
    ;;
  stop)
    f_stop
    ;;
  restart)
    f_stop
    sleep 1
    f_start
    ;;
  reset)
    f_reset
    ;;
  forcereset)
    f_stop
    sleep 1
    f_reset
    ;;
  status)
    f_test
    retval=$?
    echo -n "Status $ZRAMDEV: "
    if [ $retval -eq 0 ]; then
      echo "active"
    else
      echo "not active"
    fi
    ;;
  *)
    echo "$0: create|start|stop|restart|reset|forcereset|status"
esac

Di sini, 50% RAM digunakan untuk zram. Maka ZRAMSIZE 1G.

Jangan lupa beri hak akses eksekusi. Command dijalankan oleh root.

$ chmod +x /etc/rc.d/rc.zram

Kemudian sertakan ke /etc/rc.d/rc.local.

if [ -x /etc/rc.d/rc.zram ]; then
		/etc/rc.d/rc.zram start
fi

Kemudian pastikan kernel modul zram bisa di-load. Secara default modul zram bersifat modular yang tidak secara otomatis load. Ada 2 cara

  1. Memasukkan ke dalam initrd. Penulis terbiasa membuat initrd dengan bantuan mkinird_command_generator. Di sini ditambahkan -m zram. Sehingga pembuatannya initrd-nya (command dijalankan oleh root. Ini sangat mungkin berbeda dengan milik pembaca. Berbeda dari sisi versi kernel (opsi -k), partisi root (opsi -r), modul yang di-load dan lokasi initrd yang diinginkan. Secara default di /boot (opsi -o). Tapi penulis di /boot/efi/EFI/Slackware.
mkinitrd -c -k 5.10.10 -f ext4 -r /dev/sda3 -m xhci-pci:ohci-pci:ehci-pci:xhci-hcd:uhci-hcd:ehci-hcd:hid:usbhid:i2c-hid:hid_generic:hid-asus:hid-cherry:hid-logitech:hid-logitech-dj:hid-logitech-hidpp:hid-lenovo:hid-microsoft:hid_multitouch:jbd2:mbcache:ext4:zram -u -o /boot/initrd.gz

Kemudian sertakan initrd ke boot loader. Penulis gunakan boot loader elilo dengan kernel generic, initrd-nya initrd.gz

image=generic
    label=generic
    initrd=initrd.gz
    read-only
    append="root=/dev/sda3 vga=normal ro"
  1. Menggunakan modprobe. Modul zram di-load belakangan. Pada bagian awal dari /etc/rc.d/rc.zram (bisa tepat di bawah shebang/baris 2) tambahkan
modprobe zram

Selesai, selamat menikmati.

Pada kasus ini, tampak bahwa penggunaan zram 24,8 MB (dengan kompresi), sedangkan apabila tanpa dikompres atau tanpa zram membutuhkan memory 177 MB.

 Share!

 
comments powered by Disqus