Kisah Seorang Peretas
Tanggalnya adalah 12/02/10. Hari-hari sebelum Natal menetes dan saya sudah cukup menghantam penghambat utama program windows. Saya telah menggunakan AQTime, saya sudah mencoba mengantuk, mengkilap, dan sangat mengantuk, dan ketika kita berbicara, VTune sedang menginstal. Saya sudah mencoba menggunakan profiler VS2008, dan itu sudah menghukum positif dan sering tidak masuk akal. Saya telah menggunakan teknik jeda acak. Saya telah memeriksa pohon panggilan. Saya telah melepaskan jejak fungsi. Tetapi fakta menyedihkan yang menyedihkan dari masalah ini adalah bahwa aplikasi yang saya kerjakan adalah lebih dari satu juta baris kode, dengan kemungkinan satu juta baris lainnya dari aplikasi pihak ketiga.
Saya membutuhkan alat yang lebih baik. Saya sudah membaca topik lainnya. Saya sudah mencoba setiap profiler yang tercantum dalam setiap topik. Hanya harus ada sesuatu yang lebih baik daripada opsi-opsi yang jelek dan mahal ini, atau jumlah pekerjaan yang menggelikan untuk hampir tidak ada keuntungan. Untuk lebih memperumit masalah, kode kami sangat di-threaded, dan menjalankan sejumlah loop Peristiwa Qt, beberapa di antaranya sangat rapuh sehingga mereka jatuh di bawah instrumentasi berat karena penundaan waktu. Jangan tanya kenapa kami menjalankan banyak loop acara. Tidak ada yang bisa memberitahuku.
Apakah ada opsi lain di sepanjang garis Valgrind di lingkungan windows?
Apakah ada yang lebih baik daripada petak panjang alat rusak yang sudah saya coba?
Apakah ada sesuatu yang dirancang untuk diintegrasikan dengan Qt, mungkin dengan tampilan peristiwa yang berguna dalam antrian?
Daftar lengkap alat yang saya coba, dengan yang sangat berguna dalam cetak miring:
- AQTime: Agak bagus! Ada beberapa masalah dengan rekursi yang dalam, tetapi grafik panggilannya benar dalam kasus ini, dan dapat digunakan untuk menjernihkan kebingungan yang mungkin Anda miliki. Bukan alat yang sempurna, tetapi patut dicoba. Mungkin cocok dengan kebutuhan Anda, dan itu tentu saja cukup baik untuk saya hampir sepanjang waktu.
- Serangan Jeda acak dalam mode debug: Tidak cukup informasi yang cukup waktu.
Alat yang bagus tapi bukan solusi lengkap. - Parallel Studios: Opsi nuklir. Obtrusif, aneh, dan kuat sekali. Saya pikir Anda harus memulai evaluasi 30 hari, dan mencari tahu apakah itu cocok. Ini sangat keren juga.
- AMD Codeanalyst: Luar biasa, mudah digunakan, sangat rawan kecelakaan, tapi saya pikir itu masalah lingkungan. Saya akan merekomendasikan mencobanya, karena gratis.
- Luke Stackwalker: Bekerja dengan baik pada proyek-proyek kecil, ini sedikit mencoba membuatnya bekerja pada kita. Namun beberapa hasil yang baik, dan itu pasti menggantikan Sleepy untuk tugas pribadi saya.
- PurifyPlus: Tidak ada dukungan untuk lingkungan Win-x64, paling menonjol Windows 7. Sebaliknya sangat baik. Sejumlah rekan saya di departemen lain bersumpah demi hal itu.
- VS2008 Profiler: Menghasilkan output dalam kisaran 100+ gigs dalam mode fungsi jejak pada resolusi yang diperlukan. Di sisi positifnya, menghasilkan hasil yang solid.
- GProf: Memerlukan GCC agar cukup efektif.
- VTune: Dukungan W7 VTune berbatasan dengan kriminal. Sangat bagus
- PIN: Saya perlu meretas alat saya sendiri, jadi ini adalah pilihan terakhir.
- Sleepy \ VerySleepy: Berguna untuk aplikasi yang lebih kecil, tetapi gagal saya di sini.
- EasyProfiler: Tidak buruk jika Anda tidak keberatan sedikit kode yang disuntikkan secara manual untuk menunjukkan tempat instrumen.
- Valgrind: * nix saja, tetapi sangat bagus ketika Anda berada di lingkungan itu.
- OProfile: Linux saja.
- Untung: Mereka menembak kuda liar.
Alat yang disarankan yang belum saya coba:
- XPerf:
- Kode cahaya:
- Devpartner:
Catatan: Lingkungan Intel saat ini. VS2008, tingkatkan perpustakaan. Qt 4+. Dan pelacur celaka dari semuanya: Integrasi Qt / MFC via trolltech.
Sekarang: Hampir dua minggu kemudian, sepertinya masalah saya teratasi. Berkat berbagai alat, termasuk hampir semua yang ada di daftar dan beberapa trik pribadi saya, kami menemukan hambatan utama. Namun, saya akan terus menguji, mengeksplorasi, dan mencoba profiler baru serta teknologi baru. Mengapa? Karena aku berhutang kepada kalian, karena kalian congkak. Memang sedikit memperlambat timeline, tapi saya masih sangat bersemangat untuk terus mencoba alat baru.
Sinopsis
Di antara banyak masalah lain, sejumlah komponen baru-baru ini telah beralih ke model threading yang salah, menyebabkan hang-up serius karena fakta bahwa kode di bawah kami tiba-tiba tidak lagi multithreaded. Saya tidak bisa mengatakan lebih karena itu melanggar NDA saya, tetapi saya dapat memberitahu Anda bahwa ini tidak akan pernah ditemukan dengan inspeksi biasa atau bahkan oleh tinjauan kode normal. Tanpa profiler, kaligraf, dan jeda acak bersamaan, kita masih akan berteriak kemarahan kita pada busur biru indah dari langit. Untungnya, saya bekerja dengan beberapa peretas terbaik yang pernah saya temui, dan saya memiliki akses ke ayat luar biasa yang penuh dengan alat-alat hebat dan orang-orang hebat.
Gentlefolk, saya sangat menghargai ini, dan hanya menyesal bahwa saya tidak memiliki cukup perwakilan untuk memberi Anda masing-masing hadiah. Saya masih berpikir ini adalah pertanyaan penting untuk mendapatkan jawaban yang lebih baik daripada yang kita punya sejauh ini di SO.
Akibatnya, setiap minggu selama tiga minggu ke depan, saya akan memberikan hadiah terbesar yang saya mampu, dan memberikannya kepada jawaban dengan alat terbaik yang saya pikir bukan pengetahuan umum. Setelah tiga minggu, semoga kami telah mengumpulkan profil yang pasti dari para profiler, jika Anda akan mengampuni hukuman saya.
Take-away
Gunakan profiler. Mereka cukup baik untuk Ritchie, Kernighan, Bentley, dan Knuth. Saya tidak peduli siapa Anda pikir Anda. Gunakan profiler. Jika yang Anda punya tidak berfungsi, temukan yang lain. Jika Anda tidak dapat menemukannya, kode satu. Jika Anda tidak dapat mengkodekannya, atau hanya hang up kecil, atau Anda hanya terjebak, gunakan jeda acak. Jika semuanya gagal, rekrut beberapa mahasiswa pascasarjana untuk membuat profiler.
Pandangan yang Lebih Panjang
Jadi, saya pikir mungkin baik untuk menulis sedikit retrospektif. Saya memilih untuk bekerja secara luas dengan Parallel Studios, sebagian karena sebenarnya dibangun di atas PIN Tool. Setelah memiliki hubungan akademik dengan beberapa peneliti yang terlibat, saya merasa bahwa ini mungkin suatu tanda kualitas tertentu. Syukurlah, saya benar. Sementara GUI agak mengerikan, saya menemukan IPS sangat berguna, meskipun saya tidak bisa dengan nyaman merekomendasikannya untuk semua orang. Secara kritis, tidak ada cara yang jelas untuk mendapatkan jumlah hit level-line, sesuatu yang disediakan AQT dan sejumlah profiler lain, dan saya telah menemukan sangat berguna untuk memeriksa tingkat pemilihan cabang di antara hal-hal lain. Di internet, saya menikmati menggunakan AQTime juga, dan saya menemukan dukungan mereka sangat responsif. Sekali lagi, saya harus memenuhi syarat rekomendasi saya: Banyak fitur mereka tidak bekerja dengan baik, dan beberapa dari mereka benar-benar rentan terhadap Win7x64. XPerf juga tampil mengagumkan, tetapi sangat lambat untuk detail pengambilan sampel yang diperlukan untuk mendapatkan pembacaan yang baik pada jenis aplikasi tertentu.
Saat ini, saya harus mengatakan bahwa saya tidak berpikir ada opsi yang pasti untuk profiling kode C ++ di lingkungan W7x64, tetapi tentu saja ada opsi yang gagal menjalankan layanan yang berguna.