如何以及何时使用/ dev / shm来提高效率?

ili*_*139 6 linux filesystems io performance shared-memory

/dev/shm与在常规文件系统上写入文件相比,效率如何?据我所知,/dev/shm硬盘上也是一个空间,因此读/写速度是相同的。

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

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

Zan*_*ynx 8

你不用/dev/shm。它的存在是为了使POSIX C库可以通过POSIX API提供共享内存支持。否,所以您可以戳那里的东西。

如果您需要自己的内存文件系统,则可以在所需的任何位置挂载该文件系统。

mount -t tmpfs tmpfs /mnt/tmp, 例如。

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

我不知道您有什么/dev/shm用来提高读取文件效率的想法,因为这根本不起作用。

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

  • 这个答案很大程度上是错误的。Linux 上的 /dev/shm 空间是一个公开的 tmpfs 块设备。它*准确地*用于将东西粘在那里。它的最大分配量为 1/2 可用内存。例如,如果安装了 64GB 内存,则可以使用 32GB。/dev/shm 可能是一个很好的用例,具体取决于您读取大文件的随机性。如果大多数位于 96GB 的前 1/3,则继续将该部分直接复制到 /dev/shm 。未使用的内存就是浪费时间。但 /dev/shm 并不能改善对同一文件位置的多次读取,因为该数据已经被缓存。 (17认同)
  • @ZanLynx:`mount -t tmpfs tmpfs /mnt/tmp` 只能由 root 执行,因此 `/dev/shm` 是提高用户 I/O 性能的一个很好的解决方案。请参阅 https://superuser.com/questions/45342/when-should-i-use-dev-shm-and-when-should-i-use-tmp (11认同)
  • 我看到了这条评论,但我没有解决它,因为你在其他地方安装的基本原理从一开始就被误导和不正确。使用内核提供的“共享内存”并没有什么问题,它也有一个文件系统,并且已经由内核专门提供给用户级访问了。如果需要,您可以直接在 samba 上共享它,并选择授予该空间中的区域的权限。 (5认同)
  • @Zan 不会根据推测的冲突来告诉用户他应该或不应该用自己的 shm 做什么。它降低了计算机和所提供的服务的实用性。除此之外,如果作者不将所有内容都以 root 身份编写,标准内核权限将确保不会发生冲突。无论如何,甚至不可能以这种方式污染正在运行的内核。 (3认同)
  • 我从这里得到了这个想法https://github.com/torch/torch7/blob/master/doc/storage.md#torchtypestoragefilename--shared--size--sharedmem所以我在想拥有存储文件是否更好是否在共享内存中。 (2认同)
  • @赞;错误,请阅读文档。不要将用于 IPC 的 POSIX 共享内存与提供的 /dev/shm 挂载混淆。 (2认同)