Проблема эталонного тестирования R Feather & FST: первая итерация значительно медленнее, чем репликации

Я провожу сравнительные тесты с microbenchmark Пакет времени чтения / записи с различными форматами файлов. Я заметил постоянную проблему с feather а также fst пакеты, где первая итерация чтения данных намного медленнее, чем последующие запуски. Я включаю код для RDS, который я не думаю, страдает от той же проблемы.

Хотя точная воспроизводимость времени моих тестов невозможна, я надеюсь, что этот пример проиллюстрирует проблему. Некоторые смоделированные данные:

library(microbenchmark); library(feather); library(data.table); library(fst)
path <- '...'
setwd(path)

paths <- paste0(path, '/data.', c('feather', 'fst', 'rds'))
names(paths) <- c('feather', 'fst', 'rds')

set.seed(123)
df <- data.frame(
  x = rnorm(1e6), 
  y = rnorm(1e6),
  z = rnorm(1e6)
)
write_time <- microbenchmark(
  r_f = write_feather(df, paths['feather']),
  r_fst = write_fst(df, paths['fst']),
  r_rds = saveRDS(df, paths['rds']),
  times = 1)
read_time <- microbenchmark(
  r_f = read_feather(paths['feather']),
  r_fst = read_fst(paths['fst']),
  r_rds = readRDS(paths['rds']),
  times = 5)
read_time

Unit: milliseconds
  expr       min        lq      mean    median        uq      max neval
   r_f  17.80748  18.02644  96.42545  18.80392  31.53972 395.9497     5
 r_fst  17.67719  19.12665  64.19179  19.57683  30.59574 233.9825     5
 r_rds 137.61713 137.86260 153.22003 137.86688 138.27201 214.4815     5

Обратите внимание на большую разницу между min а также max времена для feather а также fst, Я напрямую рассчитал код в for цикл из чистого сеанса (необходимо сбросить пути). у меня есть feather результаты здесь, но та же картина есть для fst,

f_time <- rep(NA, 10)
for(i in 1:10) {
  start_time <- Sys.time()
  temp <- read_feather(paths['feather'])
  end_time <- Sys.time()
  f_time[i] <- end_time - start_time
  rm(temp)
}
f_time*1000
 [1] 356.57501  21.72709  15.46788  15.63001  15.62309  15.62285  22.39609  31.70800  17.25101  25.81096

Если я затем повторно запущу этот блок кода из того же сеанса R, проблема исчезнет. Поэтому по какой-то причине первое чтение в файлах происходит намного медленнее. Я предполагаю, что это как-то связано со средой, но я не знаю, как исследовать дальше. Это кажется большой проблемой, потому что если первая итерация действительно намного медленнее, то тестирование производительности с репликациями искажает реальную производительность этих пакетов.

Большое спасибо

0 ответов

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