Получение иерархии вызовов в gperftools для пакета R
Я могу использовать gperftools для создания графа вызовов, как, например, в этом вопросе.
Теперь я хотел бы получить график вызовов для bind_rows()
в dplyr
Пакет R, чтобы отследить эту ошибку.
Я собрал оба R
а также dplyr
с помощью CPP/CXXFLAGS=-g -fvar-tracking-assignments
а также LDFLAGS=-lprofiler -lunwind
,
Когда я запускаю следующее:
CPUPROFILE="samples.log" R --vanilla <<< "library(dplyr)
ll = lapply(1:1e5, function(x) as.list(setNames(runif(5), letters[1:5])))
print(system.time(bind_rows(ll)))"
pprof --gif /usr/lib/R/bin/exec/R samples.log > out.gif
Все, что я получаю, это:
Как я могу получить иерархию вызовов, чтобы я знал, какой вызов в dplyr
файл связывания строк является узким местом?
редактировать: кажется, что --focus
вариант то, что мне нужно здесь. Но как подключить это к RecursiveRelease
?
pprof --focus=rbind__impl --gif /usr/lib/R/bin/exec/R samples.log > out.gif
edit: после перекомпиляции Rcpp с -g
и связь с -lprofiler
, Я мог бы получить следующее: flame.svg, где 8% получает хорошую трассировку стека, но большая часть этого все еще не делает. Может ли это быть потому, что некоторые библиотеки загружаются без -lprofiler
служба поддержки?