Anda di halaman 1dari 5

Simulator Memori Java untuk Menghasilkan Memory Reference Trace

1
Yudi S. Gondokaryono, 1Bagus Prasetyo Wibowo & 1Andry Ongkinata

1
Sekolah Teknik Elektro dan Informatika – ITB
Contact Person:
Yudi S. Gondokaryono
Sekolah Teknik Elektro dan Informatika
Jalan Ganesha 10 Bandung
Phone: 22-2500985

ygondokaryono@stei.itb.ac.id

Abstrak—Pengukuran kinerja komputer adalah salah satu


masalah besar dalam riset teknologi komputer. Salah satu teknik
pengukuran adalah dengan menggunakan pemodelan. Untuk
meningkatkan akurasi pemodelan, diperlukan masukan yang
direkam dari kondisi nyata. Rekaman yang biasa dipergunakan
adalah rekaman referensi memori (memory reference trace) dari
suatu program yang sedang berjalan. Proses untuk menghasilkan Gambar 1 Pengukuran Kinerja Komputer
referensi trace tidaklah mudah. Salah satu cara yang
dipergunakan oleh penulis adalah membuat simulator memori sistem operasi tersebut. Walaupun kita bisa mendapatkan source
Java. Java dipilih karena informasi tentang bagaimana alokasi program dari suatu sistem operasi, modifikasi sistem operasi
memori program Java terdokumentasi dengan baik. Dalam tidaklah mudah. Maka karena faktor-faktor inilah, rekaman
makalah ini penulis akan menampilkan hasil rekaman dari
memori referensi tidak banyak tersedia untuk kebutuhan riset.
simulasi program sederhana dengan menggunakan suatu format
rekaman yang dimodifikasi dari format DINERO [8]. Penggunaan Java adalah bahasa pemrograman sangat populer
format baru ini dipergunakan untuk mengakomodasi informasi dipergunakan untuk membuat aplikasi internet dan cell-phones.
tentang obyek-obyek yang diakses oleh program Java. Informasi tentang cara kerja Java Virtual Machine sudah
terdokumentasi dengan baik [20]. Sehingga kita dapat dengan
mudah mengetahui cara kerja dari bahasa assembly Java yang
Keywords—Arsitektur Komputer, Java, Memory Reference Trace,
disebut sebagai Java bytecode. Pengertian tentang Java
Pengukuran Kinerja, Simulator
bytecode sangat esensial untuk mengetahui akses memori yang
terjadi pada saat Java bytecode dieksekusi. Dengan alasan ini
1. PENDAHULUAN
maka penulis membuat simulator memori Java yang dapat
menghasilkan memory reference trace. Dengan menggunakan
Pengukuran kinerja komputer adalah salah satu masalah
Java sebagai wahana perekaman, proses perekaman bisa
besar dalam riset teknologi komputer. Pemodelan komputer
menjadi lebih murah dan mudah.
menjadi salah satu metoda yang sangat penting dalam
Hasil kompilasi Java program adalah Java bytecode.
pengukuran kinerja. Pengukuran kinerja komputer dapat
Simulator Memori Java menerima masukan Java bytecode dan
digambarkan seperti pada Gambar 1. Pemodelan yang
akan mensimulasikan eksekusi program Java tersebut dan pada
berdasarkan model-model statistik kadangkala masih belum
saat yang sama akan merekam referensi-referensi memori yang
cukup akurat. Salah satu cara meningkatkan akurasi pemodelan
dihasilkan oleh program tersebut. Proses ini terlihat pada
adalah dengan menggunakan masukan yang direkam dari
Gambar 2.
kondisi nyata. Rekaman yang biasa dipergunakan adalah
Rekaman referensi memori akan disimpan dalam file dengan
rekaman referensi memori (memory reference trace) dari suatu
format DINERO. DINERO adalah format file standar untuk
program yang sedang berjalan [7][10][19].
merekam referensi memori. DINERO merekam referensi
Pada kenyataannya merekam referensi memori untuk suatu
memori baik untuk data dan instruksi. Dalam penelitian ini,
program yang sedang berjalan tidaklah mudah. Teknik yang
modifikasi format DINERO dilakukan untuk juga merekam
biasa dipergunakan adalah dengan menggunakan hardware yang
nama objek dan juga jenis objek.
dirancang khusus untuk merekam semua referensi memori yang
Dalam makalah ini penulis akan menyampaikan penjelasan
dikeluarkan prosesor. Metoda ini sangatlah mahal dan juga
mengenai struktur memori Java, Simulator Memori Java yang
sangat sulit. Salah satu metoda lain adalah dengan memodifikasi
dibuat, dan format hasil rekaman memory reference trace yang
sistem operasi agar dapat merekam semua referensi memori
sudah dimodifikasi.
untuk program yang sedang berjalan. Tentunya metoda ini
membutuhkan pengetahuan yang sangat detil tentang sistem
2. STRUKTUR MEMORI JAVA
operasi yang digunakan. Karena kebanyakan sistem operasi
dibuat perusahaan komersil, kita tidak mungkin memodifikasi
e-Indonesia Initiative 2008 (eII2008)
Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia
21-23 Mei 2008, Jakarta
Setiap program Java yang dijalankan oleh Java Virtual menyimpan operand untuk operasi setiap instruksi. Kedalaman
Machine (JVM) akan memiliki alokasi memori yang dibagi dari setiap stack ditentukan pada saat kompilasi. Instruksi
menjadi dua bagian. Bagian pertama disebut sebagai JVM stack
yang dialokasikan untuk setiap thread. Bagian kedua adalah
heap area yang dialokasikan untuk semua thread. Alokasi
memori tersebut dapat dilihat pada Gambar 3.
Heap area dialokasikan pada saat JVM pertama kali
dijalankan. Heap area dipergunakan untuk menyimpan instance
dari class dan array. Heap area dipergunakan bersama oleh
semua thread. Penyimpanan objek dalam heap area diatur oleh
automatic management system (garbage collector) dari JVM.

Method Area
Method area dipergunakan untuk menyimpan semua bagian
instruksi dari program. Bagian ini dapat dianalogikan sebagai
text segment dalam Unix proses. Bagian ini juga menyimpan
juga semua class termasuk di dalamnya konstanta, field, dan
method [20]. Gambar 2 Alokasi Memori untuk Program Java [20]

Runtime Constant Pool JVM (bytecode) bisa melakukan proses load konstanta dan
data dari local variable ke operand stack. Instruksi lainnya
Constant Pool berisikan data yang dipergunakan setiap
dapat mengambil operand dari operand stack, melakukan
class. Bagian ini dapat dianalogikan sebagai symbol table operasi dengan data tersebut, dan menyimpan kembali
seperti biasanya terdapat dalam bahasa pemrograman lainnya
hasilnya ke dalam operand stack. Operand stack juga dapat
[20]. dipergunakan untuk parameter passing pada saat invokasi
method [20].
Java Stack adalah tempat penyimpanan untuk setiap thread.
Bagian memori stack dialokasikan pada saat thread dijalankan.
3. SIMULATOR MEMORI JAVA
JVM stack dapat dianalogikan seperti stack pada bahasa
pemrograman konvensional seperti C. JVM stack berisikan
Simulator Memori Java dibuat untuk mensimulasikan
local variable, hasil sementara, dan dipergunakan pada saat
memori akses yang terjadi pada saat suatu program Java sedang
invokasi method dan pada saat kembali dari method.
berjalan. Setiap ada akses memori baik untuk operasi baca
Dalam JVM stack terdapat bagian memori yang dialokasikan
ataupun tulis akan direkam dalam trace file. Secara garis besar,
setiap saat suatu method dijalankan. Bagian memori ini disebut
program ini akan membaca sebuah program Java yang sudah
sebagai frame. Frame akan didealokasi setelah method selesai
dikompilasi dengan file extension .class. Setiap instruksi dibaca
dijalankan. Setiap method hanya akan memiliki sebuah frame.
dari file .class berbentuk Java bytecode. Setiap Java bytecode
Frame berisikan local variable, operand stack, dan referensi
akan dieksekusi seolah-olah dijalankan pada JVM. Gambar 4
untuk constant pool dan class method.
menggambarkan cara kerja program.
Saat program dijalankan, simulator akan membaca program
Local Variables
dari file .class. Pembacaan ini dimulai dengan
Setiap frame berisikan berbagai local variable. Panjang dari mengelompokkan bagian dalam file .class. Bagian tersebut
local variable ditentukan pada saat kompilasi. Jenis dari local dapat berupa constant pool, interface, method, serta attribute.
variable dapat berupa boolean, byte, char, short, int, float, Setiap bagian tersebut dapat berupa array dengan ukuran yang
reference, atau return Address. Sepasang local variable dapat tidak konstan. Simulator kemudian mengalokasikan memori
menyimpan jenis long atau double. Pengalamatan local untuk menampung bagian-bagian tersebut. Proses ini diulang
variable menggunakan index addessing, Jadi local variable kembali hingga bagian-bagian dalam file .class selesai
yang pertama memiliki index nol [20]. dikelompokkan semua.
Untuk dapat mengakses data-data bagian yang telah
Operand Stacks dikelompokkan tadi, dibuat name and index relation tables.
Tabel ini dibuat untuk memudahkan dalam proses mengakses
Setiap frame berisikan stack yang dipergunakan untuk
constant pool, interface, method, attribute, serta mengakses sub-
sub bagiannya (misal instruksi dari method). Dengan tabel ini
juga dapat dengan mudah memperoleh informasi yang
berhubungan dengan pengalokasian memori lainnya, seperti
ukuran stack serta ukuran variable lokal.
Setelah proses ini selesai, simulator akan menjalankan tiga
langkah sebagai berikut:

e-Indonesia Initiative 2008 (eII2008)


Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia
21-23 Mei 2008, Jakarta

Gambar 3 Proses Perekaman Referensi Memori dengan menggunakan


Simulator Memori Java
• Membaca sebuah instruksi Java bytecode Method Call
Instruksi Java bytecode memiliki panjang yang variable. Jika Saat ditemukan adanya pemanggilan suatu method,

Instruction
Execute

Set Local
Variabel Read Local Method Arithmetic Control
Push stack Pop stack Method return (If, switch,
(Offset, Variabel Call (+, -, *)
DataIn) loop)

Local Constant
Terminate
PUSH POP Variable Pool
Frame
Access Access

Create
Frame

END

Gambar 4 Jenis-jenis bytecode dan operasinya


Gambar 5 Simulator Memori Java

dilakukan pembacaan data dari Constant Pool untuk


diketahui bahwa instruksi yang akan dijalankan memiliki lebih memperoleh informasi yang berhubungan dengan method.
dari satu byte, maka simulator akan membaca byte-byte Informasi ini biasanya berupa indeks dari method pada .class
selanjutnya sebagai informasi penunjang dalam menjalankan file, jumlah argumen dalam method, jumlah variable lokal
instruksi. Dalam setiap akses memori untuk memperoleh yang dibutuhkan, serta jumlah stack yang dibutuhkan.
instruksi Java bytecode, diambil juga informasi mengenai Setelah informasi tersebut didapatkan, dibuat sebuah frame
memori tersebut untuk kemudian direkam sebagai referensi baru sebagai frame untuk method yang dipanggil. Setiap
memori. informasi akses memori yang dilakukan dalam proses ini
direkam sebagai referensi memori.
• Menjalankan instruksi tersebut
Instruksi yang diperoleh dalam langkah sebelumnya Method Return
kemudian dijalankan secara native. Dengan demikian, simulator
Saat suatu method berakhir, frame yang berasosiasi
mengikuti jalannya program Java yang disimulasikan. dengan method tersebut dihapus dari memori. Untuk
selanjutnya, instruksi yang akan diambil adalah instruksi
• Mensimulasikan akses memori yang dilakukan oleh yang terdapat dalam return address. Setiap informasi akses
instruksi tersebut memori yang dilakukan dalam proses ini direkam sebagai
Saat eksekusi instruksi membutuhkan akses memori, referensi memori.
simulator mengakses memori secara native. Informasi tentang
memori yang diakses, baik untuk membaca maupun untuk Arithmetic
menulis, kemudian direkam sebagai referensi memori.
Instruksi aritmatika akan mengambil data dari stack frame
untuk kemudian diproses. Hasil dari proses tersebut
Jumlah Java bytecode yang harus disimulasikan cukup
kemudian disimpan kembali dalam stack frame. Dengan
banyak. Java bytecode dapat kita kategorikan ke dalam
demikian, instruksi aritmatika berhubungan dengan instruksi
beberapa jenis sesuai dengan operasi yang dilakukan. Sebagai
push/pop stack.
gambaran, jenis-jenis bytecode dapat dilihat pada Gambar 5.

Push/Pop Stack Control

Instruksi push atau pop stack diproses secara native. Instruksi Control akan mengatur arah pengambilan
Proses push dan pop dilakukan pada memori yang telah instruksi selanjutnya. Jika dibutuhkan, instruksi ini akan
dialokasikan sebagai frame. Setiap proses akses memori ini, mengakses memori untuk melakukan perbandingan yang
informasi mengenai akses memori tersebut direkam sebagai kemudian digunakan sebagai acuan pengambilan keputusan
memori referensi. arah. Setiap informasi akses memori yang dilakukan dalam
proses ini kemudian direkam sebagai referensi memori.
Write/Read Local Variable
4. FORMAT REKAMAN REFERENSI MEMORI
Instruksi baca atau tulis variable lokal akan mengakses
bagian variable lokal dalam frame. Setiap akses memori, Rekaman referensi memori biasanya menggunakan format
informasi mengenai akses memori tersebut juga direkam DINERO[8]. Rekaman memori dengan format DINERO
sebagai memori referensi. merekam tiga jenis informasi. Ketiga informasi tersebut adalah:
e-Indonesia Initiative 2008 (eII2008)
Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia
21-23 Mei 2008, Jakarta
• Jenis memori akses yang dikodekan dalam tiga angka Start tracing...
yaitu 0- baca, 1- tulis, 2- mengambil instruksi 1 014E2D10 0 v bootstrap
• Alamat segmen memori yang diakses 2 883DD0C0
0 014E2D10
0
0
i
v
bootstrap
bootstrap
• Offset dari segmen memori yang diakses 1 FF428520 0 s bootstrap
2 883DD0C1 1 i bootstrap
2 883DD0E0 0 i java.lang.String.<init>
1 FF428548 0 s java.lang.String.<init>
Untuk kebutuhan riset yang berkaitan dengan program- 2 883DD0E2 2 i java.lang.String.<init>
program berorientasi objek, dibutuhkan juga informasi ....
1 014E2D3C 3 v java.lang.String.<init>
mengenai nama objek yang sedang diakses dan juga jenis dari 2 883DD0EA A i java.lang.String.<init>
2 883DD0C4 4 i bootstrap
setiap objek tersebut. Modifikasi format DINERO dilakukan
dengan menambahkan dua informasi di atas. Sehingga hasil
rekaman referensi memori dengan format yang dimodifikasi Gambar 8 Output program Java Memori Simulator
terlihat dalam Gambar 6.
2 88000004 1 i Java.lang.String.<init> 6. KESIMPULAN
2 88000004 2 i Java.lang.String.<init>
0 d4000004 0 c Java.lang.String.<init>
0 ff000003 2 s Java.lang.String.<init> Penulis telah berhasil untuk membuat sebuah program yang
0 ff000003 3 s Java.lang.String.<init>
1 b3000090 1 o Java.lang.String mensimulasikan akses memori untuk suatu program Java.
Dengan mengetahui setiap akses memori maka dengan mudah
Gambar 6 Contoh hasil rekaman dengan format DINERO yang dimodifikasi kita dapat membuat suatu memory reference trace file yang
merupakan tujuan utama dari penelitian ini. Simulator Memori
Keterangan setiap kolom adalah sebagai berikut: Java ini dijadikan sebagai sebuah alat bantu para peneliti yang
Kolom Keterangan membutuhkan trace file.
1 Jenis memori akses (0-baca, 1-tulis, 2-mengambil
instruksi) 7. ACKNOWLEDGEMENT
2 Alamat segmen memori dalam heksadesimal
3 Offset dari alamat segmen memori
dalamheksadesimal Penelitian ini dibiayai oleh Riset ITB berdasarkan Surat
4 Jenis objek Perjanjian Pelaksanaan Penelitian No: 147/K01.16/PL/2007,
‘i’ – instruction tanggal 10 Januari 2007.
‘c’ – constant pool
‘v’ – local variable
‘s’ – operand stack 8. REFERENCES
‘o’ – object instances
5 Nama Objek [1] B. Cmelik and D. Shade Keppel, “A fast instruction-set simulator for
executing profilling,” Proceedings of the 1994 SIGMETRICS Conference
5. HASIL IMPLEMENTASI SIMULATOR MEMORI JAVA on Measurement and Modeling of Computer Systems, Nashville, TN,
ACM, pp. 127-137, 1994.
[2] Vinodh Cuppu, Bruce Jacob, Brian Davis and Trevor Mudge, “A
Simulator Memori Java yang telah dibuah sudah dapat Performance Comparison of Contemporary DRAM Architectures,”
mengeksekusi program Java. Gambar 7 menunjukkan kode Proceeding of 26th International Symposium Computer Architecture, June
dalam bahasa Java yang dieksekusi oleh Simulator Memori 1999.
Java. [3] A. Eustace, and A. Srivastava, “ATOM: a flexible interface for building
high performance program analysis tools,” Proceedings of the USENIX
public class sample1 Winter 1995 Technical Conference on UNIX and Advanced Computing
{
public static void main (String[] args) Systems, New Orleans, Louisiana, pp. 303-314, January, 1995.
{ [4] C. Fuentes, Hardware support for operating systems. University of
int x, y, z;
Michigan Technical Report, 1993.
x = 10; [5] J. Gee, M. Hill, D. Pnevmatikatos, and A. J. Smith, “Cache Performance
y = 12;
z = x + y; of the SPEC92 Benchmark Suite,” IEEE Micro, August, pp. 17-27, 1993.
} [6] Yudi Gondokaryono, “Capability-based Memory Management Unit”, New
} Mexico State University Ph. D Distertation, December, 2003.
[7] J. L. Hennesy and D. A. Patterson, Computer Architecture: A Quantitive
Gambar 7 Program Java yang digunakan sebagai input Java Memori Simulator Approach, Morgan Kaufmann, Palo Alto, CA, third edition, 2002.
[8] M. D. Hill, dineroIII documentation, unpublished, Unix-style Man Page,
Setelah program Java tersebut dikompilas, hasil kompilasi University of California, Berkeley, October 1985.
dari program tersebut digunakan sebagai input dari program [9] M. Holliday, “Techniques for cache and memory simulation using address
Simulator Memori Java. Simulator kemudian menampilkan reference traces,” International Journal in Computer Simulation, 1, pp,
129-151, 1991.
referensi-referensi memori apa saja yang diakses pada saat
[10] Raj Jain, The Art of Computer System Performance Analysis, John Wiley
program Java tersebut dijalankan. Untuk program Java pada & Sons, New York, 1991.
Gambar 7, keluaran dari program simulator yang dibuat dapat [11] Eric E. Johnson, “PDATS II: Improved compression of address traces”
dilihat pada Gambar 8. IEEE International Performance, Computing, and Communications
Conference, February 1999.
[12] A. Lebeck, and D. Wood, “Active Memory: A new abstraction for
memory-system simulation,” Proceedings of the 1995 SIGMETRICS
Conference on the Measurement and Modeling of Computer Systems,
e-Indonesia Initiative 2008 (eII2008)
Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia
21-23 Mei 2008, Jakarta
May, pp. 220-230, 1995.
[13] A. M. Maynard, C. Donnelly, and B. Olszewski, “Contrasting
characteristics and cache performance of technical and multi-user
commercial workloads,” Proceesings of the Sixth International Conference
on Architectural Support for Programming Languages and Operating
Systems, San Jose, CA, ACM, pp. 145-156, 1994.
[14] D. Nagle, R. Uhlig, and T. Mudge, Monster: A tool for analyzing the
interaction between operating systems and computer architectures,
University of Michigan Technical Report CSE-TR-147-92, 1992.
[15] New Mexico State University, “NMSU Tracebase”,
http://tracebase.nmsu.edu/tracebase.html.
[16] A. D. Samples, “Mache: No-Loss Trace Compaction,” Proceedings of
ACM SIGMETRICS, pp. 89-97, 1989.
[17] A. J. Smith, “Cache memories”, Computing Surveys, 14(3), pp. 473-530,
1982.
[18] Standard Performance Evaluation Corporation, “SPEC 92 Benchmarks,”
http://www.spec.org/osg/cpu92/.
[19] R. A. Uhlig and T. N. Mudge, “Trace-Driven Memory Simulation: A
Survey,” ACM Computing Surveys, 29(2), pp. 128-170, June 1997.
[20] Frank Yelin and Tim Lindholm, The JavaTM Virtual Machine
Specification, Second Edition, Addison Wesley, 1999.

e-Indonesia Initiative 2008 (eII2008)


Konferensi dan Temu Nasional Teknologi Informasi dan Komunikasi untuk Indonesia
21-23 Mei 2008, Jakarta

Anda mungkin juga menyukai