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

标签 linux performance io filesystems shared-memory

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

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

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

最佳答案

你不使用/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 信息。

关于linux - 如何以及何时使用/dev/shm 来提高效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42884087/

相关文章:

java - Tomcat 进程在交换空间用完后被 Linux 内核杀死;没有任何 JVM OutOfMemory 错误

c - 使用 C/C++ 的 LibXml2

performance - 在Matlab中,找到每个矩阵元素的距离

java - 查找算术级数中缺失的项 -

c - write() 不写入数据

linux - 运行 git 命令时,将 stderr 重定向到 stdout,将 stdout 重定向到/dev/null

linux - shell 脚本 sh 从参数中删除斜杠 (/)

linux - 什么意思!#:* !#:1- in a bash command?

mysql - 在 MySQL 中通过复杂表达式获取 N 行顺序的有效方法

javascript - Firefox 糟糕的 RegEx 性能