这个问题查询是否使用/dev/shm
或/tmp
。在提供的答案中,一般印象是 比/dev/shm
更快,/tmp
因为它写入 RAM 而不是磁盘。在网络上搜索有关此主题的内容模糊地证实了这种印象。不幸的是,我找不到可靠的来源毫无疑问地显示哪一个性能更高,例如通过测量。
例如,第一个答案中的这句话:
由于 RAM 比磁盘存储快得多,您可以使用 /dev/shm 代替 /tmp 来提高性能,如果您的进程是 I/O 密集型的并且大量使用临时文件。
链接的文章指出:
/dev/shm 只不过是传统共享内存概念的实现。它是在程序之间传递数据的有效方法。一个程序将创建一个内存部分,其他进程(如果允许)可以访问该部分。这将加快 Linux 的速度。
这既不能证实引用该网站的答案,也不能比较/dev/shm
与的性能/tmp
。它只是对现状的简单描述/dev/shm
。
尽管如此,有一个评论在第一个答案中,说明(截至今天):
使用 /dev/shm 不会提高性能。/dev/shm 是受磁盘 (swap) 支持的内存 (tmpfs)。/var/tmp 是受磁盘 (磁盘文件系统) 支持的内存 (磁盘缓存)。实际上,性能大致相同 (tmpfs 略有优势,但不足以产生影响)。/tmp 可能是 tmpfs 也可能不是,这取决于管理员如何配置它。在脚本中使用 /dev/shm 没有任何好处。
由于此评论仍未受到质疑,而其他答案和评论表明情况并非如此,因此问题仍然是是否/dev/shm
比更快/tmp
?
注意:我很清楚答案很可能是“视情况而定”。关于 SU:SE 的一个问题关于要使用哪个文件系统/tmp
。还有一个相关问题。
答案1
当你使用时,/dev/shm
你不是直接写入 RAM。它是一个临时文件文件系统,临时文件将所有文件保存在虚拟内存(作为 RAM 扩展的磁盘)中。
从内核网站:
如果将它与 ramfs(创建 tmpfs 的模板)进行比较,您会发现它具有交换和限制检查功能。另一个类似的东西是 RAM 磁盘 (/dev/ram*),它在物理 RAM 中模拟固定大小的硬盘,您必须在顶部创建一个普通文件系统。Ramdisk 无法交换,您也无法调整它们的大小。
由于 tmpfs 完全位于页面缓存和交换区中,因此所有 tmpfs 页面将在 /proc/meminfo 中显示为“Shmem”,在 free(1) 中显示为“Shared”。请注意,这些计数器还包括共享内存(shmem,请参阅 ipcs(1))。获取计数的最可靠方法是使用 df(1) 和 du(1)。
内存文件系统是一个基于 RAM 的文件系统:
Ramfs 是一个非常简单的文件系统,它将 Linux 的磁盘缓存机制(页面缓存和 dentry 缓存)导出为可动态调整大小的基于 RAM 的文件系统。
因此,回答您的问题,由于 (/dev/shm 和 /tmp) 都在使用磁盘,因此性能并没有提升。
您可以用这个例子来验证在 RAM 中写入的时间:
mkdir /mnt/ram
mount -t ramfs -o size=2g ramfs /mnt/ram
# Create random file of 2GB
dd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc
# Check ram usage
free
cp /tmp/testfile /mnt/ram
# Check ram usage again
free