如何实现swapfile跨操作系统

How To implement swapfile cross operating system

有些用例我不能有很多 ram,有时由于基于 docker 的服务并不总是提供超过 512mb/1gb 的 ram,或者如果我 运行 多个基于 rust 的 gui 应用程序,如果每个应用程序正常占用 100mb 的 ram,我如何实现交换文件/虚拟 ram 以超过分配的 ram?此外 os 级别的交换文件不允许用户选择 ose 哪个应用程序可以使用真正的 ram 和哪个交换文件,所以它也可能成为一个问题。我想尽可能多地使用交换文件 possible,如果 possible,甚至不使用真正的 ram。用户和 hosting 服务通常提供大量存储空间(通常超过 10gb),因此这也是使用可用存储空间的好方法! 如果交换文件或类似的东西不是 possible,我想知道“在 ram 中缓存数据”应用程序和“在文件中缓存数据”之间的速度和 cpu 消耗是否有任何差异并在需要时阅读”应用程序。如果后者通常很慢并且不如交换文件高效,我想知道 pos 如何 os 设法使交换文件比应用程序更高效的方法。

应用程序无法控制它们分配的内存是分配在实际 RAM 上、交换分区上还是其他地方。你只需要内存,OS 负责找到可用的内存给你。

除此之外,请注意使用交换(有时称为 交换非常 不好performance-wise。多少很大程度上取决于您的硬件,但大约是三个数量级。如果您正在与用户交互,这甚至会被放大:如果一个正在获取某些资源的程序需要等待一分钟而不是几毫秒,那么它不会太麻烦,因为系统负载很重,但是用户一般不会那么有耐心。

另请注意,在交换时,OS 不会选择哪个应用程序获得更快的 RAM 以及哪个应用程序获得交换内存随机。它将尝试根据其配置方式(至少对于 Linux 内核)确定应优先考虑哪个应用程序,优先级多少等,因此实际上最终是用户决定哪个应用程序获得最多的 RAM(当然是提前:每次内核必须用一点 pop-up... 做出决定时都不会提示它们)。

最后,现代 OS 允许多个应用程序分配重叠的内存,只要每个应用程序都没有完全使用它要求的内存(这很常见),允许您 运行 理论上需要比您实际拥有的更多 RAM 的应用程序。

这是在 OS 部分:现在是应用程序部分。通常,当你写一个程序(其目的不是特定的 RAM-related)时,你不应该真正关心内存消耗(到一定程度),尤其是在 Rust 中。这不仅通常由 OS 处理以防万一您使用了太多内存,而且在可能的情况下,大多数人更愿意交换更多的内存使用量(即使是 lot 更多)以获得更好的 CPU 性能,因为 RAM 比 CPU.

便宜很多

当然也有例外,内存消耗如此之高,你真的不能不注意。在这些情况下,要么让用户处理这个问题(即已知此应用程序会消耗大量内存,因为没有其他方法可以做到这一点,所以如果你想使用它,只需拥有大量内存),就像视频游戏经常做的那样,或者您重新考虑您的应用程序以减少内存使用以换取一些 CPU 效率,例如当您处理如此庞大的图形时甚至无法将它们存储在所有世界上的硬盘(在这种情况下,您的应用程序必须足够智能,以便能够在当时处理图形的一小部分),或者最终您正在使用大量资源,但可以存储在硬盘上磁盘,因此您只需将其写入文件并访问它 chunks-by-chunks,就像某些数据库管理器所做的那样。