Bir Hacker's Tale
Tarih 12/02/10. Noel'den önceki günler akıp gidiyor ve bir pencere programcısı olarak büyük bir yol tıkanıklığına uğradım. AQTime kullanıyorum, uykulu, parlak ve çok uykulu denedim ve biz konuşurken VTune yükleniyor. VS2008 profil oluşturucusunu kullanmaya çalıştım ve hem olumlu bir şekilde cezalandırıyor hem de çoğu zaman duyarsız. Rastgele duraklama tekniğini kullandım. Çağrı ağaçlarını inceledim. İşlev izlerini ateşledim. Ancak işin üzücü acı verici yanı, üzerinde çalıştığım uygulamanın bir milyon satırdan fazla kod içermesi ve muhtemelen başka bir milyon satır değerinde üçüncü taraf uygulamaları olması.
Daha iyi aletlere ihtiyacım var. Diğer konuları okudum. Her konuda listelenen her profili denedim. Bu önemsiz ve pahalı seçeneklerden daha iyi bir şey olmalı ya da neredeyse hiç kazanç sağlamayan gülünç miktarlarda iş. Sorunları daha da karmaşık hale getirmek için, kodumuz yoğun bir şekilde iş parçacıklıdır ve bazıları o kadar kırılgan olan bir dizi Qt Olay döngüsü çalıştırır ki, zamanlama gecikmeleri nedeniyle ağır enstrümantasyon altında çökerler. Neden birden çok olay döngüsü çalıştırdığımızı sorma. Kimse bana söyleyemez.
Windows ortamında Valgrind'in çizgileri boyunca daha fazla seçenek var mı?
Zaten denediğim uzun kırık takımlardan daha iyi bir şey var mı?
Qt ile entegre etmek için tasarlanmış bir şey var mı, belki de kuyruktaki olayların yararlı bir gösterimi var mı?
İtalik olarak gerçekten yararlı olanlarla denediğim araçların tam listesi:
- AQTime: Oldukça iyi! Derin özyineleme ile ilgili bazı sorunlar yaşarsınız, ancak bu durumlarda çağrı grafiği doğrudur ve sahip olabileceğiniz herhangi bir karışıklığı gidermek için kullanılabilir. Mükemmel bir araç değil ama denemeye değer. İhtiyaçlarınıza uygun olabilir ve çoğu zaman benim için kesinlikle yeterince iyiydi.
- Hata ayıklama modunda Rastgele Duraklatma saldırısı: Yeterli bilgi yeterli değil.
İyi bir araç ama tam bir çözüm değil. - Parallel Studios: Nükleer seçenek. Rahatsız edici, tuhaf ve delice güçlü. Bence 30 günlük değerlendirmeyi yapıp uygun olup olmadığını anlamalısın. Bu da çok havalı.
- AMD Codeanalyst: Harika, kullanımı kolay, çok açık ama bence bu bir çevre meselesi. Ücretsiz olduğu için denemenizi tavsiye ederim.
- Luke Stackwalker: Küçük projelerde iyi çalışıyor, biraz da bizim projemizde çalıştırmaya çalışıyor. Yine de bazı iyi sonuçlar ve kişisel görevlerim için kesinlikle Sleepy'nin yerini alıyor.
- PurifyPlus: Win-x64 ortamları için destek yok, özellikle Windows 7. Aksi takdirde mükemmel. Diğer bölümlerdeki bazı meslektaşlarım buna yemin ediyor.
- VS2008 Profiler: Fonksiyon izleme modunda gerekli çözünürlükte 100 + gigs aralığında çıktı üretir. Artı tarafta, sağlam sonuçlar üretir.
- GProf: GCC'nin orta derecede etkili olmasını gerektirir.
- VTune: VTune'un W7'si suçlu sınırlarını destekliyor. Aksi takdirde mükemmel
- PIN: Kendi aracımı hacklemem gerekiyor, bu yüzden bu son çare.
- Uykulu \ Çok Uykulu: Küçük uygulamalar için kullanışlıdır, ancak burada başarısız oluyorum.
- EasyProfiler: Nerede alet edileceğini belirtmek için biraz manuel olarak enjekte edilen kodun sakıncası yoksa fena değil.
- Valgrind: * Yalnızca nix, ancak bu ortamdayken çok iyi.
- OProfile: Yalnızca Linux.
- Proffy: Vahşi atları vururlar.
Denemediğim önerilen araçlar:
- XPerf:
- Glowcode:
- Devpartner:
Notlar: Şu anda Intel ortamı. VS2008, kitaplıkları artırın. Qt 4+. Ve hepsinin sefil uğultusu: trolltech aracılığıyla Qt / MFC entegrasyonu.
Şimdi: Neredeyse iki hafta sonra sorunum çözülmüş gibi görünüyor. Listedeki hemen hemen her şey ve birkaç kişisel numaram dahil olmak üzere çeşitli araçlar sayesinde, birincil darboğazları bulduk. Ancak, yeni profil oluşturucuların yanı sıra yeni teknolojiyi test etmeye, keşfetmeye ve denemeye devam edeceğim. Neden? Çünkü bunu size borçluyum, çünkü harikasınız. Zaman çizelgesini biraz yavaşlatıyor, ancak yeni araçları denemeye devam edeceğim için hala çok heyecanlıyım.
Özet
Diğer birçok sorunun yanı sıra, bir dizi bileşen yakın zamanda yanlış iş parçacığı modeline geçirilmiş ve altımızdaki kodun birdenbire artık çok iş parçacıklı olmaması nedeniyle ciddi takılmalara neden olmuştu. NDA'mı ihlal ettiği için daha fazlasını söyleyemem, ancak size bunun hiçbir zaman tesadüfi incelemeyle veya hatta normal kod incelemesiyle bulunamayacağını söyleyebilirim. Profil oluşturucular, çağrı grafikleri ve birlikte rastgele duraklamalar olmasaydı, gökyüzünün güzel mavi yayında hâlâ öfkemizi haykırıyor olurduk. Neyse ki, tanıdığım en iyi bilgisayar korsanlarından bazılarıyla çalışıyorum ve harika araçlar ve harika insanlarla dolu harika bir 'dizeye erişimim var.
Beyler, bunu çok takdir ediyorum ve sadece her birinizi bir ödülle ödüllendirecek kadar itibarım olmadığına üzülüyorum. Hâlâ bunun SO konusunda şimdiye kadar sahip olduğumuz sorulardan daha iyi bir yanıt almamız gereken önemli bir soru olduğunu düşünüyorum.
Sonuç olarak, önümüzdeki üç hafta boyunca her hafta, karşılayabileceğim en büyük ödülü koyacağım ve bunu, yaygın bir bilgi olmadığını düşündüğüm en güzel araçla yanıt olarak ödüllendireceğim. Üç hafta sonra, umarım profil oluşturucuların kesin bir profilini biriktirmiş olacağız, eğer punning'imi affederseniz.
Take-away
Profil oluşturucu kullanın. Ritchie, Kernighan, Bentley ve Knuth için yeterince iyidirler. Kim olduğunu düşündüğün umrumda değil. Profil oluşturucu kullanın. Sahip olduğunuz işe yaramazsa, başka bir tane bulun. Bulamazsan, kod bir. Birini kodlayamıyorsanız veya bu küçük bir kapatmadır ya da sadece takılıp kalıyorsanız, rastgele duraklatma kullanın. Her şey başarısız olursa, bir profilciyi vurmaları için bazı yüksek lisans öğrencileri işe alın.
Daha Uzun Bir Bakış
Bu yüzden, biraz geriye dönük bir yazı yazmanın güzel olacağını düşündüm. Kısmen, aslında PIN Aracının üzerine kurulu olduğu için, Parallel Studios ile kapsamlı bir şekilde çalışmayı seçtim. Dahil olan bazı araştırmacılarla akademik ilişkilerde bulunduktan sonra, bunun muhtemelen bir kalitenin işareti olduğunu hissettim. Neyse ki haklıydım. GUI biraz korkunç olsa da, IPS'yi inanılmaz derecede faydalı buldum, ancak herkes için rahat bir şekilde öneremiyorum. Kritik olarak, satır düzeyinde isabet sayılarını elde etmenin bariz bir yolu yok, AQT ve diğer bazı profil oluşturucuların sağladığı bir şey ve diğer şeylerin yanı sıra dal seçimi oranını incelemek için çok yararlı buldum. Net olarak, AQTime'ı kullanmaktan da keyif aldım ve desteğini gerçekten duyarlı buldum. Yine, tavsiyeme uygun olmalıyım: Birçok özelliği o kadar iyi çalışmıyor ve bazıları Win7x64'te tamamen çökmeye meyilli. XPerf de takdire şayan bir performans sergiledi, ancak belirli türden uygulamalarda iyi okumalar elde etmek için gereken örnekleme ayrıntısı için acı verici derecede yavaş.
Şu anda, bir W7x64 ortamında C ++ kodunun profilini çıkarmak için kesin bir seçenek olduğunu düşünmediğimi söylemeliyim, ancak kesinlikle herhangi bir yararlı hizmeti gerçekleştiremeyen seçenekler var.