gpt4 book ai didi

linux - shm_open 是否提交固定数量的物理内存?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:34:20 25 4
gpt4 key购买 nike

我的一个 friend 正在为内存受限的 Linux 系统开发一个库。他提议使用 shm_open 为用户计算机上多个不同程序之间的进程间通信分配多个合理大小 (16MB) 的内存。

出现的问题是,如果分配了很多缓冲区(比如 128 个),那么 128 × 16MB 可能是可用系统内存的一个重要部分,而且很有可能没有多少保留内存实际上会被习惯。例如,如果每个缓冲区中只有 128K 的内存实际用于任何事情,这种方法将使用大约 1/128 的保留内存。由于预期的访问模式,很可能每个缓冲区中只有一小部分区域在任何给定时间会“热”。

我查阅了 shm_open 的手册页,其中特别提到在 Linux 上,实现使用 tmpfs 分配内存。 tmpfs 的手册页反过来说,如果机器上有物理内存压力,分配的内存可以调出。它还表示将只分配存储文件系统已用内容所需的空间。

通过阅读本文,我假设以下内容是正确的:

  1. 使用 shm_open 分配 16MB 的空间不一定会立即消耗机器上的 16MB 物理内存,因为大多数文件系统都是零页,操作系统会延迟分配。使用的空间将与写入的数据量成正比。

  2. 如果机器上的物理 RAM 所剩无几,则允许操作系统从共享内存缓冲区中调出部分。此外,如果在任何时候只有缓冲区的某些部分将被访问,那么假设这些区域——可能不是其他区域——将在给定时间被分页并不是不合理的。

这些假设合理吗?这在原则上可以根据经验进行测试,但令人担忧的是我们会陷入“是的,这在您的系统上有效,但对于其他 Linux 安装通常不是这样”的问题。

最佳答案

用户模式应用程序通常可以保留物理内存的唯一方法是使用 mlock系统调用系列;该进程必须具有 CAP_IPC_LOCK 权限,或者它们仅限于 RLIMIT_MEMLOCK 字节。

可以使用 mlock() 将共享内存锁定到 RAM 中,但它不会自动完成,也没有理由需要这样做。它只是共享虚拟内存。

关于linux - shm_open 是否提交固定数量的物理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52107160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com