C语言 如何在linux上设置没有root权限的可编程ram磁盘



我需要在我的C应用程序中设置和配置一个ram磁盘。这可能吗?据我所知,ram磁盘只能由根用户设置、挂载和调整大小。我的申请没有这个特权。如果不可能使用随机磁盘,是否有其他可编程的替代磁盘?其目的是在不同时间通过网络运行的多个应用程序之间获得可用的数据。由于数据非常大(~100-150 GB),应用程序内部的ram磁盘实现将把数据保存在内存中,下一个应用程序将直接使用它。这将节省昂贵的写入和读取大数据的硬盘。

请帮忙。

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

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

使用常规文件,但内存映射它。这样,第二个进程就可以像第一个进程一样轻松地访问它。操作系统缓存将负责将文件的"热点"部分保存在RAM中。

更新,基于您提到的NFS。在Linux中寻找缓存设置,将它们增加到非常非常积极的程度,以便内核缓存并尽可能避免写回磁盘(或NFS)。

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

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

十年前,我试图将c头文件放入ram磁盘以加速编译,不幸的是这没有可测量的效果,因为正常的文件系统已经缓存了它们。

最新更新