使用硬盘快速访问替代 RAM

Posted

技术标签:

【中文标题】使用硬盘快速访问替代 RAM【英文标题】:Using hard disk for fast access replacing RAM 【发布时间】:2015-08-14 11:38:05 【问题描述】:

我一直在具有高内存(128GB RAM)的机器上运行内存密集型 C++ linux 应用程序。该应用程序预先保留了大约 20GB 的内存,以供以后用作缓冲区。我希望将此应用程序移植到某种 SBC,例如 Raspberry Pi,我几乎没有内存可使用(与通常情况相比)。我的想法是使用 HDD(可能是 SDD)而不是 RAM 来分配 20GB 内存。有没有更有效的方法来做到这一点?另外,在这种方法中,我的实现应该是什么:只是二进制文件还是其他什么?

编辑:我可以减少内存分配,比如 2GB。不过,我在 RPi 中没有那种可用的内存。由于整个项目是将其移植到 SBC,因此我只需要使用硬盘空间来解决它。

【问题讨论】:

一般来说:辅助内存永远不如主内存快。 创建交换文件不是更简单的解决方案吗?这样,您根本不必更改我们的应用程序。 @MatthiasDiener :使用交换文件并分配 20GB 缓冲区会导致系统和所有其他进程也进行交换。这可能会几乎冻结系统,这是一个坏主意。 OP的想法更好 您可以(应该)将程序为缓冲区预留的内存量减少到 Pi 中可行的内存量。或者,正如其他人建议的那样,您可以用更适合小型机器的东西替换整个机制。 如果您有可能插入硬盘,您可以使用硬件 ram 磁盘。 【参考方案1】:

我会首先考虑使用mmap 像交换一样映射文件。

那么,rpi 使用 32 位 ARM,这意味着你不能同时拥有所有 20GB 地址,所以你需要某种内存覆盖方法:

    您的程序明确要求您的“内存控制器”在区域上换入/换出。 您采用像锁定缓冲区这样的模式(类似于 Direct3D 所做的),并让“内存控制器”管理和执行交换。

归根结底,rpi 不适合这项工作,你需要投入高昂的开发成本,而不是简单地选择一台便宜的 PC。

【讨论】:

最后一句话似乎完全是主观的。您是否比我们其他人更了解 user2779853 的工作细节?将部署多少个实例(N),Pi 的单位成本是多少,N 批 24Gb 或更多内存的单位成本是多少,处理特定任务所花费的时间成本是多少不同?在我看来,最后一句话冲淡了原本不错的答案。 我同意这是我自己的意见,基于解决非问题所涉及的开发成本的考虑。如果 OP 提供有关其应用程序的更多详细信息,我们也可能会提供更多替代方案来解决问题。顺便说一句,嵌入 64 位可能会使开发更简单。 @enhzflep - 同意,仍然 +1 给 Calvin【参考方案2】:

如果没有进一步分析,我不敢移植为 128Go 内存机器编写的应用程序,该应用程序实际上为低资源机器上的缓冲区保留 20Go 内存。由于辅助内存很少像主内存一样快,您可能不得不重构应用程序的内存管理,使用 显式交换,就像我们在 70 年代或 80 年代初所做的那样:

定义可用于作业的 n 个实内存区域 将完整数据存储到磁盘上的随机访问文件中 在需要时显式加载(和存储修改后的数据)

这种模式已经不再使用很长时间了,因为普通计算机现在有足够的内存并且速度足够快,可以让操作系统通过交换提供虚拟内存,而不会让程序员完成这样繁琐的任务。

但是,一旦您想在 Raspberry Pi 上运行内存密集型 C++ 应用程序,您就会遇到资源使用优化是批评的老问题。

【讨论】:

以上是关于使用硬盘快速访问替代 RAM的主要内容,如果未能解决你的问题,请参考以下文章

使用StAX为XML创建索引以便快速访问

访问 Apache Hive 的 Hue 替代方案

Ram的深度是啥意思

寻找同步 .mdb 访问数据库的替代方案(创可贴)

AWS Lambda + NAT 网关的替代方案

win10快速访问去除不掉怎么办 win10快速访问怎么关闭