RAMFS的性能


0

我正在分析大型数据集上的一些计算(视频转码)。由于我不希望我的结果受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
ffmpeg (和包含的库)不在ramfs上。在里面 ~/bin
Ipor Sircer

那是个很好的观点。我不认为获取代码会对结果有影响力有没有办法强制操作系统将特定的二进制文件和库放在页面缓存中?
igon

apt-get install memlockd
Ipor Sircer

Answers:


0

preload 守护进程也可以帮助解决这种情况。它在后台运行 并学习 经常使用哪些程序和库。然后呢 readahead 他们在下一个靴子上进行更快的发布。 与之相反 memlockd 这些文件没有锁定在RAM中,而是在启动后读取一次,因此如果需要,它们的RAM空间可以重新用于其他内容,因此无法保证更快的启动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.