Node.js操作tmpfs内存文件系统

什么是 tmpfs?

tmpfs 是 Linux 提供的虚拟内存文件系统,可以用于高性能 I/O。

注意:它不是永久的,只是暂时存放。重启 os,tmpfs 中的文件会消失(和内存类似)。

在 linux 下,它默认最大为内存的一半大小,使用df -h命令可以看到,且大小不是固定的,。它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是 0 字节;如果它最大为 1G,里头放有 100M 文件,那剩余的 900M 仍然可为其它应用程序所使用,但它所占用的 100M 内存,是绝不会被系统回收重新划分的

性能对比

用 nodejs 做了下性能对比,测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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);

结果如下:

007S8ZIlgy1gjss0lgvyoj30a8023aa5.jpg

可以看到,tmpfs 比普通硬盘的 I/O 快了近 3 倍。测试的 package.json 很小,如果文件更大,差距更明显。

参考链接