什么是 tmpfs?
tmpfs 是 Linux 提供的虚拟内存文件系统,可以用于高性能 I/O。
注意:它不是永久的,只是暂时存放。重启 os,tmpfs 中的文件会消失(和内存类似)。
在 linux 下,它默认最大为内存的一半大小,使用
df -h
命令可以看到,且大小不是固定的,。它并不会真正的占用这块内存,如果/dev/shm/
下没有任何文件,它占用的内存实际上就是 0 字节;如果它最大为 1G,里头放有 100M 文件,那剩余的 900M 仍然可为其它应用程序所使用,但它所占用的 100M 内存,是绝不会被系统回收重新划分的。性能对比
用 nodejs 做了下性能对比,测试代码如下:
const fs = require("fs"); const LOOP_TIMES = 5000; main(); function main() { console.time("tmpfs"); for (let i = 0; i < LOOP_TIMES; ++i) { // 1.js: 普通硬盘 readAndWriteFile("./package.json"); // 2.js: tmpfs // readAndWriteFile('/dev/shm/package.json') } console.timeEnd("tmpfs"); } function readAndWriteFile(filepath) { const content = fs.readFileSync(filepath); const copyFilepath = `${filepath}.copy`; fs.writeFileSync(copyFilepath, content); fs.unlinkSync(copyFilepath);
结果如下:
可以看到,tmpfs 比普通硬盘的 I/O 快了近 3 倍。测试的 package.json 很小,如果文件更大,差距更明显。