Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial Internet of Things >> Teknologi Internet of Things

Membuat Profil Aplikasi Terdistribusi dengan Perf

Saya, seperti banyak pengembang, pernah berada dalam situasi di mana saya perlu mengambil aplikasi yang sudah ada dan membuatnya lebih cepat–pada dasarnya dengan menghapus kode lambat dan menggantinya dengan kode cepat. Sekarang saya tahu untuk mengikuti satu aturan sederhana dalam hal mengoptimalkan kode:

Kode apa pun yang menurut saya memperlambat aplikasi, adalah tempat yang seharusnya saya lihat terakhir.

Profiling adalah perdagangan yang membuat Anda berdamai dengan keterbatasan intuisi Anda dengan sangat cepat. Saya menyadari sejak awal bahwa saya membutuhkan pengukuran yang dingin dan keras untuk memberi tahu saya bagian mana dari kode saya yang perlu dioptimalkan. Untungnya ada banyak alat profil yang tersedia yang dapat mengukur apa saja yang berhubungan dengan bagaimana kode Anda berjalan.

Namun, alat tidak selalu membuat pembuatan profil menjadi mudah. Menafsirkan pengukuran bisa jadi rumit, dan variabel perlu dikontrol dengan ketat saat melakukan eksperimen. Secara khusus, aplikasi multi-utas dan terdistribusi sulit untuk diprofilkan.

Siapa pun yang pernah harus men-debug kondisi balapan akan terbiasa dengan betapa sensitifnya waktu perilaku aplikasi multi-utas. Membuat profil aplikasi multi-utas memiliki tantangan serupa, karena waktu menjadi faktor penting dalam pengukuran.

Profiler seperti callgrind memperlambat program Anda secara signifikan, dan karenanya memengaruhi waktu. Contoh yang menunjukkan keterbatasan profiler tersebut adalah pertentangan mutex. Aplikasi Anda mungkin berjalan lambat karena mutex sedang banyak digunakan, menyebabkan kode Anda menghabiskan banyak waktu dalam fungsi kunci. Alat seperti callgrind tidak akan mengungkapkan ini, karena menghitung petunjuk , bukan waktu.

Ada kelas profiler lain yang melakukan "pembuatan profil statistik." Profiler ini memungkinkan Anda untuk menjalankan program seperti biasa, sambil mengambil snapshot berkala di mana aplikasi menghabiskan waktunya. Profiler ini perlu dijalankan selama beberapa waktu untuk menghasilkan hasil yang akurat, tetapi dapat melakukannya dengan dampak minimal pada pengaturan waktu. Itu membuatnya sangat cocok untuk membuat profil aplikasi multithread dan/atau terdistribusi!

Saya ingin membagikan alur kerja pembuatan profil menggunakan alat Linux perf, yang menurut saya sangat berguna karena memungkinkan saya mengidentifikasi "hotspot" kinerja dengan cepat. Saya akan menggunakan contoh c/hello_dynamic dari RTI Connext 5.3.0 sebagai target untuk mengukur kinerja.

Pertama, pastikan perf diinstal pada mesin Linux Anda. Di Ubuntu, saya harus menjalankan perintah ini untuk menginstal perf di mesin saya:

sudo apt-get install linux-tools-common linux-tools-3.13.0-107-generic

Selanjutnya, Anda perlu mengunduh proyek GitHub yang dapat mengonversi output dari perf menjadi apa yang disebut "FlameGraph," yang merupakan representasi visual dari data profil yang dikumpulkan. Jalankan perintah ini dari lokasi yang mudah diakses (seperti direktori home Anda):

git clone https://github.com/brendangregg/FlameGraph

Sekarang navigasikan ke contoh hello_dynamic di folder rti_workspace/examples/c. Buat kode dengan perintah ini (pastikan NDDSHOME disetel ke instalasi RTI Connext):

ekspor DEBUG=1
make -f makefile_Hello_x64Linux3gcc4.8.2

Platform atas nama makefile mungkin berbeda dari platform Anda. Perhatikan bagaimana kita mengatur variabel lingkungan DEBUG. Kami melakukan ini agar biner memiliki simbol debug, yang memungkinkan kami melihat nama fungsi di calltacks yang menghasilkan output.

Kita sekarang dapat menjalankan perf pada kode kita. Jalankan perintah berikut:

objs/x64Linux3gcc4.8.2/Halo sub &
sudo perf record -g objs/x64Linux3gcc4.8.2/Hello pub

Setelah beberapa waktu, tekan control-C untuk keluar dari penerbit. Perf akan menghasilkan file bernama "perf.out". Kita sekarang perlu menerjemahkan file ini menjadi sesuatu yang dimengerti oleh alat FlameGraph, menggunakan skrip dari repositori FlameGraph:

skrip performa -f | ~/FlameGraph/stackcollapse-perf.pl> out.perf-folded

Dari sini, kita dapat menghasilkan gambar FlameGraph:

~/FlameGraph/flamegraph.pl out.perf-folded> perf.svg

Saat Anda membuka file perf.svg di browser web, seharusnya terlihat seperti ini:


Sumbu horizontal mewakili waktu yang dihabiskan dalam fungsi tertentu, sedangkan batang bertumpuk mewakili tumpukan panggilan aplikasi Anda. Anda dapat mengklik setiap bilah untuk memperbesar tumpukan tertentu.

Coba jalankan kembali penerbit, tetapi tanpa pelanggan. Anda akan melihat bahwa bagian kanan dari flamegraph akan hilang, karena DDS tidak mengirimkan data apa pun ketika tidak ada pelanggan!

Alat perf dapat melakukan lebih dari yang dijelaskan blog ini. Jika Anda mengetahui pengaturan atau alat lain yang membuat kehidupan pembuatan profil Anda lebih mudah, beri tahu kami!

Selamat membuat profil!


Teknologi Internet of Things

  1. Akankah Molibdenum Menggabungkan dengan Elemen Lain?
  2. Membangun Aplikasi Blockchain/Cloud Hybrid Dengan Ethereum dan Google
  3. Membangun Aplikasi Seluler Tanpa Server dengan React Native &AWS
  4. Sirkuit Sensor Jarak Sederhana dan Bekerja dengan Aplikasi
  5. Jenis Sensor Analog dan Digital dengan Aplikasi
  6. Microchip:menskalakan aplikasi ruang dengan MCU Inti yang toleran terhadap radiasi COTS
  7. Hilangkan hambatan TI dengan sederhana:Platform kode rendah memegang kuncinya
  8. Ovo meningkatkan permainan energi terdistribusinya dengan pembelian jaringan pintar VCharge
  9. Router Kayu CNC - Dengan Aplikasi Menakjubkan
  10. 5 Aplikasi Dunia Nyata AI dalam Kedokteran (dengan Contoh)