Как искать узкие места (bottleneck)
Какое то неприличное название у темы получилось, ну да ладно.
Хотел бы спросить совета, как вы профилируете свои программы? Как ищите bottleneck'и? В первую очередь интерестно как это делается для сетевых event driven приложений.
valgring + callgrind, очевидно в этом плане не подходит. Так как он замеряет процессорное время. Т.е. он не позволит определить что у вас два потока постоянно тыкаются в один мютекс и ждут его. Helgrind вообще не понятно как применять если в проекте есть что то кроме стандартного мютекса (даже бустовый с его atomic уже наверно вызовет проблеммы).
Google CPU Profiler, уже лучше, хотя я таки тоже не уверен, что он сможет показать, что кто то уткнулся в мютекс. Я спциально попробывал все свои обработчики в приложении стравить на один mutex под которым еще и sleep происходит. Но в результате профилирования, этого участка вообще нету, а большую часть захвал именно IO хотя стреляю все локально.
Я в профилировании еще профан, хотелось бы услышать от кого то более опытного в этом деле на что стоит обратить внимание при профилировании, может быть какие то техники использовать.
Большинство статей которые у нашел/прочитал это самые азы использования профайлера. Так же встречаются статью на счет особенностей ошибочного отображения/подсчета данных профайлером.
Я все больше склоняюсь к тому, что профилирование, это как дезасемблирование. Тут нужны годы снаровки что бы понастоящему извлекать из этого пользу, а не просто тыкаться в непонятные циферки и годать, а гдеж тут жопа зарыта.