使用硬盘快速访问替代 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的主要内容,如果未能解决你的问题,请参考以下文章