如何在linux上没有root权限的情况下设置可编程ram磁盘

时间:2011-08-23 10:07:13

标签: c linux memory-management ram

我需要在C应用程序中设置和配置ram-disk。可能吗? 根据我的理解,ram-disk只能由root设置,安装和调整大小。 我的申请不具备这种特权。 是否有可以编程的ram-disk的备用,如果ram-disk不可能? 目的是在不同时间和网络上运行的多个应用程序中获取数据。由于数据量很大(约100-150 GB),因此应用程序内的ram-disk实现会将数据保存在内存中,而下一个应用程序只会使用它。这将节省昂贵的写入和读取大量数据的硬盘。

非常感谢这方面的帮助。

编辑:问题陈述更清晰一点。进程A在machine1上运行,并通过NFS在machine2上写入大约100GB的数据并退出。进程B在machine1上运行,并通过NFS从machine2读取此数据(100GB)。这些巨大数据的写入和读取正成为瓶颈。我怎样才能减少这个?

4 个答案:

答案 0 :(得分:2)

使用常规文件,但memory map。这样,第二个进程可以像第一个进程一样轻松访问它。操作系统缓存将负责将文件的“热”部分保留在RAM中。

根据您提到的NFS进行更新。在Linux中查找缓存设置,将它们增加到非常非常积极的状态,以便内核缓存并尽可能避免写回磁盘(或NFS)。

答案 1 :(得分:2)

使用shm_open创建命名的共享内存对象,然后ftruncate设置所需的大小。然后,您可以mmap部分或全部用于撰写,close,再次shm_open(使用相同的名称)和mmap稍后在另一个流程中。完成后,您可以shm_unlink

答案 2 :(得分:1)

通常使用管理工具设置ram-disk并在程序中将其用作普通文件系统。要在不同进程之间共享数据,您可以使用共享内存。 我不确定你想通过将150GB加载到内存中来实现什么(你确定你有那么多内存吗?)。

十年前,我试图将c-header文件放入ram-disk中以加速编译,不幸的是,这没有可测量的效果,因为普通文件系统已经缓存它们。

答案 3 :(得分:1)

您的解决方案是使用共享内存(例如使用mmap)。为了避免两个进程不同时运行的问题,引入了一个额外的进程(称之为“ramdisk”-process)。它会永久运行并使内存映射保持活动状态,而其他进程可以连接到它。