Używam callgrind do profilowania wielowątkowej aplikacji linuxowej i przede wszystkim działa świetnie. Zaczynam od wyłączenia oprzyrządowania (--instr-atstart = no), a po skonfigurowaniu włączam go z callgrind_control -i na. Jednak gdy zmieniam niektóre konfiguracje, aby spróbować profilować inną część aplikacji, zaczyna działać bardzo wolno, zanim jeszcze włączę oprzyrządowanie. Zasadniczo część kodu, która zajęłaby kilka sekund przy normalnej pracy, zajęłaby ponad godzinę z callgrindiem (oprzyrządowanie wyłączone). Jakieś pomysły na to, dlaczego tak się stało i jak rozwiązywać problemy z usuwaniem/rozwiązywaniem problemów?callgrind powolny z wyłączoną oprzyrządowaniem
Odpowiedz
Callgrind to narzędzie zbudowane na valgrinie. Valgrind jest po prostu dynamicznym tłumaczem binarnym (libVEX, część valgrind). Odszyfruje każdą instrukcję i JIT-kompiluje je do strumienia niektórych instrukcji tego samego procesora.
Jak wiem, nie ma sposobu, aby włączyć to tłumaczenie (w wersji valgrind) dla już uruchomionego procesu, więc dynamiczne tłumaczenie jest włączone cały czas, od początku programu. Nie można go również wyłączyć.
Narzędzia są budowane na valgrind przez dodanie kodu oprzyrządowania. Narzędzie "Nul" (nulgrind) to narzędzie, które nie dodaje oprzyrządowania. Ale każde narzędzie wykorzystuje valgrind i dynamiczne tłumaczenie jest aktywne cały czas. Włączanie i wyłączanie w callgrind polega na włączaniu i wyłączaniu dodatkowego oprzyrządowania.
Wirtualny procesor wdrożony przez Valgrind jest ograniczony, istnieje (niepełna) lista ograniczeń. http://valgrind.org/docs/manual/manual-core.html#manual-core.limits Większość ograniczeń dotyczy operacji zmiennoprzecinkowych i mogą być one emulowane źle.
Czy zmiana dotyczy operacji zmiennoprzecinkowych? Lub z innymi wymienionymi ograniczeniami?
Powinieneś również wiedzieć, że "Valgrind serializuje wykonanie tak, że tylko jeden wątek działa w czasie". (z tej samej strony manual-core.html)
PS: obciążenie ogólne nulgrind (libVEX basic instrumentation) jest ogromne. Nulgrind jest szacowany na 2-10 razy wolniej niż kod natywny (na przykład w http://os.inf.tu-dresden.de/papers_ps/vee08-pohle.pdf); każde inne narzędzie na vlagrind jest wolniejsze niż nulgrind. Callgrind z wyłączonym trybem będzie działał z prędkością nulgrind; callgrind włączony będzie działać kilka razy wolniej. – osgx
- 1. RoR z wyłączoną obsługą JavaScriptu
- 2. Funkcje funkcji wywoływania funkcji Callgrind
- 3. Co dzieje się z wyłączoną obsługą przerwań?
- 4. Witryna nie działa z wyłączoną obsługą Javascript
- 5. Xcode 7 powolny i powolny
- 6. Potrzebujesz pomocy w wyjściu callgrind czytania
- 7. CURL z PHP - bardzo powolny
- 8. NSDateFormatter zwraca datę wyłączoną przez dzień
- 9. CSS powolny
- 10. Powolny czas uruchomienia Julii
- 11. qt debugowanie twórca powolny
- 12. ReactJS setState jest powolny
- 13. Windows: Powolny start aplikacji
- 14. Powolny operator XOR
- 15. Różne liczby odczytywania i zapisywania za pomocą cachegrind i callgrind
- 16. VS 2010 bardzo powolny
- 17. Debugger Rubimine powolny
- 18. Powolny czas odpowiedzi z interfejsów API CloudKit?
- 19. Powolny problem z połączeniem internetowym w Androidzie
- 20. Leaflet.js z warstwą wektorową jest bardzo powolny
- 21. Siatka Kendo: powolny problem z wydajnością
- 22. selektor kątowy2 powolny z dużym zestawem danych
- 23. powolny kod bajtowy z ogona rekurencji
- 24. Dezaktywuj powolny start tcp
- 25. UITableView reloadData jest powolny
- 26. SDL_GL_SwapBuffers() jest sporadycznie powolny
- 27. MySQL bardzo powolny zapytanie
- 28. MidiSystem.getSequencer() bardzo powolny
- 29. gevent urllib jest powolny
- 30. pycharm autouzupełnianie powolny
Jakie są "określone konfiguracje, aby spróbować profilować inną część aplikacji"? – jpalecek
user779, czy możesz sprawdzić szybkość aplikacji za pomocą ["nul" narzędzia valgrind] (http://valgrind.org/docs/manual/nl-manual.html) oraz z [narzędziem Lackey z valgrind] (http: //valgrind.org/docs/manual/lk-manual.html)? – osgx
@jpalecek: wszystko co mam na myśli to to, że użytkownicy mogą włączać/wyłączać funkcje przez konfigurację i poprzez włączanie niektórych funkcji (rekursywnie będzie to wykonywać więcej szczegółów na zestawie obiektów i spowoduje to dużo więcej obliczeń) zacznie się czołgać . – naumcho