【问题标题】:Telling Linux not to keep a file in the cache when it is written to disk告诉 Linux 在将文件写入磁盘时不要将其保留在缓存中
【发布时间】:2020-09-21 13:05:24
【问题描述】:

我正在从用户模式应用程序将一个大文件写入磁盘。与此同时,我正在编写一个或多个较小的文件。大文件不会很快被读回,但小文件可能会。我有足够的 RAM 用于应用程序 + 较小的文件,但对于大文件来说不够用。我可以告诉操作系统在将大文件的一部分写入磁盘后不要将它们保留在缓存中,以便为较小的文件提供更多缓存吗?我仍然希望对大文件的写入足够快。

【问题讨论】:

    标签: linux caching


    【解决方案1】:

    我可以告诉操作系统不要将部分大文件保存在缓存中吗?

    是的,您可能想要使用一些系统调用,例如 posix_fadvise(2)madvise(2)。在奇怪的情况下,您可能会使用readahead(2)userfaultfd(2) 或Linux 特定的标志mmap(2)。或者非常巧妙地处理SIGSEGV(参见signal(7)signal-safety(7)eventfd(2)signalfd(2))你需要编写你的C 程序来做到这一点。

    但我不确定这是否值得您的开发努力。在许多情况下,最近的Linux 内核的行为足够好

    另见proc(5)linuxatemyram.com

    很多人都想阅读GC handbook。这与您的担忧有关

    考虑研究现有open-source软件如GCCQtRefPerSysPostGreSQLGNU Bash等的源代码...

    大多数时候,显式编写代码来管理您的page cache 根本不值得。

    我猜/etc/fstab 文件中的mount(2) 选项(请参阅fstab(5)...)实际上更重要。或者更改或调整您的文件系统(例如ext4(5)xfs(5)..)。或者read(2)-ing 大块(1Mbytes)。

    使用dd(1) 进行测量。另见time(7)

    大多数应用程序不受磁盘限制,对于那些受磁盘限制的应用程序,租用更多磁盘空间比添加和调试额外代码更便宜。

    不要忘记进行基准测试,例如使用strace(1)time(1)

    PS。不要忘记您的开发人员成本。它们通常比 RAM 模块(或更快的 SSD 磁盘)的价格高很多。

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 2021-05-03
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多