Я профилирую некоторые вычисления (транскодирование видео) на больших наборах данных. Поскольку я не хотел, чтобы на мои результаты влияло время ввода / вывода (в системе, которую я использую, старые / медленно вращающиеся диски), я подумал, что RAMFS будет правильным подходом.
Я создал папку "кеш" в моем доме как ramfs:
sudo mount ramfs -t ramfs ./cache/
Я использую эту папку для сохранения входных и выходных файлов для моего конвейера обработки видео. Тем не менее, похоже, что при чтении файлов, хранящихся в RAMFS, между диском и оперативной памятью все еще происходит "кеширование", которое, по моему мнению, не должно происходить. Сначала я копирую входной видеофайл в кеш, обратите внимание, что размер файла составляет около 1,5 ГБ, следовательно, требуется RAMFS: https://media.xiph.org/video/derf/y4m/crowd_run_1080p50.y4m
cp crowd_run_1080p50.y4m ./cache/
При выполнении операции перекодирования, чтение из файла, который я только что скопировал, и запись в RAMFS
perf stat -e minor-faults:u,major-faults:u ~/bin/ffmpeg -i ~/cache/crowd_run_1080p50.y4m -c:v h264_qsv -y ~/cache/out_qsv.mp4
perf до сих пор сообщает о некоторых основных недостатках:
11,933 minor-faults:u
159 major-faults:u
3.588215239 seconds time elapsed
Повторное выполнение той же операции не показывает никаких серьезных сбоев и значительно ускоряет время завершения:
11,955 minor-faults:u
0 major-faults:u
2.129031238 seconds time elapsed
Еще больше беспокоит, если я очищаю кеш страниц ОС
sudo sh -c 'echo 3 >/proc/sys/vm/drop_caches'
Я снова увижу главные недостатки. Это почему? Я думал, что весь файл останется в RAMFS вместе с inode, и никакая очистка невозможна от ramfs (в отличие от tmpfs, который может поменяться). Почему я до сих пор вижу серьезные неисправности? Если мне нужно выполнить одну и ту же операцию дважды, чтобы получить надежные результаты, я бы тоже не использовал RAMFS, но я хотел бы понять, чего мне не хватает.