【问题标题】:How and when to use /dev/shm for efficiency?如何以及何时使用 /dev/shm 来提高效率?
【发布时间】:2017-08-10 13:54:12
【问题描述】:

/dev/shm 如何比在常规文件系统上写入文件更高效?据我所知,/dev/shm 也是硬盘上的一个空间,所以读/写速度是一样的。

我的问题是,我有一个 96GB 的文件,只有 64GB 的 RAM(+ 64GB 交换空间)。然后,来自同一进程的多个线程需要读取文件的小随机块(大约 1.5MB)。

/dev/shm 是一个很好的用例吗?
它会比从/home 以只读模式打开文件然后传递给线程来读取所需的随机块更快吗?

【问题讨论】:

  • /dev/shm 不在硬盘上。它是在内存中实现的虚拟文件系统,这就是它更快的原因。
  • @Barmar 对,刚刚意识到......然后使用它是有意义的,特别是因为它可以从多个进程共享,因此每个想要使用它的进程不会占用 96GB。

标签: linux performance io filesystems shared-memory


【解决方案1】:

你不使用/dev/shm。它的存在是为了让 POSIX C 库可以通过 POSIX API 提供共享内存支持。不是这样你就可以戳里面的东西。

如果您想要一个属于您自己的内存文件系统,您可以将其挂载到任何您想要的位置。

例如mount -t tmpfs tmpfs /mnt/tmp

Linux tmpfs 是一个仅存在于 RAM 中的临时文件系统。它是通过有一个文件缓存来实现的,后面没有任何磁盘存储。它将在内存压力下将其内容写入交换文件。如果您不想要交换文件,您可以使用ramfs

我不知道您从哪里想到使用/dev/shm 来提高读取文件的效率,因为它根本不是这样做的。

也许您正在考虑通过mmap 系统调用使用内存映射?

在此处阅读此答案:https://superuser.com/a/1030777/4642 它涵盖了很多 tmpfs 信息。

【讨论】:

  • 我从github.com/torch/torch7/blob/master/doc/…这里得到了这个想法所以我在想是否将存储文件放在共享内存中更好。
  • @ilija139 是虚拟内存,需要的时候才换进去。
  • @ilija139:您没有为您的语言或框架添加标签。如果您可以使用内存映射 (mmap),那么这是解决多个程序问题的共享、随机访问的最佳方式。通过内存映射,操作系统会将文件视为虚拟内存交换文件,按需加载和卸载其中的一部分。
  • 这个答案在很大程度上是不正确的。 Linux 上的 /dev/shm 空间是一个暴露的 tmpfs 块设备。 准确地是为了把东西粘在里面。它的最大分配为 1/2 可用内存。例如如果安装了 64GB 的 ram,则 32GB 可用。 /dev/shm 可能是一个很好的用例,具体取决于您对大文件的读取有多随机。如果大多数是 96gb 的前 1/3,那么继续将该部分直接复制到 /dev/shm 。未使用的内存是浪费时间。 /dev/shm 并没有改善对同一文件位置的多次读取,因为该数据已经被缓存了。
  • @Zan ;错了,请阅读文档。不要将用于 IPC 的 POSIX 共享内存与提供的 /dev/shm 挂载混淆。
猜你喜欢
  • 2019-04-27
  • 2017-03-05
  • 2016-08-05
  • 1970-01-01
  • 2013-07-03
  • 1970-01-01
  • 2011-02-21
  • 2016-12-18
  • 2018-10-18
相关资源
最近更新 更多