BAB 5 IMPLEMENTASI 5.1
Spesifikasi
Hasil perancangan algoritma yang dituliskan dalam kode Visual Basic pada Bab 4 akan diimplementasikan pada Rocks Clusters 5.1 dan Tachyon 0.98.7. Pemilihan Rocks Clusters dan Tachyon digunakan hanya sebagai contoh untuk proof of concept. Secara konsep, seharusnya tesis ini dapat diterapkan di distro cluster dan
aplikasi yang lain. Rocks Clusters digunakan untuk membuat cluster yang terdiri dari head node dan beberapa compute node. Tachyon digunakan untuk mensimulasikan ray tracing yang dijalankan pada cluster. Computational dan Communication Cost Method (CCCM) akan diterapkan pada tachyon. Bargaining akan dilakukan sebelum tachyon dijalankan, dan perhitungan kompensasi berdasarkan komputasi dan bandwidth yang digunakan akan dilakukan setelah tachyon selesai dikerjakan. Simulasi akan dilakukan dengan menggunakan sebuah head node dan dua buah compute node. Hal ini sudah dapat mewakili berapapun jumlah node yang akan digunakan, karena dengan memperhatikan variabel jumlah node, maka apabila implementasi berhasil dilakukan pada dua buah node, akan dapat bekerja pula pada node yang lebih banyak.
5.2
One-to-many bargaining
Penerapan one-to-many bargaining pada Rocks Clusters 5.1 dilakukan dengan menggunakan library MPICH yang dituliskan dalam bahasa C. One-to-many
48
49
bargaining dituliskan dalam 1 file bernama otm.c. Isi file otm.c secara keseluruhan dapat dilihat pada bagian lampiran.
5.2.1 Input penyedia tugas Sebagai penyedia tugas, input yang diperlukan adalah : •
Jumlah penyedia jasa.
•
Maksimum harga yang dapat diterima oleh penyedia tugas.
•
Minimum harga yang dapat diterima oleh penyedia jasa.
•
Nilai maksimum dari transaksi.
•
Nilai minimum dari transaksi.
•
Perubahan probabilitas atas penolakan tawaran.
•
Jangka waktu proyek.
•
Jumlah minimum penyedia jasa yang harus dipenuhi per hari.
•
Nilai awal penawaran penyedia tugas.
•
Identitas penyedia jasa.
•
Jumlah CPU cycle.
Input ini akan dibaca melalui file bernama “config” dan masukkan dari penyedia jasa menggunakan MPICH melalui MPI_Recv.
5.2.2 Input penyedia jasa Sebagai penyedia jasa, input yang diperlukan adalah : •
Jumlah CPU cycle.
•
Identitas penyedia jasa.
•
Ada tidaknya perjanjian sebelumnya.
•
Harga yang ditentukan pada perjanjian sebelumnya.
50
•
Harga awal.
•
Harga minimum yang dapat diterima.
•
Perubahan probabilitas atas penolakan tawaran.
Jumlah CPU cycle didapatkan dari perintah linux, yaitu “dmesg”. Perintah secara lengkap untuk mendapatkan CPU cycle dari sumber daya penyedia jasa dalam satuan MHz adalah “dmesg 's/.*Detected
\\(.*\\)
MHz
|
sed
-n
processor./\\1/w
/tmp/cpu'”. Dari perintah tersebut, jumlah cycle akan ditulis dalam
“/tmp/cpu”, yang nantinya akan dibaca dan dikirimkan ke penyedia tugas melalui MPI_Send. Identitas penyedia jasa dilakukan dengan menggunakan
perintah
“gethostname()”
yang
ada
dalam
“unistd.h”. Untuk mengetahui akan adanya perjanjian sebelumnya, digunakan file “/tmp/deal”, yang berfungsi untuk menuliskan harga akhir apabila telah terjadi kesepakatan. Layaknya penyedia tugas, penyedia jasa akan membaca input lainnya melalui file “config”.
5.2.3 Output penyedia tugas Output dari penyedia jasa adalah : •
File mesin yang turut berpartisipasi dalam ray tracing
•
File perintah untuk menjalankan ray tracing
File mesin diciptakan oleh penyedia jasa dengan nama “machines2”. File ini berisi kumpulan nama-nama penyedia jasa yang telah sepakat dengan negosiasi yang sebelumnya dilakukan.
51
File perintah yang diciptakan bernama “exec_tychon”. File ini perlu diciptakan mengingat bahwa jumlah mesin yang dihasilkan pada negosiasi sebelumnya dapat berubah-ubah. Perintah dalam file ini akan berubah sesuai dengan hasil negosiasi, khususnya untuk parameter “np”.
5.2.4 Output penyedia jasa Output yang dihasilkan oleh penyedia jasa berupa file “/tmp/deal”. File ini berisi harga akhir yang telah disetujui dengan penyedia tugas. Harga akhir ini didapatkan dari penyedia tugas melalui perintah MPI_Recv. File ini hanya akan diciptakan apabila terjadi perjanjian
dengan penyedia tugas.
5.3
Contoh Kasus
Kasus yang digunakan dalam tesis ini adalah simulasi ray tracing. Simulasi ini digunakan untuk menerapkan metode biaya yang telah dirancang. Salah satu contoh aplikasi untuk mensimulasikan ray tracing yang digunakan oleh penulis adalah Tachyon 0.98.7. Tachyon 0.98.7 yang digunakan perlu dimodifikasi agar dapat digunakan bersamaan dengan CCCM. Hal yang perlu ditambahkan dalam tachyon adalah perhitungan CPU cycle pada saat menjalankan ray tracing, dan perhitungan bandwidth yang dikirimkan ke penyedia tugas setelah selesai mengerjakan ray tracing.
5.3.1 Perhitungan CPU Cycle Proses pemantauan penggunaan CPU cycle dari ray tracing menggunakan perintah “top”. Perintah lengkapnya adalah “top -b -n1 | grep
52
tachyon | awk '{print $9}' > /tmp/cpuusage”. Perintah
tersebut melihat persentase penggunaan cpu untuk proses yang bernama tachyon,
lalu
menuliskan
persentase
tersebut
ke
dalam
file
“/tmp/cpuusage”. File ini nantinya akan dibaca dan dijumlahkan secara berkala. Jeda yang digunakan adalah per detik. Dalam aplikasi ini tidak menggunakan “delay()” maupun “sleep()”, namun menggunakan “time()”, karena alasan akurasi waktu. “delay()” dan “sleep()” dianggap tidak handal dalam menangani jeda dalam aplikasi.
5.3.2 Perhitungan bandwidth Perhitungan bandwidth dilakukan langsung pada saat memanggil salah satu perintah MPICH, yaitu MPI_Send_init. Definisi perintah tersebut secara lengkap adalah “int
MPI_Send_init(void
*buf,int count,MPI_Datatype datatype,int dest,int tag,MPI_Comm comm,MPI_Request *request);”.
Dari perintah tersebut, ada salah satu parameter, yaitu count, yang digunakan untuk mengetahui besarnya data yang akan dikirimkan ke penyedia tugas. Dalam tachyon, jumlah bandwidth yang digunakan dihitung
dengan
menggunakan
rumus
“totalbandwidth
=
totalbandwidth + scene->hres * 3;”. Jumlah keseluruhan
bandwidth disimpan dalam file bernama “/tmp/bandwidth”.
53
5.4
CCCM
Isi lengkap mengenai perhitungan biaya kompensasi berdasarkan penggunaan CPU cycle dan bandwidth dituliskan pada file “after_otm.c”. Jumlah kompensasi untuk penggunaan CPU cycle dihitung berdasarkan rumus “totalcompensation = totalcpuusage * PricePerSecond;”, sedangkan untuk jumlah kompensasi bandwidth dihitung berdasarkan rumus “bandwidthcompensation[i] = totalbandwidth[i] / 1000000 * BANDWIDTH_PRICE;”.
Harga bandwidth diambil dari file “config” yang sama yang digunakan dalam one-to-many bargaining sebelumnya. Integrasi antara one-to-many bargaining, tachyon, dan metode biaya menjadi CCCM dituliskan dalam “exec_otm.c”. Pada file ini akan dijalankan satu per satu, mulai dari “otm”, “tachyon”, dan yang terakhir “after_otm”.
5.5
Tampilan Layar
Gambar 18 adalah hasil tampilan layar setelah CCCM berhasil dilakukan. Hasil dari ray tracing yang dilakukan oleh tachyon dapat dilihat pada Gambar 19.
54
Gambar 16. Tampilan Layar CCCM
Gambar 17. Hasil Ray Tracing