Проблема эталонного тестирования 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, проблема исчезнет. Поэтому по какой-то причине первое чтение в файлах происходит намного медленнее. Я предполагаю, что это как-то связано со средой, но я не знаю, как исследовать дальше. Это кажется большой проблемой, потому что если первая итерация действительно намного медленнее, то тестирование производительности с репликациями искажает реальную производительность этих пакетов.
Большое спасибо