/dev/shm 比 /tmp 快吗?

hin*_*tze 6 memory linux performance

这个问题询问是否使用/dev/shmor /tmp。在提供的答案中,总体印象是比写入 RAM 而不是写入磁盘/dev/shm更快。/tmp搜索有关该主题的网络模糊地证实了这一印象。不幸的是,我无法找到可靠的来源,毫无疑问地显示哪个性能更高,例如通过测量。

例如,引用第一个答案:

由于 RAM 比磁盘存储快得多,因此如果您的进程是 I/O 密集型并且大量使用临时文件,则可以使用 /dev/shm 而不是 /tmp 来提高性能

链接的文章指出:

/dev/shm只不过是传统共享内存概念的实现。它是在程序之间传递数据的有效方法。一个程序将创建一个内存部分,其他进程(如果允许)可以访问该内存部分。这将加快 Linux 上的速度。

这既没有证实引用该网站的答案,也没有比较/dev/shm与的性能/tmp。它只是对现状的描述/dev/shm

尽管如此,第一个答案中有一条评论,指出(截至今天):

使用 /dev/shm 不会提高性能。/dev/shm 是由磁盘(交换)支持的内存(tmpfs)。/var/tmp 是磁盘(磁盘文件系统)支持的内存(磁盘缓存)。实际上,性能大致相同(tmpfs 有轻微优势,但不足以影响)。/tmp 可能是 tmpfs,也可能不是,具体取决于管理员如何配置它。没有充分的理由在脚本中使用 /dev/shm。

由于此评论仍然没有受到质疑,并且其他答案和评论表明并非如此,所以问题仍然是是否/dev/shm更快/tmp

注意:我很清楚答案很可能是“视情况而定”。SU:SE 上有一个关于使用哪个文件系统的问题/tmpSO也有一个相关的问题。

sin*_*anu 3

当你使用时,/dev/shm你并不是直接写入RAM。它是一个tmpfs文件系统,tmpfs将所有文件保存在虚拟内存(作为 RAM 扩展的磁盘)中。

\n

来自kernel.org

\n
\n

如果将其与 ramfs(这是创建 tmpfs 的模板)进行比较,您将获得交换和限制检查。另一个类似的东西是 RAM 磁盘 (/dev/ram*),它在物理 RAM 中模拟固定大小的硬盘,您必须在上面创建一个普通的文件系统。Ramdisk 无法交换,并且您无法调整它们的大小。

\n

由于 tmpfs 完全存在于页面缓存和交换中,因此所有 tmpfs\n页面将在 /proc/meminfo 和 \xe2\x80\x9cShared\xe2\x80\x9d 中显示为 \xe2\x80\x9cShmem\xe2\x80\x9d在\n自由(1) 中。请注意,这些计数器还包括共享内存(shmem,\n请参阅 ipcs(1))。获取计数的最可靠方法是使用 df(1)\n 和 du(1)。

\n
\n

ramfs是一个基于 RAM 的文件系统:

\n
\n

Ramfs 是一个非常简单的文件系统,它将 Linux\xe2\x80\x99s 磁盘缓存机制(页面缓存和 dentry 缓存)导出为基于 RAM 的可动态调整大小的文件系统。

\n
\n

因此,回答您的问题,由于(/dev/shm 和 /tmp)都使用磁盘,因此性能没有提升。

\n

您可以通过以下示例验证何时写入 RAM:

\n
mkdir /mnt/ram\nmount -t ramfs -o size=2g ramfs /mnt/ram\n# Create random file of 2GB\ndd if=/dev/urandom bs=1024 count=2000000 of=/tmp/testfile conv=notrunc\n# Check ram usage\nfree\ncp /tmp/testfile /mnt/ram\n# Check ram usage again\nfree\n
Run Code Online (Sandbox Code Playgroud)\n