Executes each function in a separate forked process and monitors its memory and cpu usage in real time
This function is best used with long running functions like arrow or
duckdb requests that doesn't fit with classic benchmarking methods like
utils::Rprof and profmem.
memory is extracted every interval sec with ps::ps_memory_info
start_memis measured just before launching the function.max_memis the max of all measured mem of the forked child
cpu times and duration are given by proc.time
Value
a tibble as a timemoir object with one row per benchmarked function and 7 columns:
fname, function name (as string).durationduration (in sec) of the function or NA if function fails.error, error message if function fails, NA otherwise.start_memmemory used before function benchmark (in KB).max_memmax used memory (in KB).cpu_useruser cpu used in seccpu_syssystem cpu used in sec
An error message such as "Process is a zombie" typically indicates that the process was terminated after exceeding the allocated memory quota.
Examples
test_function <- function(n) {
x <- rnorm(n)
mean(x)
}
timemoir(test_function(1.2e7), test_function(1.5e7), test_function(1e7))
#>
#>
#>
#> # A tibble: 3 × 7
#> fname duration error start_mem max_mem cpu_user cpu_sys
#> <chr> <dbl> <chr> <int> <dbl> <dbl> <dbl>
#> 1 test_function(1.2e+07) 0.632 NA 180232 275192 0.554 0.078
#> 2 test_function(1.5e+07) 0.76 NA 180232 298584 0.672 0.087
#> 3 test_function(1e+07) 0.563 NA 180232 255472 0.484 0.079