doc: perf-tests: update Performance Testing document

This commit is contained in:
Bill Zissimopoulos 2016-12-05 16:37:31 -08:00
parent e530e671a5
commit 8e7c241f32
14 changed files with 112 additions and 191 deletions

View File

@ -1,4 +1,5 @@
= Performance Testing
:caption:
This document discusses performance testing for WinFsp. The goal of this performance testing is to discover optimization opportunities for WinFsp and compare its performance to that of NTFS and Dokany.
@ -6,6 +7,14 @@ This document discusses performance testing for WinFsp. The goal of this perform
This performance testing shows that WinFsp has excellent performance in all tested scenarios. It outperforms NTFS in most scenarios (an unfair comparison as NTFS is a disk file system and WinFsp is tested with an in-memory file system). It also outperforms Dokany in all scenarios, often by an order of magnitude.
.File Tests
ifdef::env-browser[chart::bar[data-uri="perf-tests/file_tests.csv",file="perf-tests/file_tests.png",opt="y-label=time"]]
ifndef::env-browser[image::perf-tests/file_tests.png[]]
.Read/Write Tests
ifdef::env-browser[chart::bar[data-uri="perf-tests/rdwr_tests.csv",file="perf-tests/rdwr_tests.png",opt="y-label=time"]]
ifndef::env-browser[image::perf-tests/rdwr_tests.png[]]
== Fsbench
All testing was performed using a new performance test suite developed as part of WinFsp, called https://github.com/billziss-gh/winfsp/blob/master/tst/fsbench/fsbench.c[fsbench]. Fsbench was developed because it allows the creation of tests that are important to file system developers; for example, it can answer questions of the type: "how long does it take to delete 1000 files" or "how long does it take to list a directory with 10000 files in it".

View File

@ -1,30 +0,0 @@
//ntfs
1000,0.13
2000,0.25
3000,0.36
4000,0.48
5000,0.70
//winfsp-t0
1000,0.05
2000,0.09
3000,0.41
4000,0.53
5000,0.66
//winfsp-t1
1000,0.05
2000,0.09
3000,0.39
4000,0.55
5000,0.66
//winfsp-tinf
1000,0.05
2000,0.09
3000,0.39
4000,0.66
5000,0.66
//dokany
1000,0.08
2000,0.33
3000,0.48
4000,0.66
5000,0.83
1 //ntfs
2 1000,0.13
3 2000,0.25
4 3000,0.36
5 4000,0.48
6 5000,0.70
7 //winfsp-t0
8 1000,0.05
9 2000,0.09
10 3000,0.41
11 4000,0.53
12 5000,0.66
13 //winfsp-t1
14 1000,0.05
15 2000,0.09
16 3000,0.39
17 4000,0.55
18 5000,0.66
19 //winfsp-tinf
20 1000,0.05
21 2000,0.09
22 3000,0.39
23 4000,0.66
24 5000,0.66
25 //dokany
26 1000,0.08
27 2000,0.33
28 3000,0.48
29 4000,0.66
30 5000,0.83

View File

@ -1,30 +0,0 @@
//ntfs
1000,0.11
2000,0.28
3000,0.36
4000,0.41
5000,0.59
//winfsp-t0
1000,0.08
2000,0.14
3000,0.20
4000,0.27
5000,0.34
//winfsp-t1
1000,0.06
2000,0.12
3000,0.17
4000,0.22
5000,0.28
//winfsp-tinf
1000,0.06
2000,0.13
3000,0.16
4000,0.22
5000,0.28
//dokany
1000,0.13
2000,0.23
3000,0.34
4000,0.47
5000,0.59
1 //ntfs
2 1000,0.11
3 2000,0.28
4 3000,0.36
5 4000,0.41
6 5000,0.59
7 //winfsp-t0
8 1000,0.08
9 2000,0.14
10 3000,0.20
11 4000,0.27
12 5000,0.34
13 //winfsp-t1
14 1000,0.06
15 2000,0.12
16 3000,0.17
17 4000,0.22
18 5000,0.28
19 //winfsp-tinf
20 1000,0.06
21 2000,0.13
22 3000,0.16
23 4000,0.22
24 5000,0.28
25 //dokany
26 1000,0.13
27 2000,0.23
28 3000,0.34
29 4000,0.47
30 5000,0.59

View File

@ -0,0 +1,30 @@
//ntfs
file_create_test,1.94
file_open_test,0.45
file_overwrite_test,1.14
file_list_test,0.41
file_delete_test,1.03
//winfsp-t0
file_create_test,1.08
file_open_test,0.28
file_overwrite_test,0.30
file_list_test,0.61
file_delete_test,0.45
//winfsp-t1
file_create_test,0.95
file_open_test,0.22
file_overwrite_test,0.22
file_list_test,0.59
file_delete_test,0.34
//winfsp-tinf
file_create_test,0.97
file_open_test,0.20
file_overwrite_test,0.22
file_list_test,0.59
file_delete_test,0.33
//dokany
file_create_test,1.64
file_open_test,0.67
file_overwrite_test,1.64
file_list_test,1.38
file_delete_test,0.91
1 //ntfs
2 file_create_test,1.94
3 file_open_test,0.45
4 file_overwrite_test,1.14
5 file_list_test,0.41
6 file_delete_test,1.03
7 //winfsp-t0
8 file_create_test,1.08
9 file_open_test,0.28
10 file_overwrite_test,0.30
11 file_list_test,0.61
12 file_delete_test,0.45
13 //winfsp-t1
14 file_create_test,0.95
15 file_open_test,0.22
16 file_overwrite_test,0.22
17 file_list_test,0.59
18 file_delete_test,0.34
19 //winfsp-tinf
20 file_create_test,0.97
21 file_open_test,0.20
22 file_overwrite_test,0.22
23 file_list_test,0.59
24 file_delete_test,0.33
25 //dokany
26 file_create_test,1.64
27 file_open_test,0.67
28 file_overwrite_test,1.64
29 file_list_test,1.38
30 file_delete_test,0.91

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -6,6 +6,22 @@
import csv, os, sys
snames = ["ntfs", "winfsp-t0", "winfsp-t1", "winfsp-tinf", "dokany"]
file_tnames = [
"file_create_test",
"file_open_test",
"file_overwrite_test",
"file_list_test",
"file_delete_test"]
#"file_mkdir_test",
#"file_rmdir_test"]
rdwr_tnames = [
"rdwr_cc_read_page_test",
"rdwr_cc_write_page_test",
"rdwr_nc_read_page_test",
"rdwr_nc_write_page_test",
"mmap_read_test",
"mmap_write_test"]
tnames = file_tnames + rdwr_tnames
aggregate = min
tests = {}
@ -18,28 +34,41 @@ for arg in sys.argv[1:]:
tests.\
setdefault(row[0], {}).\
setdefault(name, {}).\
setdefault(row[1], []).\
append(row[2])
setdefault(int(row[1]), []).\
append(float(row[2]))
if False:
for testname in sorted(tests.keys()):
print "%s:" % testname
test = tests[testname]
for tname in (tnames if tnames else sorted(tests.keys())):
print "%s:" % tname
test = tests[tname]
for sname in (snames if snames else sorted(test.keys())):
if sname not in test:
continue
print " %s:" % sname
series = test[sname]
for param in sorted(series.keys()):
print " %s: %s -> %s" % (param, series[param], aggregate(series[param]))
print " %s: %s -> %.2f" % (param, series[param], aggregate(series[param]))
else:
for testname in sorted(tests.keys()):
with open(testname + ".csv", "w") as fout:
test = tests[testname]
for tname in (tnames if tnames else sorted(tests.keys())):
with open(tname + ".csv", "w") as fout:
test = tests[tname]
for sname in (snames if snames else sorted(test.keys())):
if sname not in test:
continue
fout.write("//%s\r\n" % sname)
series = test[sname]
for param in sorted(series.keys()):
fout.write("%s,%s\r\n" % (param, aggregate(series[param])))
fout.write("%s,%.2f\r\n" % (param, aggregate(series[param])))
def master_write(fname, tnames):
with open(fname + ".csv", "w") as fout:
for sname in snames:
fout.write("//%s\r\n" % sname)
for tname in (tnames if tnames else sorted(tests.keys())):
test = tests[tname]
if sname not in test:
continue
series = test[sname]
param = max(series.keys())
fout.write("%s,%.2f\r\n" % (tname, aggregate(series[param])))
master_write("file_tests", file_tnames)
master_write("rdwr_tests", rdwr_tnames)

View File

@ -1,30 +0,0 @@
//ntfs
100,0.08
200,0.16
300,0.22
400,0.28
500,0.36
//winfsp-t0
100,0.17
200,0.34
300,0.50
400,0.66
500,0.83
//winfsp-t1
100,0.17
200,0.34
300,0.50
400,0.67
500,0.83
//winfsp-tinf
100,0.08
200,0.22
300,0.23
400,0.33
500,0.41
//dokany
100,0.28
200,0.58
300,0.86
400,1.16
500,1.45
1 //ntfs
2 100,0.08
3 200,0.16
4 300,0.22
5 400,0.28
6 500,0.36
7 //winfsp-t0
8 100,0.17
9 200,0.34
10 300,0.50
11 400,0.66
12 500,0.83
13 //winfsp-t1
14 100,0.17
15 200,0.34
16 300,0.50
17 400,0.67
18 500,0.83
19 //winfsp-tinf
20 100,0.08
21 200,0.22
22 300,0.23
23 400,0.33
24 500,0.41
25 //dokany
26 100,0.28
27 200,0.58
28 300,0.86
29 400,1.16
30 500,1.45

View File

@ -1,30 +0,0 @@
//ntfs
100,0.09
200,0.22
300,0.28
400,0.38
500,0.48
//winfsp-t0
100,0.17
200,0.31
300,0.48
400,0.63
500,0.80
//winfsp-t1
100,0.16
200,0.31
300,0.47
400,0.61
500,0.78
//winfsp-tinf
100,0.11
200,0.22
300,0.34
400,0.42
500,0.53
//dokany
100,0.33
200,0.59
300,0.91
400,1.20
500,1.47
1 //ntfs
2 100,0.09
3 200,0.22
4 300,0.28
5 400,0.38
6 500,0.48
7 //winfsp-t0
8 100,0.17
9 200,0.31
10 300,0.48
11 400,0.63
12 500,0.80
13 //winfsp-t1
14 100,0.16
15 200,0.31
16 300,0.47
17 400,0.61
18 500,0.78
19 //winfsp-tinf
20 100,0.11
21 200,0.22
22 300,0.34
23 400,0.42
24 500,0.53
25 //dokany
26 100,0.33
27 200,0.59
28 300,0.91
29 400,1.20
30 500,1.47

View File

@ -1,30 +0,0 @@
//ntfs
100,0.56
200,1.16
300,1.64
400,2.20
500,2.77
//winfsp-t0
100,0.16
200,0.31
300,0.47
400,0.64
500,0.78
//winfsp-t1
100,0.16
200,0.33
300,0.50
400,0.67
500,0.81
//winfsp-tinf
100,0.16
200,0.31
300,0.48
400,0.64
500,0.78
//dokany
100,0.30
200,0.58
300,0.84
400,1.11
500,1.41
1 //ntfs
2 100,0.56
3 200,1.16
4 300,1.64
5 400,2.20
6 500,2.77
7 //winfsp-t0
8 100,0.16
9 200,0.31
10 300,0.47
11 400,0.64
12 500,0.78
13 //winfsp-t1
14 100,0.16
15 200,0.33
16 300,0.50
17 400,0.67
18 500,0.81
19 //winfsp-tinf
20 100,0.16
21 200,0.31
22 300,0.48
23 400,0.64
24 500,0.78
25 //dokany
26 100,0.30
27 200,0.58
28 300,0.84
29 400,1.11
30 500,1.41

View File

@ -1,5 +1,5 @@
//ntfs
100,10.14
100,9.38
200,21.39
300,19.56
400,26.11

1 //ntfs
2 100,10.14 100,9.38
3 200,21.39
4 300,19.56
5 400,26.11

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -1,30 +0,0 @@
//ntfs
100,0.86
200,1.72
300,2.53
400,3.38
500,4.33
//winfsp-t0
100,0.16
200,0.31
300,0.48
400,0.63
500,0.81
//winfsp-t1
100,0.19
200,0.31
300,0.48
400,0.63
500,0.81
//winfsp-tinf
100,0.17
200,0.33
300,0.47
400,0.63
500,0.78
//dokany
100,0.31
200,0.61
300,0.91
400,1.22
500,1.50
1 //ntfs
2 100,0.86
3 200,1.72
4 300,2.53
5 400,3.38
6 500,4.33
7 //winfsp-t0
8 100,0.16
9 200,0.31
10 300,0.48
11 400,0.63
12 500,0.81
13 //winfsp-t1
14 100,0.19
15 200,0.31
16 300,0.48
17 400,0.63
18 500,0.81
19 //winfsp-tinf
20 100,0.17
21 200,0.33
22 300,0.47
23 400,0.63
24 500,0.78
25 //dokany
26 100,0.31
27 200,0.61
28 300,0.91
29 400,1.22
30 500,1.50

View File

@ -0,0 +1,33 @@
//ntfs
rdwr_cc_read_page_test,0.97
rdwr_cc_write_page_test,1.19
rdwr_nc_read_page_test,33.05
rdwr_nc_write_page_test,35.45
mmap_read_test,1.06
mmap_write_test,0.72
//winfsp-t0
rdwr_cc_read_page_test,6.83
rdwr_cc_write_page_test,6.12
rdwr_nc_read_page_test,6.41
rdwr_nc_write_page_test,6.41
mmap_read_test,1.00
mmap_write_test,0.72
//winfsp-t1
rdwr_cc_read_page_test,7.33
rdwr_cc_write_page_test,6.17
rdwr_nc_read_page_test,6.94
rdwr_nc_write_page_test,6.51
mmap_read_test,0.98
mmap_write_test,0.73
//winfsp-tinf
rdwr_cc_read_page_test,1.48
rdwr_cc_write_page_test,1.70
rdwr_nc_read_page_test,6.58
rdwr_nc_write_page_test,6.42
mmap_read_test,0.98
mmap_write_test,0.73
//dokany
rdwr_cc_read_page_test,11.20
rdwr_cc_write_page_test,10.33
rdwr_nc_read_page_test,10.59
rdwr_nc_write_page_test,10.73
1 //ntfs
2 rdwr_cc_read_page_test,0.97
3 rdwr_cc_write_page_test,1.19
4 rdwr_nc_read_page_test,33.05
5 rdwr_nc_write_page_test,35.45
6 mmap_read_test,1.06
7 mmap_write_test,0.72
8 //winfsp-t0
9 rdwr_cc_read_page_test,6.83
10 rdwr_cc_write_page_test,6.12
11 rdwr_nc_read_page_test,6.41
12 rdwr_nc_write_page_test,6.41
13 mmap_read_test,1.00
14 mmap_write_test,0.72
15 //winfsp-t1
16 rdwr_cc_read_page_test,7.33
17 rdwr_cc_write_page_test,6.17
18 rdwr_nc_read_page_test,6.94
19 rdwr_nc_write_page_test,6.51
20 mmap_read_test,0.98
21 mmap_write_test,0.73
22 //winfsp-tinf
23 rdwr_cc_read_page_test,1.48
24 rdwr_cc_write_page_test,1.70
25 rdwr_nc_read_page_test,6.58
26 rdwr_nc_write_page_test,6.42
27 mmap_read_test,0.98
28 mmap_write_test,0.73
29 //dokany
30 rdwr_cc_read_page_test,11.20
31 rdwr_cc_write_page_test,10.33
32 rdwr_nc_read_page_test,10.59
33 rdwr_nc_write_page_test,10.73

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB