RAMFS 的性能

RAMFS 的性能

我正在对大型数据集上的一些计算(视频转码)进行分析。由于我不希望结果受到 I/O 时间的影响(我使用的系统有旧的/慢速旋转的磁盘),我认为 RAMFS 是正确的方法。

我在家里创建了一个“缓存”文件夹作为 ramfs:

sudo mount ramfs -t ramfs ./cache/

我使用这个文件夹来保存我的视频处理管道的输入和输出文件。然而,看起来在读取存储在 RAMFS 中的文件时,磁盘和 RAM 之间仍然有一些“缓存”,我认为这不应该发生。首先,我将输入视频文件复制到缓存中,注意该文件大约为 1.5 GB,因此需要 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'

我将再次看到重大故障。这是为什么?我认为整个文件将与 inode 一起保留在 RAMFS 中,并且无法从 ramfs 刷新(与可以交换的 tmpfs 不同)。为什么我仍然看到重大故障?如果我必须执行两次相同的操作才能获得可靠的结果,我还不如不使用 RAMFS,但我想了解我遗漏了什么。

答案1

preload守护进程也可以在这种情况下提供帮助。它在后台运行并学习哪些程序和库经常被使用。然后readahead下次启动时,这些文件将被删除,以加快启动速度。相反,memlockd这些文件不会锁定在 RAM 中,而是在启动后读取一次,因此如果需要,它们的 RAM 空间可以重新用于其他用途,因此无法保证更快的启动速度。

相关内容