Enable Profiling of R's Execution
Enable or disable profiling of the execution of Rexpressions.
Rprof(filename = "Rprof.out", append = FALSE, interval = 0.02, memory.profiling = FALSE, gc.profiling = FALSE, line.profiling = FALSE, numfiles = 100L, bufsize = 10000L)
- The file to be used for recording the profiling results.
""to disable profiling.
- logical: should the file be over-written or appended to?
- real: time interval between samples.
- logical: write memory use information to the file?
- logical: record whether GC is running?
- logical: write line locations to the file?
- numfiles, bufsize
- integers: line profiling memory allocation
Enabling profiling automatically disables any existing profiling to another or the same file.
Profiling works by writing out the call stack every
seconds, to the file specified. Either the
function or the wrapper script
Exactly what the time interval measures is subtle: it is time that the
Rprocess is running and executing an Rcommand. It is not however just
CPU time, for if
readline() is waiting for input, that counts
(on Windows, but not on a Unix-alike).
Note that the timing interval cannot be too small, for the time spent
in each profiling step is added to the interval. What is feasible is
machine-dependent, but 10ms seemed as small as advisable on a 1GHz machine.
How time is measured varies by platform: on a Unix-alike it is the CPU
time of the Rprocess, so for example excludes time when Ris waiting
for input or for processes run by
system to return.
Note that the timing interval cannot usefully be too small: once the timer goes off, the information is not recorded until the next timing click (probably in the range 1--10msecs). #endif
Functions will only be recorded in the profile log if they put a
context on the call stack (see
primitive functions do not do so: specifically those which are
"special" (see the
TRUE, and if the code being executed
was parsed with source references. See
parse for a
discussion of source references. By default the statement locations
are not shown in
summaryRprof, but see that help page
for options to enable the display.
- Profiling is not available on all platforms. By default,
support for profiling is compiled in if possible -- configure Rwith
to change this.
As Rprofiling uses the same mechanisms as C profiling, the two cannot be used together, so do not use
Rprofin an executable built for C-level profiling.
filenamecan be a UTF-8-encoded filepath that cannot be translated to the current locale.
- The profiler interrupts R asynchronously, and it cannot allocate
memory to store results as it runs. This affects line profiling,
which needs to store an unknown number of file pathnames. The
bufsizearguments control the size of pre-allocated buffers to hold these results: the former counts the maximum number of paths, the latter counts the numbers of bytes in them. If the profiler runs out of space it will skip recording the line information for new files, and issue a warning when
Rprof(NULL)is called to finish profiling.
The chapter on
summaryRprof to analyse the output file.
Rprof() ## some code to be profiled Rprof(NULL) ## some code NOT to be profiled Rprof(append = TRUE) ## some code to be profiled Rprof(NULL) \dots ## Now post-process the output as described in Details