Я профилирую некоторые вычисления (транскодирование видео) на больших наборах данных. Поскольку я не хотел, чтобы на мои результаты влияло время ввода / вывода (в системе, которую я использую, старые / медленно вращающиеся диски), я подумал, что 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, но я хотел бы понять, чего мне не хватает.

1 ответ1

0

В этой ситуации также может помочь демон preload . Он работает в фоновом режиме и узнает, какие программы и библиотеки часто используются. Затем он readahead их при следующих загрузках для более быстрого запуска. В отличие от memlockd эти файлы не блокируются в ОЗУ, а считываются один раз после загрузки, поэтому их пространство ОЗУ можно повторно использовать для чего-то другого, если требуется, следовательно, нет гарантии более быстрого запуска.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .