PENGUJIAN ALGORITME-ALGORITME PENYEIMBANG BEBAN STATIS
HANIF AMAL ROBBANI
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
PERNYATAAN MENGENAI SKRIPSI DAN SUMBER INFORMASI SERTA PELIMPAHAN HAK CIPTA* Dengan ini saya menyatakan bahwa skripsi berjudul Pengujian AlgoritmeAlgoritme Penyeimbang Beban Statis adalah benar karya saya dengan arahan dari komisi pembimbing dan belum diajukan dalam bentuk apa pun kepada perguruan tinggi mana pun. Sumber informasi yang berasal atau dikutip dari karya yang diterbitkan maupun tidak diterbitkan dari penulis lain telah disebutkan dalam teks dan dicantumkan dalam Daftar Pustaka di bagian akhir skripsi ini. Dengan ini saya melimpahkan hak cipta dari karya tulis saya kepada Institut Pertanian Bogor. Bogor, Juli 2013 Hanif Amal Robbani NIM G64080098
ABSTRAK HANIF AMAL ROBBANI. Pengujian Algoritme-Algoritme Penyeimbang Beban Statis. Dibimbing oleh HENDRA RAHMAWAN. Pada penelitian ini dibuat sebuah prototipe program penyeimbang beban. Program tersebut dapat dijalankan menggunakan salah satu dari empat buah algoritme penyeimbang beban, yaitu algoritme round robin, randomized, central manager, dan threshold. Keempat algoritme tersebut diuji dan dibandingkan kinerjanya berdasarkan ukuran kecepatan waktu eksekusi dan kemerataan distribusi beban. Adapun indikator beban yang digunakan untuk algoritme central manager dan threshold adalah CPU, memori, dan I/O harddisk. Pengujian keempat algoritme dilakukan terhadap tiga jenis program dengan dominasi berbeda pada beban instruksi CPU, akses memori, dan akses I/O harddisk. Dari hasil analisis pengujian dapat ditarik kesimpulan secara umum bahwa tidak ada algoritme yang dominan. Algoritme central manager, round robin, dan randomized bergantian muncul sebagai algoritme terbaik pada skenario percobaan yang berbeda. Hasil pengujian juga menunjukkan bahwa algoritme threshold tidak dapat mendistribusikan beban semerata ketiga algoritme lainnya. Kata kunci: algoritme penyeimbang beban statis, indeks beban, MPI.NET, penyeimbangan beban
ABSTRACT HANIF AMAL ROBBANI. The Testing of Static Load Balancing Algorithms. Supervised by HENDRA RAHMAWAN. In this research, a prototype of load balancing program was created. The program can be run using one of four load balancing algorithms namely: round robin, randomized, central manager, and threshold. The four algorithms were tested and their performance were compared based on the measurement of execution time and load distribution evenness. Load indices to compare the central manager and threshold algorithms were CPU, memory, and harddisk I/O. Three types of programs with different domination in CPU instruction load, memory access, and harddisk I/O were used for testing purposes. The results showed that there was no dominant algorithm. Round robin, randomized, and central manager algorithms emerged alternately as the best algorithms in different test scenarios. It was also found that threshold algorithm was unable to distribute load as even as the other three algorithms. Keywords: load balancing, static load balancing, load index, MPI.NET
PENGUJIAN ALGORITME-ALGORITME PENYEIMBANG BEBAN STATIS
HANIF AMAL ROBBANI
Skripsi sebagai salah satu syarat untuk memperoleh gelar Sarjana Komputer pada Departemen Ilmu Komputer
DEPARTEMEN ILMU KOMPUTER FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM INSTITUT PERTANIAN BOGOR BOGOR 2013
Judul Skripsi: Pengujian Algoritme-Algoritme Penyeimbang Beban Statis Nama : Hanif Amal Robbani N1M : G64080098
:,
.
;-.
.
{
Disetujui oleh
~
Hendra Rahmawan, S.Korri, M. T NIP. 19820501 200912 1 009
~. ).Diketahui o1;h
Tanggal Lulus:
,3 1 JUL 2013
Judul Skripsi : Pengujian Algoritme-Algoritme Penyeimbang Beban Statis Nama : Hanif Amal Robbani NIM : G64080098
Disetujui oleh
Hendra Rahmawan, SKom, MT Pembimbing
Diketahui oleh
Dr Ir Agus Buono, MSi, MKom Ketua Departemen
Tanggal Lulus:
PRAKATA Segala puji bagi Allah subhanahu wa-ta'ala atas segala rahmat dan karuniaNya sehingga penulis dapat menyelesaikan penelitian ini. Penulis juga menyampaikan terima kasih kepada semua pihak yang telah membantu dalam penyelesaian tugas akhir ini, yaitu: 1 Ayahanda H Rosihan Anwar, Ibunda Ani Kartika, serta adik-adik Sahla Sahlima, Muhammad Zia Al-Banna, Bilqis Khoirul Untsa, dan Miski Nusrotillah atas segala bentuk dukungan, motivasi, serta doa yang diberikan kepada penulis selama ini. 2 Bapak Hendra Rahmawan, SKom, MT selaku dosen pembimbing yang telah memberikan banyak ide, masukan, serta bantuan bagi penulis selama mengerjakan penelitian ini. 3 Bapak Endang Purnama Giri, SKom, MKom dan Ibu Karlisa Priandana, ST, MEng selaku dosen penguji yang telah memberikan masukan serta saran pada penelitian dan tugas akhir penulis. 4 Rekan-rekan di PT Navcore Nextology, Karimul Makhtidi, Oki Maulana, Retno Larasati, Fania Karimah, Fandi Rahmawan, dan Alif Kurniawan yang telah membantu proses percobaan. 5 Rekan-rekan satu bimbingan, Bambang Wijonarko, Irvan Ahadi, dan Melki Hasali yang telah berjuang bersama, bertukar pikiran, berbagi suka dan duka selama mengerjakan penelitian. 6 Rekan-rekan seperjuangan di Ilmu Komputer IPB angkatan 45 atas segala kebersamaan, bantuan, dukungan, serta kenangan bagi penulis selama menjalani masa studi. Semoga kita bisa berjumpa kembali kelak sebagai orangorang sukses. Penulis berharap penelitian ini dapat memberikan manfaat.
Bogor, Juli 2013
Hanif Amal Robbani
DAFTAR ISI DAFTAR TABEL
vi
DAFTAR GAMBAR
vi
DAFTAR LAMPIRAN
vi
PENDAHULUAN
1
Latar Belakang
1
Tujuan Penelitian
1
Manfaat Penelitian
1
Ruang Lingkup Penelitian
2
TINJAUAN PUSTAKA
2
Penyeimbangan Beban
2
Algoritme Penyeimbang Beban Statis
2
Algoritme Central Manager
2
Algoritme Randomized
3
Algoritme Round Robin
3
Algoritme Threshold
4
Message Passing Interface (MPI)
4
Implementasi MPI
4
METODE
6
Perancangan dan Implementasi Penyeimbang Beban
6
Perancangan dan Implementasi Perangkat Sistem Pengujian
6
Perancangan Percobaan
6
Percobaan dan Analisis Hasil Percobaan
8
HASIL DAN PEMBAHASAN
8
Perancangan dan Implementasi Penyeimbang Beban
8
Parameter Masukan
9
File Konfigurasi Cluster
9
File Daftar Pekerjaan
10
Pengukuran Beban Awal Cluster
10
Proses Distribusi Pekerjaan
11
Perancangan dan Implementasi Sistem Pengujian
11
Program Pengukur Beban
11
Program Simulator Pekerjaan
12
Perancangan Percobaan
13
Percobaan
14
Analisis Hasil Pengujian
14
SIMPULAN DAN SARAN
17
Simpulan
17
Saran
17
DAFTAR PUSTAKA
17
LAMPIRAN
19
RIWAYAT HIDUP
23
DAFTAR TABEL 1 2 3 4 5 6
Kategorisasi kondisi host Kode indikator beban Kode algoritme Ringkasan hasil uji sebaran beban berdasarkan perhitungan algoritme Ringkasan hasil uji sebaran beban berdasarkan pengukuran real-time Ringkasan hasil uji waktu eksekusi
4 9 9 15 15 15
DAFTAR GAMBAR 1 2 3 4 5 6
Diagram alir algoritme central manager Diagram alir algoritme randomized Diagram alir algoritme threshold Diagram alir metode penelitian Alur program penyeimbang beban Alur program pengukur beban
3 3 5 7 8 12
DAFTAR LAMPIRAN 1 Daftar peringkat algoritme pada setiap skenario pengujian berdasarkan kecepatan waktu eksekusi program 2 Daftar peringkat algoritme pada setiap skenario pengujian berdasarkan kemerataan sebaran beban 3 Data Type Definition (DTD) untuk file konfigurasi cluster 4 Data Type Definition (DTD) untuk file daftar pekerjaan
19 20 21 22
PENDAHULUAN Latar Belakang Penyeimbangan beban merupakan salah satu teknik utama yang dikenali dalam bidang komputasi paralel. Penyeimbangan beban bertujuan untuk meminimalkan, baik waktu eksekusi maupun response time rata-rata dari sebuah program paralel. Tujuan ini dicapai dengan mengupayakan penjadwalan task dengan tepat untuk setiap prosesor yang terlibat. Secara spesifik algoritme penyeimbang beban berusaha mendistribusikan beban komputasi sedemikian sehingga masing-masing prosesor bertanggung jawab terhadap beban yang sama besar pada saat eksekusi program (Xu dan Lau 1997). Algoritme penyeimbang beban dikategorikan ke dalam dua kelompok besar, yaitu statis dan dinamis. Algoritme-algoritme penyeimbang beban statis memiliki kecepatan tinggi, menyebabkan waktu tunda yang kecil, dan relatif mudah untuk diimplementasikan (Sharma et al. 2008). Pada kondisi tertentu, algoritme penyeimbang beban statis menjadi satu-satunya pilihan, misalnya ketika ukuran task terlalu besar sehingga pemindahan task ke prosesor lain pada saat run-time dihindari (Xu dan Lau 1997). Pada penelitian sebelumnya (Rahmawan dan Gondokaryono 2009) telah dilakukan simulasi empat algoritme penyeimbang beban statis, yaitu algoritme round robin, randomized, central manager, dan threshold. Indikator beban yang digunakan adalah panjang antrian CPU, jumlah memori terpakai, dan panjang antrian I/O harddisk. Dari penelitian tersebut dihasilkan paparan analisis perbandingan kinerja keempat algoritme dalam sebuah lingkungan simulasi, dengan indikator kinerja waktu eksekusi program dan sebaran beban. Penelitian ini merupakan lanjutan dari penelitian Rahmawan dan Gondokaryono (2009), dengan membuat sebuah prototipe program penyeimbang beban menggunakan empat algoritme penyeimbang beban statis, kemudian menguji kinerja masing-masing algoritme tersebut dalam lingkungan pengujian riil.
Tujuan Penelitian Tujuan penelitian ini adalah membandingkan kinerja algoritme-algoritme penyeimbang beban statis dalam lingkungan riil (bukan simulasi).
Manfaat Penelitian Penelitian ini diharapkan dapat memberikan informasi mengenai kinerja algoritme-algoritme penyeimbang beban yang diuji. Dari penelitian ini diharapkan dapat diketahui karakteristik masing-masing algoritme, dalam kondisi apa sebuah algoritme menonjol, dan dalam kondisi apa algoritme tersebut mengalami penurunan kinerja.
2 Ruang Lingkup Penelitian 1 Algoritme penyeimbang beban yang diuji adalah algoritme randomized, round robin, central manager, dan threshold. 2 Indikator beban yang digunakan adalah persentase CPU terpakai, persentase memori terpakai, dan panjang rata-rata antrian I/O harddisk. 3 Sistem paralel yang digunakan merupakan cluster homogen, dengan jumlah komputer pekerja tiga buah. 4 Beban awal cluster diasumsikan seragam. 5 Program paralel yang digunakan tidak memiliki overhead komunikasi. 6 Ada tiga jenis program paralel yang digunakan, yaitu program paralel CPUbound, memory-bound, dan I/O harddisk-bound. 7 Hanya ada satu program paralel yang dieksekusi oleh cluster dalam satu waktu.
TINJAUAN PUSTAKA Penyeimbangan Beban Penyeimbangan beban adalah proses meningkatkan kinerja sebuah sistem paralel dan sistem terdistribusi melalui pendistribusian ulang beban di antara prosesor di dalam sistem (Sharma et al. 2008).
Algoritme Penyeimbang Beban Statis Algoritme penyeimbang beban statis melakukan proses penyeimbangan beban sebelum eksekusi pekerjaan dilakukan. Beban prosesor-prosesor dalam sistem paralel diukur sebelum terjadi eksekusi program. Selanjutnya prosesor master akan mendistribusikan pekerjaan berdasarkan ukuran beban prosesor tersebut. Prosesor pekerja kemudian akan melakukan pekerjaan yang telah ditugaskan oleh prosesor master, dan apabila telah selesai, prosesor pekerja akan mengembalikan hasil pemrosesan ke prosesor master (Sharma et al. 2008).
Algoritme Central Manager Pada algoritme ini, prosesor utama memilih sebuah host untuk mengeksekusi proses baru. Program akan didelegasikan kepada host dengan beban terkecil (minimal) untuk dieksekusi di sana. Prosesor dengan beban minimal ditentukan berdasarkan ukuran beban masing-masing host saat proses dibuat. Prosesor utama memilih host untuk proses-proses yang baru sedemikian rupa sehingga sedapat mungkin beban di tiap prosesor tetap sama. Proses penjadwalan seperti di atas dapat dilakukan berdasarkan informasi beban cluster. Informasi ini diperbarui oleh remote processor, yang mengirim sebuah pesan setiap waktu saat beban prosesor berubah (Sharma et al. 2008). Diagram alir algoritme central manager dinyatakan pada Gambar 1.
3 Algoritme Randomized Algoritme randomized merupakan sebuah algoritme yang menggunakan bilangan-bilangan acak untuk memilih prosesor yang akan ditugaskan. Prosesorprosesor pekerja dipilih secara acak berdasarkan bilangan-bilangan acak yang dihasilkan dengan mengikuti distribusi tertentu (Sharma et al. 2008). Diagram alir algoritme randomized dinyatakan pada Gambar 2.
Algoritme Round Robin Pada algoritme round robin, setiap pekerjaan didistribusikan ke semua prosesor secara merata. Prosesor untuk mengeksekusi setiap pekerjaan dipilih secara berurutan, dan kembali ke prosesor pertama jika pemilihan prosesor telah sampai di prosesor terakhir (Sharma et al. 2008).
Mulai
i=1
i = indeks pekerjaan k = indeks komputer
k=1
Mulai
i <= jumlah pekerjaan
i=1
i = indeks pekerjaan k = indeks komputer
ya
i <= jumlah pekerjaan
tidak
Ambil pekerjaan i
ya
Ambil pekerjaan i ya
Komputer k memiliki beban terkecil?
tidak
tidak Eksekusi pekerjaan i di komputer k
i = i +1
k = Random(1...jumlah komputer)
k=k+1
Eksekusi pekerjaan-i di komputer-k
k = k mod (jumlah komputer)
i=i+1
Selesai
Selesai
Gambar 1 Diagram alir algoritme central manager
Gambar 2 Diagram alir algoritme randomized
4 Algoritme Threshold Pada algoritme ini, keadaan setiap host dinyatakan dalam tiga level: underloaded, medium, dan overloaded. Dua buah nilai ambang (t_under, t_upper) digunakan untuk mendefinisikan ketiga level tersebut seperti tampak pada Tabel 1. Awalnya, seluruh prosesor dianggap dalam keadaan underloaded. Pekerjaan akan dialokasikan kepada prosesor pertama selama kondisinya belum overloaded. Jika kondisi prosesor tersebut telah naik ke level overloaded, pekerjaan-pekerjaan selanjutnya akan dialokasikan ke sebuah prosesor lain yang berada dalam kondisi underloaded sampai kondisi prosesor tersebut naik ke level overloaded. Jika tidak ditemukan prosesor lain yang masih underloaded, maka pekerjaan akan tetap dieksekusi oleh prosesor yang sedang ditunjuk saat itu sampai ada prosesor lain yang turun ke kondisi underloaded atau seluruh pekerjaan habis didistribusikan (Sharma et al. 2008). Diagram alir algoritme threshold dinyatakan pada Gambar 3.
Tabel 1 Kategorisasi kondisi host Level underloaded medium overloaded
Parameter Ambang beban < t_under t_under < beban < t_upper beban > t_upper
Message Passing Interface (MPI) MPI adalah spesifikasi standar untuk membuat library program paralel dengan paradigma message passing, di mana data dapat dipindahkan dari satu proses ke proses lain melalui operasi bersama oleh setiap proses yang terlibat. Semua operasi dalam spesifikasi MPI diekspresikan dalam bentuk fungsi, subroutine, atau method yang mengacu pada bahasa C, C++, Fortran-77, dan Fortran-95. MPI sendiri bukan merupakan bahasa pemrograman dan tidak dibuat dalam bahasa pemrograman tertentu (Balaji et al. 2012).
Implementasi MPI Terdapat banyak varian implementasi MPI, salah satunya adalah MPICH buatan Laboratorium Nasional Argonne. MPICH adalah implementasi dari MPI standar yang difokuskan pada aspek kinerja dan portabilitas. Saat ini MPICH versi 2 (MPICH2) telah memuat semua fungsi yang tercantum dalam spesifikasi MPI versi 1 dan 2 (MPI-1 dan MPI-2), termasuk dynamic process management, onesided operations, I/O paralel, dan fitur-fitur lainnya (MPI Forum 2008). Varian lain dari implementasi MPI adalah MPI.NET. Ketersediaan library MPI dalam bahasa pemrograman modern seperti C# dengan dukungan teknologi .NET, memberikan kemudahan bagi para programmer untuk bisa membangun program paralel yang lebih kompleks dalam waktu singkat. Di sisi lain, juga terdapat resiko kinerja program menjadi lebih lambat karena adanya overhead pada library yang digunakan. MPI.NET dibangun di atas MS-MPI dan
5 telah diuji kinerjanya. Hasil pengujian menunjukkan bahwa MPI.NET tidak memiliki overhead yang cukup berarti dibandingkan dengan MS-MPI (Gregor dan Lumsdaine 2008). MS-MPI sendiri merupakan varian lain dari library MPI. MS-MPI adalah implementasi native dari spesifikasi MPI yang dibuat oleh Microsoft dalam bahasa C/C++ dengan mengacu pada MPICH2. Mulai
i=1
i = indeks pekerjaan k = indeks komputer t = indeks temporary
k=1
i <= jumlah pekerjaan
ya
Ambil pekerjaan i
i=1?
Tidak
tidak
Apakah beban di komputer-k ≤ t_upper
t=k ya
t=t+1 ya t = t mod jumlah komputer
tidak
k=t?
tidak
ya
Eksekusi pekerjaan-i di komputer-k
Apakah beban di kompter-k ≤ t_under i=i+1
ya
k=t
Selesai
Gambar 3 Diagram alir algoritme threshold
tidak
6
METODE Penelitian ini akan dilakukan dalam beberapa tahap. Urutan tahap-tahap tersebut dapat dilihat pada Gambar 4.
Perancangan dan Implementasi Penyeimbang Beban Pada tahap ini dilakukan studi pustaka untuk mengetahui karakteristik dan spesifikasi sebuah program penyeimbang beban serta strategi implementasi yang sudah ada. Setelah informasi yang diperlukan didapat, selanjutnya dilakukan perancangan strategi implementasi program penyeimbang beban yang akan diterapkan. Proses terakhir adalah implementasi program penyeimbang beban sesuai dengan strategi yang dipilih.
Perancangan dan Implementasi Perangkat Sistem Pengujian Pada tahap ini dilakukan perancangan dan implementasi program-program selain program penyeimbang beban yang dibutuhkan dalam pengujian. Programprogram pendukung pengujian tersebut adalah program pengukur beban dan program simulator pekerjaan. Program pengukur beban bertugas untuk mengukur beban komputer sesuai dengan jenis indikator beban yang dipilih. Program ini nantinya akan digunakan oleh program penyeimbang beban untuk mengukur beban awal cluster. Program pengukur beban juga akan digunakan untuk mengukur distribusi beban cluster pada saat percobaan. Program simulator pekerjaan digunakan untuk membuat model program paralel yang akan dieksekusi oleh cluster. Pada penelitian ini sebuah program paralel dimodelkan dengan 10 buah program simulator pekerjaan CPU-bound, memory-bound, dan I/O harddisk-bound dengan perbandingan 8:1:1. Sebagai contoh, sebuah program paralel CPU-bound dimodelkan dengan mengombinasikan 8 buah simulator pekerjaan CPU-bound, 1 buah simulator pekerjaan memory-bound, dan 1 buah simulator pekerjaan I/O harddisk-bound. Masing-masing program simulator pekerjaan tersebut merupakan program sekuensial yang tidak saling berhubungan, sehingga program paralel yang dimodelkan tidak memiliki overhead komunikasi sama sekali.
Perancangan Percobaan Pada tahap ini dilakukan perancangan skenario percobaan. Setelah skenario percobaan ditentukan, dilakukan modifikasi dan penggabungan program-program yang telah dibuat sebelumnya agar dapat menjalankan skenario-skenario tersebut. Program-program tersebut juga dimodifikasi agar mudah dipanggil menggunakan perintah-perintah batch Windows.
7 Perancangan dan Implementasi Program Penyeimbang Beban
Perancangan dan Implementasi Perangkat Sistem Pengujian
Perancangan Percobaan
Percobaan
Analisis Hasil Percobaan
Gambar 4 Diagram alir metode penelitian Percobaan yang akan dilakukan bertujuan untuk mengukur dan mendapatkan perbandingan kinerja algoritme-algoritme penyeimbang beban yang diimplementasikan. Ukuran kinerja algoritme pada penelitian ini adalah waktu eksekusi dan penyebaran beban kerja (Rahmawan dan Gondokaryono 2009). Percobaan dilakukan dengan mengukur waktu eksekusi dan sebaran beban ketika program penyeimbang beban mendistribusikan pekerjaan. Terdapat beberapa skenario eksekusi program penyeimbang beban. Skenario-skenario tersebut merupakan kombinasi dari pilihan jenis program paralel yang akan dieksekusi, jenis serta pengaturan parameter algoritme yang digunakan, dan jenis indikator kinerja yang akan diukur. Berdasarkan jenis program paralel yang dieksekusi, terdapat tiga jenis program paralel: CPU-bound, memory-bound, dan I/O harddisk-bound. Berdasarkan jenis algoritme yang digunakan, terdapat empat jenis algoritme: round robin, randomized, central manager, dan threshold. Untuk algoritme central manager dan threshold, dapat digunakan tiga jenis indikator beban: persentase CPU terpakai, persentase memori terpakai, dan panjang antrian rata-rata I/O harddisk. Pada algoritme threshold perlu ditentukan nilai ambang bawah dan nilai ambang atas yang akan digunakan dalam pengujian. Agar dapat dibandingkan nilai ambang yang lebih baik, minimal dilakukan pengujian dengan menggunakan dua set nilai ambang. Total skenario percobaan yang perlu dilakukan adalah 132 skenario, masing-masing skenario diulang sebanyak lima kali. Untuk memudahkan percobaan, dibuatlah batch file berisi perintah-perintah untuk menjalankan program penyeimbang beban dengan pengaturan-pengaturan parameter yang mewakili semua skenario tersebut.
8 Percobaan dan Analisis Hasil Percobaan Percobaan dilakukan dengan menjalankan batch file yang telah dibuat pada tahap sebelumnya. Keluaran hasil eksekusi batch file tersebut ditampung dalam sebuah file teks. Proses selanjutnya adalah mengonversi file teks menjadi file spreadsheet untuk memudahkan proses analisis. Analisis hasil percobaan dilakukan untuk menentukan algoritme dengan kinerja terbaik untuk setiap kategori. Analisis lebih jauh dilakukan untuk mencari algoritme yang mendominasi dalam banyak skenario, sehingga dapat direkomendasikan sebagai algoritme terbaik untuk kategori yang lebih luas.
HASIL DAN PEMBAHASAN Perancangan dan Implementasi Penyeimbang Beban Pada tahap ini dihasilkan sebuah program penyeimbang beban yang memiliki alur kerja seperti tampak pada Gambar 5. Mulai
Baca parameter masukan
Ukur beban masingmasing komputer anggota cluster
Distribusikan pekerjaan
Tunggu semua Penggabungan pekerjaan selesai Data dieksekusi
Selesai
Gambar 5 Alur program penyeimbang beban
9 Parameter Masukan Parameter masukan yang dibaca oleh program adalah nama file XML konfigurasi cluster berisi daftar komputer pekerja (-c), nama file XML berisi daftar pekerjaan (-j), tipe indikator beban (-l), dan algoritme penyeimbang beban yang dipilih (-a). Contoh perintah command line untuk menjalankan program penyeimbang beban ini sebagai berikut: LoadBalancer.exe -c Cluster5Node.xml -j cpu_intensive_idx_cpu.xml -l cpu -a min
Contoh di atas berisi perintah untuk menjalankan program penyeimbang beban menggunakan algoritme central manager (-a min) dengan indikator beban persentase penggunaan CPU (-l cpu). Kode pilihan algoritme dan jenis indikator beban lainnya dapat dilihat pada Tabel 2 dan Tabel 3. Tabel 2 Kode indikator beban Indikator Beban Persentase penggunaan CPU Persentase memori terpakai Panjang rata-rata antrian I/O harddisk
Kode cpu mem hd
Tabel 3 Kode algoritme Algoritme round robin randomized central manager (minimum) threshold
Kode rr rand min tres
File Konfigurasi Cluster Sebuah file XML konfigurasi cluster terdiri dari satu buah tag
dan beberapa tag . Setiap mewakili sebuah komputer pekerja. Setiap komputer pekerja dapat disertai dengan informasi alamat IP, nomor ID, dan beban awal komputer. Informasi utama yang diperlukan oleh program penyeimbang beban hanya alamat IP. Tag hanya perlu diisi nilai nol. Tag tersebut awalnya digunakan pada tahap pengembangan sistem, yakni ketika program pembaca beban belum dibuat. Tujuannya agar program penyeimbang beban tetap dapat diujicoba dengan menggunakan nilai dummy sebagai nilai beban awal cluster. Contoh isi file konfigurasi cluster adalah sebagai berikut:
10 8.8.8.8 1 0
Data Type Definition (DTD) untuk file XML konfigurasi cluster dapat dilihat di Lampiran 3.
File Daftar Pekerjaan File XML daftar pekerjaan terdiri dari satu buah tag <Jobs> dan satu atau lebih tag <Job>. Setiap tag <Job> mewakili sebuah program yang akan dieksekusi di dalam cluster. Setiap satu pekerjaan akan dieksekusi oleh salah satu komputer pekerja yang dipilih oleh program penyeimbang beban. Informasi yang harus disertakan untuk setiap pekerjaan adalah nama file executable, parameter, dan beban pekerjaan tersebut. File executable harus berupa program dengan command line interface agar bisa menerima string parameter masukan. Pada penelitian ini, nilai beban pekerjaan didapat dengan melakukan pengukuran sederhana menggunakan program pengukur beban. Langkah-langkah yang dilakukan untuk menentukan beban pekerjaan adalah sebagai berikut: ukur beban komputer sebelum menjalankan pekerjaan ukur beban komputer selama menjalankan pekerjaan hitung selisih hasil kedua pengukuran ulangi langkah-langkah di atas sebanyak sepuluh kali, kemudian hitung nilai rata-ratanya. Sebelum program pengukur beban dibuat, ujicoba penyeimbang beban dapat dilakukan dengan mengeksekusi pekerjaan yang hanya disertai nilai beban dummy. Berikut contoh isi file daftar pekerjaan: <Jobs> <Job> Job.exe -t hd 100 0,019382234
Data Type Definition (DTD) untuk file XML konfigurasi cluster dapat dilihat di Lampiran 4.
Pengukuran Beban Awal Cluster Beban cluster adalah beban masing-masing komputer pekerja anggota cluster. Pengukuran beban awal cluster dilakukan dengan mengirimkan perintah eksekusi program pengukur beban ke setiap komputer pekerja. Hasil pengukuran
11 tersebut akan dikembalikan ke komputer penyeimbang beban dan disimpan oleh program sebagai beban awal cluster. Beban awal cluster ini diperlukan oleh algoritme-algoritme penyeimbang beban yang melakukan penjadwalan berdasarkan ukuran beban setiap komputer pekerja, seperti algoritme central manager dan threshold. Pada saat penjadwalan, beban komputer yang ditunjuk untuk mengeksekusi sebuah pekerjaan akan dinaikkan (incremented) sebesar beban pekerjaan yang diberikan tersebut.
Proses Distribusi Pekerjaan Proses distribusi pekerjaan oleh program penyeimbang beban memanfaatkan library MPI.NET yang diinstal di komputer penyeimbang beban dan komputer-komputer pekerja. Dalam penelitian ini library MPI.NET digunakan untuk mengirim perintah eksekusi program ke sebuah remote computer. Program penyeimbang beban ini juga memanfaatkan fitur multithreading yang tersedia dalam .NET Framework. Multithreading digunakan agar penyeimbang beban dapat mengirimkan banyak perintah ke banyak komputer pekerja sekaligus. Dengan demikian pekerjaan-pekerjaan yang diberikan oleh pengguna dapat dieksekusi oleh cluster secara bersamaan (paralel). Langkah-langkah pendistribusian pekerjaan oleh program penyeimbang beban adalah sebagai berikut: 1 Untuk setiap pekerjaan: - pilih komputer pekerja untuk mengeksekusi pekerjaan tersebut (pemilihan dilakukan oleh algoritme penyeimbang beban yang sedang aktif), - buat thread baru untuk mengirmkan perintah eksekusi pekerjaan ke komputer pekerja terpilih, simpan thread dalam array thread, - jalankan thread yang telah dibuat, - naikkan beban komputer terpilih di atas sebesar beban pekerjaan yang diberikan. 2 Setiap detik periksa array thread, jika sudah tidak ada lagi thread yang aktif, cetak keluaran program.
Perancangan dan Implementasi Sistem Pengujian Untuk kebutuhan pengujian sistem dibuatlah program pengukur beban, program simulator pekerjaan, dan dilakukan modifikasi terhadap program panyeimbang beban yang telah dibuat sebelumnya.
Program Pengukur Beban Program pengukur beban berfungsi untuk mengukur beban sebuah komputer sesuai dengan tipe beban yang diminta. Contoh perintah untuk menjalankan program pengukur beban ini sebagai berikut:
12 Mulai
Baca parameter masukan
Inisialisasi PerformanceCounter
Lakukan pengukuran selama lima detik
Selesai
Gambar 6 Alur program pengukur beban LoadCounter.exe –l cpu
pada contoh di atas program pengukur beban akan mengembalikan nilai persentase penggunaan CPU di komputer yang diukur. Alur program pengukur beban ini tampak pada Gambar 6. Daftar tipe beban yang dapat diukur oleh program pengukur beban beserta kodenya dapat dilihat pada Tabel 2. Implementasi program pengukur beban memanfaatkan kelas PerformanceCounter yang terdapat dalam .NET Framework. Program Simulator Pekerjaan Program ini bertugas untuk menaikkan beban komputer sehingga menyerupai perilaku pekerjaan yang umum dieksekusi oleh cluster. Program ini dapat berjalan dalam tiga mode tergantung parameter yang dimasukkan oleh pengguna. Mode pertama adalah simulator pekerjaan CPU-bound. Pada mode ini program akan menjalankan perintah-perintah berikut: x = Math.PI * Math.PI * Math.PI; x = Math.Sqrt(x);
baris program di atas diulang sebanyak jumlah yang diminta pengguna. Contoh perintah eksekusi program simulator pekerjaan CPU-bound dengan ulangan sebanyak seribu kali sebagai berikut : Job.exe –t cpu 1000
Mode yang kedua adalah simulator pekerjaan memory-bound. Pada mode ini program akan melakukan proses berikut: - membuat variabel array integer dengan ukuran sesuai parameter masukan dari pengguna.
13 -
mengisi array tersebut dengan nilai integer indeksnya. mengisi elemen ke-i dari array yang sudah dibuat dengan angka acak. i merupakan bilangan bulat antara 0 sampai (n-1), dan i dipilih secara acak. Proses ini diulang sebanyak n kali, dengan n adalah ukuran array.
proses di atas akan diulang sesuai dengan parameter ulangan yang dimasukkan pengguna. Contoh perintah program simulator pekerjaan memorybound dengan ukuran array seribu byte dan ulangan sebanyak sepuluh ribu kali sebagai berikut: Job.exe –t mem 1000 10000
Mode yang ketiga adalah simulator pekerjaan I/O harddisk-bound. Pada mode ini program akan melakukan proses berikut: - membuat variabel array byte dengan ukuran sesuai parameter masukan dari pengguna. - mengisi array tersebut dengan byte-byte acak. - menyimpan dua buah file ke harddisk yang masing-masing berisi byte-byte acak dari array byte yang telah dibuat sebelumnya. - menghapus kedua file tersebut dari harddisk. Sama seperti dua mode sebelumnya, pada mode ini juga proses di atas akan diulang sebanyak parameter ulangan yang dimasukkan oleh pengguna. Contoh perintah untuk menjalankan program simulator pekerjaan I/O harddisk-bound dengan ukuran file seribu byte dan ulangan sepuluh ribu kali sebagai berikut: Job.exe –t hd 1000 10000
Perancangan Percobaan Pada tahap ini dilakukan modifikasi terhadap program penyeimbang beban agar dapat mengembalikan output berupa ukuran indikator kinerja algoritme untuk satu kali eksekusi. Proses modifikasi ini menghasilkan dua jenis program penyeimbang beban. Program pertama adalah program penyeimbang beban yang mengembalikan output waktu eksekusi dalam milisecond. Program ini merupakan program penyeimbang beban yang telah disisipkan timer. Timer berfungsi untuk mengukur total waktu eksekusi seluruh pekerjaan yang di-submit oleh pengguna. Timer dijalankan pada awal tahap distribusi pekerjaan dan berhenti setelah seluruh pekerjaan selesai dieksekusi di komputer pekerja. Program kedua adalah program penyeimbang beban yang mengembalikan output beban awal cluster, dan beban cluster saat eksekusi program paralel. Terdapat dua macam nilai beban cluster saat ekseksusi program paralel, yang pertama adalah nilai beban cluster hasil pengukuran, dan yang kedua adalah nilai harapan beban cluster berdasarkan perhitungan algoritme penyeimbang beban. Nilai harapan beban cluster dihitung oleh algoritme penyeimbang beban berdasarkan sebaran beban awal dan beban pekerjaan yang diberikan ke masingmasing komputer pekerja.
14 Informasi utama yang diperlukan dari program penyeimbang beban jenis kedua ini adalah beban cluster saat eksekusi program paralel, yang didapat dari hasil pengukuran. Dari informasi beban masing-masing komputer pekerja saat proses eksekusi program paralel berlangsung tersebut, akan dihitung nilai simpangan bakunya. Nilai simpangan baku tersebut kemudian diambil sebagai indikator kinerja algoritme. Semakin kecil nilai simpangan bakunya, berarti semakin merata distribusi pekerjaan dalam cluster. Beban cluster saat eksekusi program paralel didapat dengan memanfaatkan program simulator pekerjaan yang telah dimodifikasi. Modifikasi dilakukan dengan menambahkan perintah-perintah untuk melakukan pengukuran beban komputer seperti yang digunakan pada program pengukur beban. Pengukuran beban dilakukan selama operasi simulasi pekerjaan masih berlangsung dengan jeda antar sampling selama satu detik. Simulator pekerjaan yang telah dimodifikasi ini akan mengembalikan output berupa nilai beban komputer tempat simulator pekerjaan tersebut dieksekusi. Jika ada komputer pekerja yang tidak mendapatkan pekerjaan untuk dieksekusi, maka diasumsikan beban saat eksekusi di komputer tersebut sama dengan beban awalnya.
Percobaan Percobaan dilakukan dalam sebuah cluster yang terdiri dari tiga komputer pekerja dan satu komputer penyeimbang beban. Komputer penyeimbang beban bertugas untuk menjalankan program penyeimbang beban dan tidak dilibatkan dalam eksekusi program paralel. Cluster yang digunakan merupakan cluster homogen karena komputerkomputer pekerja yang menyusunnya memiliki spesifikasi sama, yaitu: - prosesor Intel(R) Core(TM) i3-2330M CPU @ 2.20 GHz - RAM 6 GB - Harddisk Toshiba 500 GB 5400 RPM dengan buffer 8 MB Spesifikasi perangkat lunak cluster adalah sebagai berikut: - sistem operasi Windows 7 Enterprise x64 SP1 - SDK Microsoft High Performance Cluster Pack 2008 - MPI.NET 1.0 - .NET Framework 4.0 Analisis Hasil Pengujian Hasil uji sebaran beban cluster menunjukkan bahwa, berdasarkan perhitungan, algoritme central manager dominan menghasilkan sebaran beban terkecil seperti tampak pada Tabel 4. Khusus untuk pengujian dengan program paralel CPU-bound menggunakan indikator beban memori atau harddisk, algoritme central manager menunjukkan penurunan kinerja cukup drastis. Selanjutnya analisis dilakukan menggunakan data sebaran beban cluster dan waktu eksekusi program berdasarkan hasil pengukuran secara real-time. Algoritme dengan waktu eksekusi tercepat untuk program paralel bertipe
15 harddisk-bound adalah algoritme threshold dengan indikator beban CPU, nilai threshold bawah 25,419 dan nilai threshold atas 31,948. Algoritme dengan distribusi beban CPU paling merata untuk program paralel bertipe CPU-bound adalah algoritme threshold dengan indikator beban CPU, nilai threshold bawah 20, dan nilai threshold atas 40. Ringkasan hasil pengujian dapat dilihat pada Tabel 4 dan Tabel 5, sedangkan data urutan peringkat algoritme selengkapnya untuk setiap skenario pengujian dapat dilihat pada Lampiran 1 dan Lampiran 2. Hasil pengukuran real-time distribusi beban menunjukkan bahwa, algoritme randomized selalu menghasilkan distribusi beban harddisk paling merata untuk ketiga tipe program paralel. Hasil pengukuran juga menunjukkan bahwa algoritme Tabel 4 Ringkasan hasil uji sebaran beban berdasarkan perhitungan algoritme Jenis Pekerjaan
CPU-bound Memory-bound
Harddisk-bound
Indikator Beban CPU Memori Harddisk CPU Memori Harddisk CPU Memori Harddisk
Algoritme Terbaik Min Rr Tres 1 Min Min Min Min Min Min
Tabel 5 Ringkasan hasil uji sebaran beban berdasarkan pengukuran real-time Jenis Pekerjaan CPU-bound
Memory-bound
Harddisk-bound
Indikator Beban CPU Memori Harddisk CPU Memori Harddisk CPU Memori Harddisk
Algoritme Terbaik Tres 2 Rr Rand Rr Min Rand Rr Min Rand
Tabel 6 Ringkasan hasil uji waktu eksekusi Jenis Pekerjaan CPU-bound Memory-bound Harddisk-bound
Algoritme Tercepat Min Rr Tres 1
Indikator Beban CPU CPU
16 randomized hanya cocok untuk meminimalisir simpangan baku distribusi beban harddisk, sedangkan untuk tipe beban CPU dan memori randomized hampir selalu menghasilkan simpangan baku distribusi beban paling besar. Untuk distribusi beban CPU, algoritme round robin berhasil dua kali keluar sebagai algoritme terbaik, yakni pada eksekusi program paralel bertipe harddiskbound dan memory-bound. Pada eksekusi program paralel bertipe CPU-bound dengan indikator beban CPU, algoritme round robin menghasilkan nilai simpangan baku distribusi beban terkecil kedua setelah algoritme threshold. Selisih simpangan baku beban cluster algoritme round robin terhadap algoritme threshold tidak terpaut jauh, sehingga algoritme round robin masih menjadi algoritme yang paling direkomendasikan untuk mendistribusikan beban CPU cluster dengan merata. Selisih simpangan baku beban cluster algoritme round robin terhadap algoritme threshold adalah sebesar 0,593. Sebagai perbandingan, selisih simpangan baku beban cluster algoritme threshold terhadap algoritme central manager yang merupakan algoritme terbaik ketiga adalah 3,868. Sedangkan selisih simpangan baku beban cluster algoritme threshold terhadap algoritme randomized yang merupakan algoritme dengan simpangan baku beban terbesar adalah 12,712. Untuk distribusi beban memori, algoritme central manager dua kali keluar sebagai algoritme terbaik, yakni pada eksekusi program paralel bertipe harddiskbound dan memory-bound. Pada eksekusi program paralel bertipe CPU-bound dengan indikator beban memori, algoritme yang tercatat menghasilkan nilai simpangan baku terkecil adalah round robin. Pada kasus tersebut algoritme central manager tidak menunjukkan kinerja yang cukup baik, karena menghasilkan nilai simpangan baku terbesar kedua. Jika diperhatikan, terdapat perbedaan antara data sebaran beban cluster hasil pengukuran secara real-time dengan data sebaran beban cluster hasil perhitungan algoritme. Salah satu faktor yang dapat menyebabkan perhitungan algoritme tidak sesuai dengan hasil pengukuran adalah terdapat kemungkinan adanya prosesproses selain komponen pengujian yang sedang dijalankan oleh komputer. Beban tambahan dari proses-proses tersebut dapat menyebabkan beban komputer yang diukur lebih besar daripada perhitungan algoritme. Hal yang sama juga dapat terjadi pada saat proses pengukuran nilai beban pekerjaan. Dalam penelitian ini nilai beban pekerjaan dihitung dari selisih beban komputer saat mengeksekusi pekerjaan terhadap beban komputer sebelum mengeksekusi pekerjaan. Hasil pengukuran dapat menjadi tidak akurat bila pada saat itu ada proses-proses lain yang berjalan tanpa diketahui dan mempengaruhi beban komputer. Pada akhirnya, ketidakakuratan bobot pekerjaan dapat menyebabkan perhitungan sebaran beban oleh algoritme penyeimbang beban menjadi tidak akurat juga.
17
SIMPULAN DAN SARAN Simpulan Simpulan dari penelitian ini adalah: 1 Telah dilakukan percobaan uji kinerja empat algoritme penyeimbang beban statis. 2 Hasil percobaan tidak menunjukkan adanya algoritme yang dominan menghasilkan kinerja terbaik di semua skenario. 3 Algoritme central manager, round robin dan randomized bergantian mendominasi pada skenario percobaan yang berbeda. 4 Hasil percobaan menunjukkan bahwa algoritme threshold tidak menghasilkan kinerja terbaik. Hal ini dapat disebabkan oleh nilai ambang yang digunakan dalam percobaan kurang tepat, atau karena karakteristik algoritme yang memang kurang baik untuk mendistribusikan beban dengan merata. 5 Data hasil perhitungan sebaran beban cluster menunjukkan bahwa algoritme central manager dominan menghasilkan sebaran beban terkecil. Berdasarkan data tersebut, khusus untuk pekerjaan bertipe CPU-bound algoritme central manager hanya cocok menggunakan indikator beban CPU.
Saran 1
2
Saran untuk penelitian selanjutnya adalah: Menggunakan simulator pekerjaan paralel dan melakukan modifikasi program penyeimbang beban agar dapat mendistribusikan pekerjaan pada level proses dari simulator pekerjaan tersebut. Melakukan pengujian menggunakan indikator beban baru yang merupakan kombinasi indikator-indikator beban pada penelitian ini.
DAFTAR PUSTAKA Balaji P, Buntinas D, Butler R, Chan A, Goodell D, Gropp W, Krishna J, Latham R, Lusk E, Mercier G, Ross R, Thakur R. 2012. MPICH2 User's Guide [Internet]. Illinois (US): Argonne National Laboratory; [diunduh 2012 Feb 22]. Tersedia pada: http://www.mcs.anl.gov/research/projects/mpich2staging/goodell/documentatio n/files/mpich2-1.5-userguide.pdf Gregor D, Lumsdaine A. 2008. Design and implementation of a high-performance MPI for C# and the common language infrastructure. Di dalam: ACM SIGPLAN Symposium on Principles and Practice of Parallel Programming; 2008 Feb 20-23; Utah, Amerika Serikat. New York (US): ACM Computing Surveys. hlm 133-142. [MPI Forum] Message Passing Interface Forum. 2008. MPI: A Message-Passing Interface Standard Version 2.1 [Internet]. Tennessee (US): University of
18 Tennessee; [diunduh 2012 Jan 23]. Tersedia pada: http://www.mpiforum.org/docs/mpi21-report.pdf Rahmawan H, Gondokaryono YS. 2009. The simulation of static load balancing algorithms. Di dalam: Nordin MJ, Jumari K, Zakaria MS, Suwarno, editor. 2009 International Conference on Electrical Engineering and Informatics; 2009 Agu 5-7; Bangi, Malaysia. California (US): IEEE Computer Society Press. hlm 642-645. Sharma S, Singh S, Sharma M. 2008. Performance analysis of load balancing algorithms. Di dalam: Proceedings of World Academy of Science, Engineering, and Technology [Internet]. [Waktu dan tempat pertemuan tidak diketahui]. New Mexico (US): World Academy of Science, Engineering, and Technology. hlm 269-272; [diunduh 2012 Jan 17]. Tersedia pada: http://www.waset.org/journals/waset/v14/v14-47.pdf Xu C, Lau FCM. 1997. Load Balancing in Parallel Computers Theory and Practice. Massachusetts (US): Kluwer Academic Publishers.
19 Lampiran 1 Daftar peringkat algoritme pada setiap skenario pengujian berdasarkan kecepatan waktu eksekusi program a Job CPU
Load Indicator CPU
CPU
MEM
CPU
HD
MEM CPU MEM MEM MEM HD
a
HD
CPU
HD
MEM
HD
HD
1 min 9922,6 rand 13774,2 rand 13774,2 rr 9684,667 rr 9684,667 rr 9684,667 tres 1 16932,4 min 17138,2 rand 20056,2
2 rand 13774,2 rr 16991,6 rr 16991,6 min 13004,4 min 12901,4 rand 14688 tres 2 18378 rand 20056,2 tres 1 23732,4
3 tres 2 15702,6 tres 1 19018,6 tres 2 17924,6 rand 14688 rand 14688 min 15072,2 min 19568,6 tres 2 25496,4 tres 2 26054,2
waktu eksekusi program ditampilkan dalam milidetik
4 rr 16991,6 tres 2 19068,4 tres 1 19229,8 tres 2 15424,2 tres 1 20627,2 tres 1 15519 rand 20056,2 tres 1 25575,4 rr 26698,6
5 tres 1 17984,8 min 19943,2 min 20715,6 tres 1 21157,6 tres 2 20826 tres 2 17059,2 rr 26698,6 rr 26698,6 min 39789
20 Lampiran 2 Daftar peringkat algoritme pada setiap skenario pengujian berdasarkan kemerataan sebaran beban Job CPU
Load Indicator CPU
CPU
MEM
CPU
HD
MEM CPU MEM MEM MEM HD HD
CPU
HD
MEM
HD
HD
1 tres 2 7,433371 rr 1,640337 rand 0,031495 rr 7,668182 min 1,231438 rand 0,039503 rr 6,716403 min 1,175273 rand 0,10628
2 rr 8,026823 tres 1 1,653564 tres 1 0,049961 min 8,406564 tres 2 1,677429 tres 1 0,050209 min 10,78757 tres 1 1,611959 min 0,130907
3 min 11,30182 tres 2 1,678041 tres 2 0,078898 tres 2 10,29962 tres 1 1,730359 min 0,059483 rand 15,62986 rr 1,620976 rr 0,14532
4 tres 1 15,66216 min 1,734249 min 0,482129 tres 1 15,0349 rr 1,802192 tres 2 0,070271 tres 2 16,87977 tres 2 1,726775 tres 1 0,189334
5 rand 20,14873 rand 1,870373 rr 0,684637 rand 18,45584 rand 2,7912 rr 0,099837 tres 1 17,99362 rand 1,866872 tres 2 0,315588
21 Lampiran 3 Data Type Definition (DTD) untuk file konfigurasi cluster
Cluster (Node+)> Node (IpAddress, Id, Load)> IpAddress (#PCDATA)> Id (#PCDATA)> Load (#PCDATA)>
22 Lampiran 4 Data Type Definition (DTD) untuk file daftar pekerjaan
Jobs (Job+)> Job (File, Argument, Load)> File (#PCDATA)> Argument (#PCDATA)> Load (#PCDATA)>
23
RIWAYAT HIDUP Penulis dilahirkan pada tanggal 7 September 1989 di Jakarta. Penulis merupakan anak pertama dari lima bersaudara dengan ayah Rosihan Anwar dan ibu Ani Kartika. Pada tahun 2007, penulis lulus dari Sekolah Menengah Atas Islam Terpadu Rafah – Bogor dan mengajar di Pondok Pesantren Rafah selama setahun. Pada tahun 2008 penulis diterima di Departemen Ilmu Komputer Institut Pertanian Bogor melalui Jalur Seleksi Nasional Masuk Perguruan Tinggi Negeri. Pada bulan Juli hingga Agustus 2011, penulis melaksanakan kegiatan Praktik Kerja Lapangan di PT Navcore Nextology. Selama periode akhir tahun 2011 hingga awal tahun 2012, penulis beberapa kali berkesempatan menjadi trainer dalam pelatihan-pelatihan pemrograman berbasis .NET dan HTML5. Selama menjadi mahasiswa, penulis tinggal dan aktif dalam kegiatan-kegiatan di Pondok Pesantren Mahasiswa Al-Inayah.