Terkadang kita hanya melihat performance suatu server hanya dari ram dan processor yang dimiliki. akan tetapi peran disk storage sangatlah penting juga untuk mejadi pertimbangan untuk menentukan performance suatu server.
Berikut ada 2 hal yang perlu di perhitungkan yaitu IO dan IOPS.
apa itu IO?
umumnya kita mengetahui IO adalah Input Output. dalam kasus ini IO yang dimaksud adalah kecepatan baca (read) dan tulis (write) suatu hardisk.
dalam menentukan kecepatan baca dan tulis juga dapat dibagi menjadi 2 hal yaitu baca/tulis berurutan (write/read seq) atau bisa juga baca/tulis random (write/read random)
berikut contoh ilustrasi sederhana untuk membedakan baca/tulis berurutan atau secara random. jika kita melakukan copy 1 file sebesar 2Gb, maka hal tsb dianggap write seq karena dia menulis secara berurutan dan secara general yang bersifat berurutan akan menghasilkan speed yang lebih cepat daripada yang random. dalam hal ini copy file anda akan terasa cukup cepat mungkin katakanlah memakan waktu 30 detik lamanya proses copy 1 file tsb. akan tetapi jika anda melakukan copy 1 folder dimana didalam folder tersebut terdapat 1000 picture yang di total besarnya sama yaitu 2Gb. proses copy yang dilakukan akan memakan waktu lebih lama daripada 1 file 2Gb. karena file yang di copy adalah random / tidak berurutan sehingga hardisk memerlukan waktu untuk seek time / waktu untuk mencari lokasi 1000 picture tersebut baru di copy.
Memang kita sadari sering kali operasi yang kita gunakan adalah read/write random. maka dari itu solusi untuk saat ini adalah menggunakan SSD Storage atau bahkan NVME Storage. Dimana dia tidak lagi menggunakan piringan disk tetapi berbentuk seperti chip yang proses nya sangat cepat dalam melakukan pencarian lokasi data dan sangat menghemat waktu.
apa itu IOPS?
IOPS kepanjangan dari Input Output Per Second. dimana dapat diartikan berapa banyak proses IO yang dapat dilakukan secara bersamaan dalam 1 detik? Kasus ini banyak dijumpai ketika kita memerlukan akses write/read bersamaan secara cepat seperti aplikasi yang berkaitan dengan database. Peran storage sangat penting. Kembali lagi untuk mendapatkan IOPS yang tinggi pastilah SSD storage pemenangnya.
sebagai contoh membuka suatu aplikasi secara bersamaan akan terasa sangat ringan jika menggunakan storage SSD dibanding HDD karena SSD memiliki nilai IOPS yang jauh diatas dan memungkinkan melakukan proses IO secara bersamaan dengan cepat sekali.
bagaimana mengukur kecepatan IO suatu disk?
umum kita menggunakan perintah DD khususnya di linux OS.dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
hendranata@hendranata-N46VZ:~$ dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync
16384+0 records in
16384+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 3,47935 s, 309 MB/s
perintah diatas artinya menulis file 64kb sebanyak 16rb kali dengan nama file test.
hasil yang didapat jika menggunakan SSD pasti akan lebih besar kisaran 400-600Mb/s
bagaimana mengukur kecepatan IOPS suatu disk?
paling mudah menggunakan aplikasi bernama fio.install di centos: sudo yum install fio
install di ubuntu: sudo apt-get install fio
jalankan perintah dibawah ini untuk melakukan Random read/write performance:fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.10
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m(1)] [100.0% done] [171.5MB/58869KB/0KB /s] [43.9K/14.8K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=25257: Sun May 13 13:08:14 2018
read : io=3071.7MB, bw=184643KB/s, iops=46160, runt= 17035msec
write: io=1024.4MB, bw=61574KB/s, iops=15393, runt= 17035msec
cpu : usr=17.54%, sys=77.70%, ctx=111004, majf=0, minf=9
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64
Run status group 0 (all jobs):
READ: io=3071.7MB, aggrb=184642KB/s, minb=184642KB/s, maxb=184642KB/s, mint=17035msec, maxt=17035msec
WRITE: io=1024.4MB, aggrb=61574KB/s, minb=61574KB/s, maxb=61574KB/s, mint=17035msec, maxt=17035msec
Disk stats (read/write):
sda: ios=777565/259413, merge=67/26, ticks=298436/46192, in_queue=345484, util=98.26%
bisa juga jalankan ini untuk Random read performance:fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread
dan Random write performance:fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite