![Linux - 是否可以创建内存文件系统(ramdisk/tmpfs)来缓冲/缓存磁盘中的数据?](https://linux22.com/image/172642/Linux%20-%20%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%88%9B%E5%BB%BA%E5%86%85%E5%AD%98%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%88ramdisk%2Ftmpfs%EF%BC%89%E6%9D%A5%E7%BC%93%E5%86%B2%2F%E7%BC%93%E5%AD%98%E7%A3%81%E7%9B%98%E4%B8%AD%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%9F.png)
我有一些代码可以处理存储在外部硬盘上的大量数据。磁盘上大约有 6.5 GiB 的数据,但只处理了几个文件而不是全部内容。
我使用 tmpfs 文件系统创建了一个 ramdisk,将磁盘内容的副本存储在内存中,以加快所需的处理时间。每次重新启动系统时,我都必须将磁盘的内容复制回此 ramdisk。
这工作正常,因为整个内容可以适合我拥有的可用内存量。
但是,当我稍后更改为不同的更大的数据集时,它可能无法工作。
这是相当低效的,因为我实际读取的数据量只有1GB左右。 (据我估计,略高于 10%。)
有没有办法在内存中创建一个 ramdisk 来缓存从该外部磁盘读取的数据?
我确信这样的事情在 Linux 上一定是可能的 - 但我不知道要搜索什么。 Ramdisks 已经是一个相当小众的话题了。
顺便说一句,我正在使用 Debian 测试,在撰写本文时,它是 Debian 10 之前的测试分支。
编辑:如果有什么区别的话,我不会写回该磁盘。
答案1
答案2
这并不能回答您的问题,但可能有助于解决所描述的问题。你想要
将磁盘内容的副本存储在内存中以加快所需的处理时间。
你不需要做任何事情。默认情况下会发生这种情况。
自己尝试一下:
dd if=/dev/urandom bs=1M count=1M of=test.bin # create a file of 10 GB random data
echo 3 | sudo tee /proc/sys/vm/drop_caches # drop caches
dd if=test.bin bs=1G count=1 of=/dev/null # read 1 GB of data
dd if=test.bin bs=1G count=1 of=/dev/null # read again
第一次阅读需要一段时间:
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 10,43 s, 103 MB/s
第一次读取后,数据保留在内存中。随后的读取速度要快得多:
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.320478 s, 3.4 GB/s
只要有足够的可用内存,Linux 就会很高兴地支持您的努力,将最近读取的文件内容保留在内存中。