【发布时间】:2015-10-25 20:10:51
【问题描述】:
我在 Linux 机器上使用基于 POSIX API 的共享内存在多个 MPI 进程之间进行通信。我有一个可行的解决方案,但我想知道如何有效地利用共享内存空间来存储大数据。
我有一台具有 64GB 共享内存限制的机器,我可能必须将 > 64GB 的数据写入该空间,但这些都是 1-2GB 的较小块。
我想知道的是:
- 我如何才能真正删除我的 1-2GB 块占用的内存,因为它的目的已经达到并且我不再需要这些数据了?
我正在使用 shm_unlink(),但它似乎没有清除 /dev/shm/ 中的空间
请帮忙!
【问题讨论】:
-
在 unix 中,您可以删除文件,但它仍然存在,直到存在至少一个指向它的描述符。所以你确定所有使用 shmem 的进程都调用
close? -
是的,我想你的意思是所有进程上的 shm_unlink()(?)
-
另外,你考虑过大页面的使用吗?将您的 GB 内存拆分为 4K 页面并管理它们需要付出很多努力。
-
>您的意思是所有进程上的 shm_unlink() 否,shm_unlink 删除名称,而不是文件,就像 inode 与文件一样。你需要关闭文件
-
是的,我既取消链接又关闭。
标签: c++ c linux posix shared-memory