Получение иерархии вызовов в 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 служба поддержки?

0 ответов

Другие вопросы по тегам