【问题标题】:ramdisk with a file mirror带有文件镜像的 ramdisk
【发布时间】:2010-10-09 23:39:49
【问题描述】:

我想加快编译速度,所以我想我可以将我的文件构建在 ramdisk 上,但也可以将其自动刷新到文件系统并在没有足够内存时使用文件系统。

对于我正在编写的应用程序,我可能需要类似的东西,我希望将文件缓存在 ram 中并刷新到 FS 中。我有哪些选择?有没有这样的东西已经存在? (也许是保险丝?)该应用程序是一个玩具应用程序(目前),我需要反复编译 C++ 代码。众所周知,当有特定问题需要解决才能继续进行时,编译所需的时间越长。我们能做的越少。

【问题讨论】:

    标签: c++ windows filesystems ramdisk


    【解决方案1】:

    Ram-disks 在文件系统缓存方面采用了渡渡鸟的方式。它可以比静态缓存做出更好的决策,它可以了解其他程序的 RAM 使用情况以及磁盘写入头的位置。懒惰的回写是免费的。

    【讨论】:

    • 你是说windows会缓存我的文件,所以我不需要实现这个?
    • 这是真的吗,还是编写软件的开发人员必须做任何事情来告诉 Windows 它应该使用文件系统缓存?换句话说,我的简单 C 代码在写入大文件时会从系统缓存中受益吗?如果是这样,那么为什么我在写入 RAMDISK 时会看到显着的加速? (注意,我使用 OpenCV 一次一帧地写出大型视频文件)。
    【解决方案2】:

    编译受 CPU 限制,而不是磁盘限制。如果您使用适当的构建标志使用所有 CPU 内核,则可以轻松地在典型 PC 上使它们饱和。除非你有某种超级计算机,否则我认为这不会加快速度。

    对于 VS2008,这个标志是 /MP。它也存在于VS2005

    【讨论】:

      【解决方案3】:

      不确定它是否有助于回答大约 12 年前的问题,但刚才我正在寻找一些软件来同步文件系统或目录来完全做到这一点。 这两个答案都是正确的,因为文件系统缓存将尝试预测您需要什么并在 RAM 中可用,并且通常构建软件有利于多线程,可能会最大化您的 CPU。但现在我正在使用 Unity 进行构建,我无法控制构建优化。

      也就是说,虚拟 RAM 磁盘具有优势,因为这些文件始终位于 RAM 中,与文件系统缓存 (FSC) 不同,文件系统缓存 (FSC) 必须处理资源和应用程序争夺磁盘访问权限。

      另一个区别是,当应用程序关闭文件句柄或强制同步时,FSC 将尝试尽快将该文件获取到磁盘,以避免出现问题(电源故障等)。我相信你可以改变 Linux 上的 FSC 行为。 同步到 RAM 磁盘不会写入磁盘,这可能是您在评论中所说的性能差异的原因。

      也就是说,我仍然需要寻找一些东西来自动同步我的两个文件系统!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 2017-12-31
        • 2021-06-13
        • 1970-01-01
        • 2022-08-19
        • 2021-05-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多