【问题标题】:Share RAM between Docker containers using mmap() in Annoy library使用 Annoy 库中的 mmap() 在 Docker 容器之间共享 RAM
【发布时间】:2019-10-13 04:43:03
【问题描述】:

我正在使用 Annoy library,即使用 mmap() 将一些多 Gb 文件加载到 RAM 内存中。使用 mmap() 的目的是在内存中只加载一次文件,即使不同的进程需要它。

使用 docker,我计划使用在同一主机上执行相同脚本的多个容器进行扩展。但是多 Gb 文件应该只在 RAM 中加载一次(这就是我们使用 mmap() 的原因),否则我的服务器会爆炸。

多 Gb 文件位于安装在我的容器上的卷中。

但我仍然需要找到一种在容器之间共享 RAM 的方法,以便获得 mmap() 的优势。

我发现this article 关于在 docker 中使用 --ipc 标签,但我不知道它是否适用于我的情况以及如何实现它。欢迎任何帮助。

【问题讨论】:

  • 您是否以编程方式扩展、自动启动容器?如果您使用--ipc 标志,您可以在其他容器中使用来自“主机”(基本上只是选择一个作为主)容器的内存命名空间。从您的示例文章中,主人将是“生产者”,所有其他容器“消费者”
  • @trker 是的,我通过在 docker-compose.yml 文件中添加副本来进行扩展,我将在其中添加 --ipc 标志。您能否确认我的理解是正确的(我是 ram 内存方面的新手):(1)共享内存命名空间 = 共享 ram。 (2) 虽然我的多 Gb 文件的路径在不同的容器中会有所不同,但 linux 会自动检测到它是同一个文件,因此只在 RAM 中加载一次。在 docker 或 annoy 库中不需要额外的配置。
  • 1) 是的,IPC (POSIX/SysV IPC) namespace provides separation of named shared memory segments, semaphores and message queues. 2) 如果您在每个容器中以相同的方式安装卷,我不明白为什么路径会不同,但是使用 IPC 是的,您正在访问内存中的同一个文件

标签: linux docker ram mmap annoy


【解决方案1】:

--ipc 是一个红鲱鱼。对于本地卷,不需要任何操作,如果是同一个文件,则将共享内存。我怀疑远程卷也是如此,但无法确认远程卷不会多次安装。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多