Closed ronag closed 4 years ago
highwatermark: 1 will negatively impact performance
I actually can't validate this. Try node examples/bench
for highWaterMark: 1 and 16. It's the same for both cases +- 5%
I actually can't validate this. Try node examples/bench for highWaterMark: 1 and 16. It's the same for both cases +- 5%
Hm, it should happen if you have a folder containing lots of folders with no or few elements inside with a reader which reads in bursts with pauses between. It's a bit tricky to verify.
Understood.
@ronag is there any way to make highWaterMark work more? The #140 slows us down 1.5x from 3.2.0, and it isn't cool. As far as I understand, the work must continue until watermark is hit.
What benchmark?
node examples/bench on a dir of 200k files
How do I easily create a dir with 200k files?
@paulmillr: the way 3.2.0 achieves the performance is by having pretty much unlimited parallelism and a bit random ordering. My test with 300k files takes 1G memory, while master take 400M and a PR I'm working which is just slightly slower than master is 100M. I'll see if I can make this more configurable through the watermark.
master:
10000 rss=526.2M heapTotal=450.3M heapUsed=427.7M external=0.8M
1016000 rss=530.0M heapTotal=455.0M heapUsed=421.9M external=0.8M
1033000 rss=524.4M heapTotal=457.4M heapUsed=422.1M external=0.8M
1055000 rss=524.6M heapTotal=457.4M heapUsed=423.7M external=0.8M
1075000 rss=524.6M heapTotal=457.4M heapUsed=427.1M external=0.8M
1088000 rss=524.6M heapTotal=457.4M heapUsed=426.3M external=0.8M
1108000 rss=524.7M heapTotal=457.4M heapUsed=435.1M external=0.8M
1125000 rss=524.8M heapTotal=457.4M heapUsed=430.6M external=0.8M
1156000 rss=524.8M heapTotal=457.4M heapUsed=435.0M external=0.8M
1182000 rss=524.8M heapTotal=457.4M heapUsed=437.4M external=0.8M
1213000 rss=525.0M heapTotal=457.4M heapUsed=433.8M external=0.8M
1242000 rss=525.0M heapTotal=457.4M heapUsed=427.2M external=0.8M
1274000 rss=525.0M heapTotal=457.4M heapUsed=427.9M external=0.8M
1305000 rss=525.4M heapTotal=457.9M heapUsed=429.9M external=0.8M
1336000 rss=525.4M heapTotal=457.9M heapUsed=433.8M external=0.8M
1370000 rss=525.5M heapTotal=457.9M heapUsed=432.2M external=0.8M
1398000 rss=525.6M heapTotal=458.5M heapUsed=432.9M external=0.8M
1429000 rss=525.6M heapTotal=458.5M heapUsed=434.4M external=0.8M
1459000 rss=525.7M heapTotal=458.5M heapUsed=435.5M external=0.8M
1486000 rss=525.7M heapTotal=458.5M heapUsed=432.5M external=0.8M
1520000 rss=525.8M heapTotal=458.5M heapUsed=425.0M external=0.8M
1546000 rss=525.9M heapTotal=458.5M heapUsed=425.3M external=0.8M
1575000 rss=525.9M heapTotal=458.5M heapUsed=439.9M external=0.8M
1607000 rss=526.0M heapTotal=458.5M heapUsed=431.4M external=0.8M
1638000 rss=526.0M heapTotal=458.5M heapUsed=431.2M external=0.8M
1668000 rss=526.1M heapTotal=458.5M heapUsed=426.5M external=0.8M
1703000 rss=526.1M heapTotal=458.5M heapUsed=428.7M external=0.8M
1731000 rss=526.3M heapTotal=459.2M heapUsed=431.7M external=0.8M
1764000 rss=526.3M heapTotal=459.2M heapUsed=426.9M external=0.8M
1797000 rss=526.3M heapTotal=459.2M heapUsed=437.7M external=0.8M
1827000 rss=526.4M heapTotal=459.2M heapUsed=435.9M external=0.8M
1857000 rss=526.4M heapTotal=459.2M heapUsed=434.0M external=0.8M
1887000 rss=526.6M heapTotal=459.5M heapUsed=432.2M external=0.8M
1911000 rss=526.6M heapTotal=459.5M heapUsed=424.3M external=0.8M
1943000 rss=526.7M heapTotal=459.5M heapUsed=434.3M external=0.8M
1976000 rss=526.7M heapTotal=459.5M heapUsed=427.9M external=0.8M
2007000 rss=526.8M heapTotal=459.5M heapUsed=437.1M external=0.8M
2038000 rss=526.8M heapTotal=459.5M heapUsed=437.0M external=0.8M
2070000 rss=526.9M heapTotal=459.5M heapUsed=426.6M external=0.8M
2104000 rss=526.9M heapTotal=459.5M heapUsed=439.7M external=0.8M
2132000 rss=527.0M heapTotal=459.5M heapUsed=439.8M external=0.8M
2159000 rss=527.0M heapTotal=459.5M heapUsed=437.8M external=0.8M
2192000 rss=527.1M heapTotal=459.5M heapUsed=429.9M external=0.8M
2222000 rss=527.2M heapTotal=459.8M heapUsed=427.2M external=0.8M
2249000 rss=527.2M heapTotal=459.8M heapUsed=438.9M external=0.8M
2281000 rss=527.2M heapTotal=459.8M heapUsed=436.8M external=0.8M
2308000 rss=527.4M heapTotal=460.6M heapUsed=438.8M external=0.8M
2337000 rss=527.4M heapTotal=460.6M heapUsed=435.6M external=0.8M
2369000 rss=527.5M heapTotal=460.6M heapUsed=426.4M external=0.8M
2400000 rss=527.5M heapTotal=460.6M heapUsed=426.9M external=0.8M
2422000 rss=527.5M heapTotal=460.6M heapUsed=432.1M external=0.8M
2445000 rss=527.5M heapTotal=460.6M heapUsed=432.4M external=0.8M
2469000 rss=527.6M heapTotal=460.6M heapUsed=433.2M external=0.8M
2491000 rss=527.6M heapTotal=460.6M heapUsed=425.5M external=0.8M
2514000 rss=527.6M heapTotal=460.6M heapUsed=437.2M external=0.8M
2531000 rss=527.7M heapTotal=460.6M heapUsed=431.6M external=0.8M
2555000 rss=527.7M heapTotal=460.6M heapUsed=426.3M external=0.8M
2586000 rss=527.8M heapTotal=460.6M heapUsed=428.9M external=0.8M
2611592 rss=527.8M heapTotal=460.6M heapUsed=432.6M external=0.8M
Processed 2611592 files in 41840 msecs
3.2.0:
0 rss=18.5M heapTotal=4.7M heapUsed=2.6M external=0.8M
31000 rss=117.2M heapTotal=69.5M heapUsed=39.8M external=0.8M
77000 rss=160.4M heapTotal=90.2M heapUsed=58.7M external=0.8M
135000 rss=240.7M heapTotal=139.5M heapUsed=110.0M external=0.8M
187000 rss=259.8M heapTotal=144.0M heapUsed=68.1M external=0.8M
238000 rss=264.1M heapTotal=144.0M heapUsed=101.4M external=0.8M
291000 rss=293.8M heapTotal=169.9M heapUsed=148.5M external=0.8M
346000 rss=338.3M heapTotal=204.3M heapUsed=177.1M external=0.8M
411000 rss=379.1M heapTotal=243.3M heapUsed=221.0M external=0.8M
454000 rss=769.9M heapTotal=581.0M heapUsed=550.4M external=0.8M
1475000 rss=771.2M heapTotal=598.1M heapUsed=571.2M external=0.8M
1534000 rss=808.6M heapTotal=635.3M heapUsed=600.2M external=0.8M
1614000 rss=849.0M heapTotal=675.1M heapUsed=642.5M external=0.8M
1670000 rss=881.8M heapTotal=708.2M heapUsed=672.6M external=0.8M
1721000 rss=914.1M heapTotal=739.9M heapUsed=712.7M external=0.8M
1775000 rss=948.4M heapTotal=773.4M heapUsed=751.7M external=0.8M
1838000 rss=983.9M heapTotal=809.1M heapUsed=779.8M external=0.8M
1894000 rss=1016.1M heapTotal=840.5M heapUsed=807.2M external=0.8M
1971000 rss=1050.9M heapTotal=875.7M heapUsed=854.2M external=0.8M
2034000 rss=1085.8M heapTotal=910.0M heapUsed=883.6M external=0.8M
2092000 rss=1120.3M heapTotal=944.1M heapUsed=919.3M external=0.8M
2143000 rss=1151.7M heapTotal=975.8M heapUsed=945.9M external=0.8M
2197000 rss=1183.1M heapTotal=1007.0M heapUsed=972.9M external=0.8M
2271000 rss=1216.0M heapTotal=1039.8M heapUsed=1014.1M external=0.8M
2330000 rss=1247.5M heapTotal=1071.2M heapUsed=1049.3M external=0.8M
2381000 rss=1279.6M heapTotal=1102.7M heapUsed=1073.9M external=0.8M
2448000 rss=1311.9M heapTotal=1134.7M heapUsed=1104.8M external=0.8M
2505000 rss=1344.3M heapTotal=1167.2M heapUsed=1136.1M external=0.8M
2563000 rss=1374.0M heapTotal=1196.8M heapUsed=1173.0M external=0.8M
2610000 rss=1400.3M heapTotal=1223.0M heapUsed=1190.2M external=0.8M
2611596 rss=1400.3M heapTotal=1223.0M heapUsed=1187.4M external=0.8M
Processed 2611596 files in 20784 msecs
highwatermark: 1 will negatively impact performance, but a larger value breaks a test scenario which depends on the number of elements buffered.
This fixes both.