Performance Performance Definition Kinerja atau Performance dalam kehidupan sehari-hari ada beberapa perspektif atau pandangan, yakni sebagai berikut. Purchasing Perspective, kita adalah orang yang akan membeli, user yang akan menggunakan/ Design Perspective, kita adalah perancang, yang mendesain. Dari kedua pandangan ini, mempunyai angle dan pengukuran yang berbeda. Saat kita membeli sesuatu, kita pasti akan mencari harga yang murah, namun performancenya tinggi, canggih. Sebagai perancang, tujuan kita ingin membuat sesuatu yang lebih baik dari yang sebelumnya. Jawabannya berbeda dari kedua pandangan tersebut. Apakah dihitung dari yang paling murah? Atau rasionya? Ada banyak kriterianya dan masing-masing valid. Selain itu, harus ada bagaimana, atau dasar cara mengukurnya, serta nilai untuk evaluasinya, apa dasar perbandingannya. Pada topik ini, kita akan mengukur kinerja suatu mesin dari sudut pandang perancang. Misalkan pada pesawat, kita bisa membuat parameter kapasitas penumpang, jarak tempuh, kecepatan, serta jumlah penumpang dikali kecepatan (berapa penumpang dan seberapa jauh yang bisa diangkut dalam satuan waktu, efektivitas, throughput). Kalau misalkan kita ingin beli pesawat, tentunya kita akan menentukan berdasarkan kriterianya. Misalnya dari kecepatan, jarak tempuh, atau efektivitas pengangkutan, atau jumlah penumpang. Pada komputer kita bisa melihat kriteria berdasarkan waktu reaksi terhadap tugas yang diberikan, pengguna yang bisa menggunakan, ataupun berapa tugas yang dapat diselesaikan dalam suatu waktu. Selanjutnya, kita harus mengetahui bagaimana cara mengukur kriteria tersebut, setelah mengetahui apa yang ingin diukur. Response time/Execution time/latency Ialah waktu yang dibutuhkan dari suatu pekerjaan dimulai sampai selesai mengukurnya ialah dapat ditanya. Berapa lama untuk melaksanakan satu tugas? Berapa lama harus menunggu query database? Throughput Total pekerjaan yang dilakukan dalam suatu waktu. Berapa banyak tugas/pekerjaan yang dapat dilakukan bersamaan? Seberapa cepat rata-rata waktu eksekusinya? Saat kita mengupgrade suatu mesin dengan komponen baru, harus tahu apa yang harus ditingkatkan. Kalau update prosesor, meningkatkan response time dan throughput. Kalau menambahkan mesin, meningkatkan throughput. Performance atau kinerja dihitung dalam satuan berapa unit yang selesai per satuan waktu, semakin besar angkanya, semakin besar. ✔ Response time atau waktu respon, semakin kecil waktunya makan semakin baik. ✔ Performance dari suatu mesin berbanding terbalik dengan respons timenya. Saat kita bilang bahwa mesin n kali lebih cepat dari mesin , maka percepatan n-nya dihitung dengan: Computing Time Ada banyak cara untuk menghitung waktu. Namun, waktu mana yang harus kita ukur. Elapsed time waktu dari job dimasukkan sampai keluar hasilnya. Mengukurnya mudah. akan menghitung semuanya termasuk waktu untuk mengakses disk, memori, input output, dan lainnya. Tidak terlalu baik untuk perbandingan, terutama yang ingin kita bandingkan ialah kecepatan prosesor. CPU Time tidak termasuk input output atau waktu yang dihabiskan untuk menjalankan proses program lain. Kita ketahui bahwa CPU tentu saja melakukan beberapa tugas dalam suatu waktu, sehingga pasti ada beberapa program yang diproses di dalam CPU secara bersamaan. Terdiri dari system time (berkaitan dengan OS, dan koordinasi semua sistem) dan user time. Fokus kita ialah User CPU time Waktu yang dihabiskan untuk memproses baris-baris perintah di dalam program. Di POK yang difokuskan ialah User CPU time. Bagaimana cara mengukur User CPU time? Saat kita membeli komputer salah satu informasi yang kita punya ialah clock cycles. Untuk melaporkan waktu eksekusi, biasanya tidak menggunakan detik, tapi clock cycles, yaitu basis satuan waktu di dalam mesin. Komponen pertama yang dibutuhkan ialah kita harus tau, berapa clock cycle yang diperlukan untuk menjalankan program kita dari awal sampai akhir. Kemudian, komponen keduanya kita harus tau Cycle time, atau satu cyclenya berapa detik (Periode atau Seconds/Cycle), atau satu detik berapa cycle (Frekuensi atau Cycles/Second). Jangan terbalik-balik! 😄 Cycle time (Cycle period atau clock period) ialah jarak waktu di antara dua rising edge berurutan dalam detik. Clock rate (Clock frequency) ialah banyaknya cycle dalam artinya terdapat Contoh : Cycle dalam detik. Satuannya Herts, dan Hertz detik. MHz clock Maka setiap detiknya ada clock/detik-nya pada mesin tersebut. Jadi misal ingin dihitung cycle time atau clock period, artinya berapa detik lamanya sebuah clock. µ Saat ingin mempercepat kecepatan CPU User Time, maka seconds/program harus diturunkan dari yang lama. Sehingga, mesin berjalan lebih cepat. Pada komponen pertama, agar lebih cepat dapat diturunkan. Maksudnya ialah kita membuat program yang lebih efektif. Kita cari algoritma atau compiler yang lebih baik. Program saya harus bisa dilaksanakan dalam instruksi yang lebih sedikit. Pada komponen kedua, agar lebih cepat harus diturunkan pula. Maksudnya ialah kita menurunkan clock period dari CPU kita, atau meningkatkan clock frequency-nya. Cycles per Instruction Setiap instruksi pada suatu program akan dilaksanakan mengikuti cycle. Ada nilai CPI yang menunjukkan untuk setiap instruksinya membutuhkan berapa cycle. Perhatikan bahwa instruksi yang berbeda membutuhkan jumlah cycle yang berbeda pula. Bagaimana cara menghitung CPI: Apakah jumlah cycle sama dengan jumlah instruksi? Tidak. Apakah jumlah cycle sebanding/proporsional secara linear dengan jumlah instruksi? Tidak. Penyebabnya karena setiap instruksi memerlukan waktu yang berbeda-beda untuk melaksanakan instruksi. Saat mengalikan, sama saja dengan menjumlahkan berulang. Tentu perkalian membutuhkan waktu yang lebih banyak dari penjumlahan. Mengakses bilangan floating point tentu akan lebih banyak dan lama operasinya dibandingkan integer Mengakses main memory akan lebih lama dari mengakses register. Untuk menghitung Average cycle per instruction, kita harus menghitung setiap komponennya. CPI = (CPU time × Clock rate) / Instruction count = Clock cycles / Instruction count CPU time = Seconds/Program = Instructions/Program × Cycles/Instruction × Seconds/Cycle dengan Contoh 1 Suatu program berjalan dengan waktu 10 detik pada komputer A, dengan frekensi clock . Ingin didesain mesin baru yang bisa menjalankan program ini dalam 6 detik. Namun mesin B membutuhkan 1.2 kali clock cycles lebih banyak dari program A untuk program yang sama. Pada mesin B, akan dibutuhkan 1.2 kali lebih banyak cycle, dan ingin dibuat berjalan dalam 6 detik. Maka, Contoh 2 Misalkan kita ingin memilih antara dua buah kode, mana yang lebih optimal. Kode-kode tersebut ada yang menggunakan Class A, B, dan C yang masing-masing membutuhkan 1, 2, dan 3 cycles secara berturut-turut. Program pertama ada 5 instruksi: 2 A, 1 B, dan 2 C. Program kedua ada 6 instruksi: 4 A, 1 B, dan 1 C. Kode mana yang lebih cepat? Seberapa cepat dari yang lain? Berapa CPI untuk setiap kodenya? Analisis Kode Pertama 2 Tipe A = 2 Cycles 1 Tipe B = 2 Cycles 2 Tipe C = 6 Cycles Jumlah clock = 10 Cycles CPI = 10 Cycles/5 Instruksi = 2 Analisis Kode Kedua 4 Tipe A = 4 Cycles 1 Tipe B = 2 Cycles 1 Tipe C = 3 Cycles Jumlah clock = 9 Cycles CPI = 9 Cycles/6 Instruksi = 1.5 Karena dilakukan proses pada komputer yang sama, maka clock rate atau frekuensinya sama. Kode 2, tentu lebih cepat kali dari Kode 1. Contoh 3 Misalkan ada dua mesin A dan B. Mesin A memiliki clock cycle time 10 ns, dan CPI 2.0. Mesin B memiliki clock cycle 20 ns, dan CPI 1.2. Yang mana mesin yang lebih cepat? Seberapa cepat? Saat jumlah instruksinya sama, atau instruksi untuk programnya sama, waktu CPU dapat dihitung dengan rumus. Karena ISA yang sama, maka instructions per programnya secara implisit dianggap sama. Mesin A, lebih cepat 24/20 kali, atau 1.2 kali dari Mesin B. Contoh 4 Panjang banget, hehehe. Bisa dilihat di video 3 contohnya. Perhatikan bahwa semakin kecil CPI, maka semakin cepat mesinnya. Benchmark Benchmark adalah sesuatu yang sangat bermanfaat. Dengan adanya benchmark kita dapat lebih memahami brosur-brosur komputer yang biasa kita dapatkan saat ingin membeli laptop baru. 📰 Untuk menghitung performance suatu mesin, banyak yang berlomba-lomba bilang bahwa performance mesinnya lebih bagus. Namun tidak ada standar khususnya. Sehingga diadakanlah sistem benchmarking ini. 👍 Benchmarking ialah proses menentukan program untuk mengevaluasi performance dari suatu mesin. Gunanya ialah untuk menghitung atau mengukur, sebagai standar. Jadi kita membandingkan apple to apple. 🍎 Mencari suatu kondisi yang standar dan sama untuk setiap mesin. Program yang dipilih diharapkan dapat menggambarkan workload yang akan diberi. Benchmarks ialah program-program yang digunakan untuk mengukur performance. Saat ingin membuat benchmark, ada beberapa kemungkinan yang digunakan sebagai benchmark Actual Target Workload Yaitu workload asli, yang akan diberikan. Keuntungan: Sangat representatif. Kerugian: Terlalu spesifik, tidak bisa saling mencocokkan dengan versi lain. Tidak portable, tidak ramah pindah platform. Mengukurnya susah, karena datanya sulit diduplikasi dengan data asli. Susah mengidentifikasi problem/flaws saat melakukan benchmark. Full Application Benchmarks Menggunakan aplikasi benchmarks. Keuntungan: Portable, bisa dipakai antar platform. Banyak dipakai orang, user basenya besar. Improvementnya berguna untuk banyak orang. Kerugian: Kurang representatif. Small "Kernel" Benchmarks Saya kebingungan arti kernel apa ☹ A kernel is the foundational layer of an operating system (OS). It functions at a basic level, communicating with hardware and managing resources, such as RAM and the CPU. Kalau saya baca, itu artinya semacam core atau inti dari suatu sistem operasi. Saya kira semacam kacang-kacangan atau makanan yang berhubungan dengan jagung. 🌽 Keuntungan: Mudah dijalankan Kerugian: Mudah mengecoh, bisa kurang akurat. Microbenchmarks Keuntungan: Bisa mengetahui kemampuan atau potensi tertinggi, serta tempat dimana proses terlambat terjadi, yaitu bottlenecksnya. Kerugian: Puncak performance biasanya jauh dari aplikasi, belum tentu cocok saat diterapkan. SPEC '95 SPEC (Systems Performance Evaluation Cooperative) SPEC '95 sudah deprecated dan retired, sekarang ada evaluation yang baru, sekitar tahun 20172019. Perusahaan-perusahaan sudah menyetujui untuk menggunakan input dan program tertentu untuk benchmark. Pada SPEC '95, terdapat 18 aplikasi (dengan input) yang mencerminkan atau menggambarkan workload komputasi, kira-kira dipakai untuk apa. Ada 8 untuk operasi integer: go, m88ksim, gcc, compress, li, ijpeg, perl, vortex. Ada 10 untuk operasi floating-point yang berat: tomcatv, swim, su2cor, hydro2d, mgrid, applu, turb3d, apsi, fppp, wave5. Compile flag yang digunakan juga sudah standar, tidak boleh ada yang dioptimisasi atau dinerf. Yang spesifik atau khusus dibuang, akan digunakan program yang umum. SPEC '95 masih bisa diharass, diabuse, bug dari intel. SPEC ini cukup memberi gambaran untuk kinerja suatu mesin. Pada suatu ISA, peningkatan performance dari CPU bisa dari 3 sumber: Clock rate atau frekuensinya dinaikkan. Bisa diimprove organisasinya, sehingga instruksinya lebih sedikit, atau CPI nya lebih sedikit. Compiler atau penyusunan ke bahasa mesinnya di-enhance agar menurunkan jumlah instruksi rumit menjadi lebih sederhana, sehingga menurunkan CPI. Pada frekuensi yang sama, Pentium Pro 1.4 kali lebih cepat untuk komputasi integer dan 1.7 kali lebih cepat untuk floating point dari Pentium. Lebih cepat karena adanya pipelining, sistem memori. Amdahl's Law Ada kesalahan, berdasarkan hukum Ahmdahl. yaitu mengharapkan improvement dari salah satu aspek komputer kita, maka akan proporsional pada seluruh performa mesin. Misalnya ada suatu mesin yang menjalankan program selama 100 detik. Kemudian ada komponen multiplikasi yang menghabiskan 80 detik. Apabila kita ingin programnya 4 kali lebih cepat, berapakah harus ditingkatkan speedup multiplikasinya? Untuk mempercepatnya 4 kali, kita harus lihat komponennya. Komponen non perkalian memakan waktu 20 detik, komponen perkalian 80 detik. Saya ingin mempercepat prosesnya 4 kali lebih cepat. Waktunya akan terpotong, hingga 1/4 kali. Maka harus berjalan selama 25 detik. Perhatikan bahwa pada bagian non perkalian tetap menghabiskan 20 detik, maka komponen perkalian harus meningkat dari 80 detik menjadi 5 detik. Kita harus mempercepat 16 kali. Contoh ini memberikan gambaran, apabila kita meningkatkan komponen perkalian sebanyak 16 kali, maka program secara keseluruhan hanya akan meningkat sebanyak 4 kali. Meskipun proses perkalian sangat cepat, namun Amdahl's Law berlaku disini. Misal saya ingin meningkatkan kecepatan mesin 5 kali lipat. Maka yang tadinya 100 detik, harus menjadi 20 detik. Sekarang, maka proses perkalian harus "Super speed", yaitu 0 detik(?) Mungkinkah? tentu tidak! Maka hal ini tidak feasible dan tidak mungkin dilakukan. Dalam merancang sesuatu, tentu ada batas dan limitasi. Performance overall suatu program tentu dibatasi oleh komponen yang tidak dipercepat. Korelasinya, ialah saat ingin meningkatkan suatu komponen, kita harus perhatikan komponen yang paling banyak, sering atau berkontribusi paling besar terhadap waktu jalannya program. Saat meningkatkan yang "boros", maka overall akan meningkat lebih baik. Misalnya komponen "penambahan" atau adder, yang sering digunakan atau dipanggil dalam berbagai instruksi, dapat ditingkatkan karena digunakan dalam banyak komponen. Contoh 5 Misalkan kita ingin meningkatkan operasi floating-point 5 kali lebih cepat. Saat belum ada peningkatan, dibutuhkan 12 detik untuk proses programnya, separuhnya dipakai dalam operasi floating point. Yaitu, sebanyak 6 detik. Saat dipercepat 5 kali lipat, maka waktu operasi floating point hanya akan menghabiskan 6/5 = 1.2 detik!, komponen non-floating-point akan menghabiskan 6 detik. Sehingga total program akan menjadi 7.2 detik. Sehingga total percepatannya ialah 12/7.2 = 1.67 kali. Contoh 6 Misalnya Anda tidak sudi meningkatkan dengan lelah operasi floating-point. Anda ingin mencari benchmark yang floating-pointnya lebih banyak, yang komposisinya mungkin tidak 50:50 seperti tadi. Kita ingin percepatan totalnya tiga kali lipat. Misalnya ada benchmark yang berjalan selama 100 detik. Maka berapa komposisinya sehingga target kita tercapai? Mari kita simak. Kita misalkan bobot floating point dengan . Agar total dipercepat tiga kali lipat, maka program harus berjalan secepat detik, atau detik Percepatan sebanyak 5 kali lipat pada komponen floating-point akan menjadikan waktunya menjadi sebanyak detik. Perhatikan bahwa komponen non-floating point akan menghabiskan waktu detik. dapat dibuat persamaan: Jadi, komponen floating point pada program tersebut harus sebanyak 83.333 detik! Sehingga saat kita membaca brosur atau benchmark, kita harus perhatikan dia menggunakan benchmark apa, sehingga kita bisa melihat dia bagusnya dimana. Saat kita melihat "Oh ini program saya kencang!" tapi kita harus perhatikan ini menggunakan benchmark yang mana, komponennya apa, dan seberapa besar komponen tersebut pada benchmark yang ada.