Scalability, Profiling - Nafhan Raissa Syandana
Scalability, Profiling - Nafhan Raissa Syandana
Terkait dengan Profiling saya menggunakan cProfile serta juga pstats dan menggunakan tools yaitu tuna.
cProfile adalah modul bawaan Python yang digunakan untuk melakukan profiling pada Python. Profiling sendiri merupakan proses mengukur application performance terutama untuk mengidentifikasi bagian mana dari kode yang paling banyak memakan waktu saat dieksekusi. cProfile dapat membantu menemukan "bottlenecks" atau performance bottlenecks pada kode.
pstats merupakan modul Python untuk menganalisis hasil profiling yang dihasilkan oleh cProfile maupun modul profiling lainnya. Dengan pstats, saya dapat memuat data profil dan kemudian mengurutkannya berdasarkan berbagai metrik seperti execution time, number of calls, dan lain-lain. Modul ini membantu dalam menginterpretasikan data profiling yang telah dikumpulkan.
tuna merupakan visualization tool yang memungkinkan saya melihat data profiling dalam bentuk yang lebih mudah dipahami, seperti grafik atau diagram. Tuna mempermudah analisis data profiling dengan memberikan representasi visual sehingga dapat dengan cepat mengidentifikasi bagian kode yang memerlukan perhatian untuk dilakukan optimization.
Berikut merupakan contoh penerapan cProfile dan pstats tanpa menggunakan tuna:
'with cProfile.Profile() as profile':
Menggunakan konteks manajer with, saya membuat instance dari cProfile.Profile() yang disebut profile. Hal ini memulai proses profiling untuk semua kode yang dieksekusi di dalam blok with.
'results = pstats.Stats(profile)':
Setelah main() dieksekusi dan profiling selesai, maka data profil yang telah dikumpulkan dimuat ke dalam objek pstats.Stats yang disebut results.
'results.sort_stats(pstats.SortKey.TIME)':
Data profil diurutkan berdasarkan waktu eksekusi. pstats.SortKey.TIME menunjukkan bahwa pengurutan dilakukan berdasarkan waktu total yang dihabiskan dalam setiap fungsi.
Kemudian berikut adalah hasil keluarannya ketika dijalankan, output yang akan ditampilkan di layar terminal adalah hasil dari profil eksekusi fungsi main(). Hasil ini berupa tabel yang menguraikan berbagai statistik tentang fungsi-fungsi yang dipanggil selama eksekusi:
Pada hasil keluaran tersebut, memberikan gambaran komprehensif tentang bagaimana waktu eksekusi didistribusikan di antara berbagai fungsi dalam program yang membantu mengidentifikasi bagian-bagian kode yang perlu dioptimalkan untuk meningkatkan kinerja.
Namun, jika hanya mengandalkan hal ini saja maka hasil keluarannya masih terlalu sulit untuk dilihat dan dianalisis. Oleh karena itu, saya menggunakan tools tuna untuk membantu melihat data profiling dalam bentuk yang lebih mudah dipahami. Berikut adalah tahap awalnya:
Kemudian untuk dapat menjalankan dan melihat hasil visualisasi profiling, saya memodifikasi kode menjadi:
Dalam kode tersebut, terdapat tambahan yaitu 'results.dump_stats("results.profile")':
Data profil yang telah diurutkan kemudian disimpan ke dalam file bernama 'results.profile'. File ini dapat digunakan untuk analisis lebih lanjut atau untuk dimuat ke alat visualisasi seperti tuna yang akan saya gunakan. Berikut merupakan tampilan dari file baru yaitu 'results.profile' ketika dijalankan:
Sekarang saya akan menjalankan tools tuna dengan melakukan 'tuna results.profile' yang dimana Tuna akan memuat file 'results.profile' yang berisi data profil yang telah saya simpan sebelumnya menggunakan cProfile dan pstats. Kemudian Tuna akan memulai local web server.
Pada Server ini memungkinkan saya untuk melihat data profiling melalui web interface. Setelah local web server diinisialisasi, Tuna akan membuka web browser secara otomatis dan menampilkan interface visual untuk data profiling saya. Berikut adalah hasil tampilannya:
Dari tampilan tuna tersebut akan terlihat representasi visual dari data profiling yang mencakup grafik dan diagram yang memudahkan saya untuk menganalisis waktu eksekusi fungsi dalam program. Beberapa fitur utama dari tampilan ini mungkin termasuk Flame Graph, Call Tree, serta Statistik Fungsi. Tampilan kiri merupakan Flame Graph yang menunjukkan fungsi-fungsi yang dipanggil selama eksekusi program dan berapa banyak waktu yang dihabiskan di setiap fungsi. Saat mengklik blok pada Flame Graph di tampilan kiri, rincian fungsi yang sesuai akan disorot di tabel di tampilan kanan yang memberikan informasi lebih mendalam tentang fungsi tersebut. Berikut merupakan contoh tampilan ketika salah satu function di-klik:
Secara keseluruhan Tuna membantu dalam memvisualisasikan data profil sehingga saya dapat mengidentifikasi bottleneck dalam aplikasi dan memahami bagaimana waktu eksekusi didistribusikan di antara berbagai fungsi yang berguna untuk optimisasi kinerja program.
Comments
Post a Comment