作者:腾龙娱乐开户 | 来源:互联网 | 2023-05-18 06:49
IamcopyingfilewithNodeonanSSDunderVMWare,buttheperformanceisverylow.ThebenchmarkI
I am copying file with Node on an SSD under VMWare, but the performance is very low. The benchmark I have run to measure actual speed is as follows:
我在VMWare下的SSD上使用Node复制文件,但性能非常低。我测量实际速度的基准如下:
$ hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 12004 MB in 1.99 secOnds= 6025.64 MB/sec
Timing buffered disk reads: 1370 MB in 3.00 secOnds= 456.29 MB/sec
However, the following Node code that copies file is very slow, evne teh consequent runs do not make it faster:
但是,以下复制文件的节点代码非常慢,因此后续运行不会使其更快:
var fs = require("fs");
fs.createReadStream("bigfile").pipe(fs.createWriteStream("tempbigfile"));
And the runs as:
运行如下:
$ seq 1 10000000 > bigfile
$ ll bigfile -h
-rw-rw-r-- 1 mustafa mustafa 848M Jun 3 03:30 bigfile
$ time node test.js
real 0m4.973s
user 0m2.621s
sys 0m7.236s
$ time node test.js
real 0m5.370s
user 0m2.496s
sys 0m7.190s
What is the issue here and how can I speed it up? I believe I can write it faster in C by just adjusting the buffer size. The thing that confuses me is that when I wrote simple almost pv equivalent program, that pipes stdin to stdout as the below, it is very fast.
这里有什么问题,如何加快速度?我相信只需调整缓冲区大小,我就可以在C中更快地编写它。令我困惑的是,当我编写简单的几乎pv等效程序时,将stdin管道传输到stdout,如下所示,它非常快。
process.stdin.pipe(process.stdout);
And the runs as:
运行如下:
$ dd if=/dev/zero bs=8M count=128 | pv | dd of=/dev/null
128+0 records in 174MB/s] [ <=> ]
128+0 records out
1073741824 bytes (1.1 GB) copied, 5.78077 s, 186 MB/s
1GB 0:00:05 [ 177MB/s] [ <=> ]
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 5.78131 s, 186 MB/s
$ dd if=/dev/zero bs=8M count=128 | dd of=/dev/null
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB) copied, 5.57005 s, 193 MB/s
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 5.5704 s, 193 MB/s
$ dd if=/dev/zero bs=8M count=128 | node test.js | dd of=/dev/null
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB) copied, 4.61734 s, 233 MB/s
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 4.62766 s, 232 MB/s
$ dd if=/dev/zero bs=8M count=128 | node test.js | dd of=/dev/null
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB) copied, 4.22107 s, 254 MB/s
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 4.23231 s, 254 MB/s
$ dd if=/dev/zero bs=8M count=128 | dd of=/dev/null
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB) copied, 5.70124 s, 188 MB/s
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 5.70144 s, 188 MB/s
$ dd if=/dev/zero bs=8M count=128 | node test.js | dd of=/dev/null
128+0 records in
128+0 records out
1073741824 bytes (1.1 GB) copied, 4.51055 s, 238 MB/s
2097152+0 records in
2097152+0 records out
1073741824 bytes (1.1 GB) copied, 4.52087 s, 238 MB/s
1 个解决方案