我需要在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)。这些巨大数据的写入和读取正成为瓶颈。我怎样才能减少这个?
答案 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)。它会永久运行并使内存映射保持活动状态,而其他进程可以连接到它。