[xwiki-devs] Faster loadXWikiDoc method, preliminary data, 850 - 1000% speed increase.
My loader is able to load every page in my copy of XE and they all pass the .equals( test against the same page loaded by the default loader so I feel that I'm ready to publish some tests. These are time results (in milliseconds) for loading a page containing 1000 comments. see: http://jira.xwiki.org/jira/browse/XWIKI-2874 My test script runs the tests 30 times interchanging old loader and new. These tests were all the first call to a newly started server, you can see it speed up as the code is jit compiled. Conclusion: 850% improvment can be expected for loading a page with 1000 comments. StringListProperty and LargeStringProperty being mapped to the same column costs about 100ms for the workaround, disabling this workaround brings it to an even 1000% speed increase. Disabling custom mapping saves a whopping 8ms. This surprised me. My loader is only marginally faster at loading all of the pages in XE, it is best at scaling with lots of objects. This didn't surprise me. The actual test results are below. Caleb James DeLisle test1: no special optimizations. Old loader ===================== New Loader 11835ms. ===================== 2875ms. 7776ms. ===================== 771ms. 6827ms. ===================== 684ms. 6652ms. ===================== 405ms. 4406ms. ===================== 348ms. 3790ms. ===================== 363ms. 3482ms. ===================== 288ms. 3431ms. ===================== 965ms. 3173ms. ===================== 295ms. 3029ms. ===================== 271ms. 3714ms. ===================== 278ms. 3017ms. ===================== 285ms. 3828ms. ===================== 271ms. 2907ms. ===================== 285ms. 2845ms. ===================== 258ms. 2884ms. ===================== 275ms. 2829ms. ===================== 276ms. 2871ms. ===================== 256ms. 3638ms. ===================== 285ms. 2797ms. ===================== 295ms. old loader's average: 4284.6ms. new loader's average: 501.4ms. test2: this is with the LargeString/StringList workaround disabled. Old loader ===================== New Loader 11494ms. ===================== 1541ms. 8916ms. ===================== 902ms. 7209ms. ===================== 639ms. 5584ms. ===================== 365ms. 4649ms. ===================== 324ms. 3700ms. ===================== 275ms. 3454ms. ===================== 282ms. 3391ms. ===================== 258ms. 3875ms. ===================== 260ms. 3087ms. ===================== 260ms. 3714ms. ===================== 342ms. 3012ms. ===================== 279ms. 3045ms. ===================== 1109ms. 3012ms. ===================== 242ms. 2873ms. ===================== 244ms. 2863ms. ===================== 247ms. 2880ms. ===================== 257ms. 2842ms. ===================== 276ms. 3667ms. ===================== 255ms. 2881ms. ===================== 259ms. old loader's average: 4305.3ms. new loader's average: 430.8ms. test3: LargeString/StringList workaround & custom mapping disabled. Old loader ===================== New Loader 11813ms. ===================== 1465ms. 7984ms. ===================== 853ms. 6819ms. ===================== 602ms. 6182ms. ===================== 373ms. 4609ms. ===================== 320ms. 3749ms. ===================== 280ms. 3484ms. ===================== 309ms. 3348ms. ===================== 269ms. 3797ms. ===================== 263ms. 3119ms. ===================== 257ms. 3733ms. ===================== 327ms. 3044ms. ===================== 274ms. 2985ms. ===================== 1086ms. 2864ms. ===================== 239ms. 2888ms. ===================== 265ms. 2854ms. ===================== 262ms. 2836ms. ===================== 264ms. 2835ms. ===================== 269ms. 3653ms. ===================== 241ms. 2843ms. ===================== 247ms. old loader's average: 4269.8ms. new loader's average: 423.2ms.
This is very cool... It would be interesting to test this on a big wiki with big objects. Curriki would probably be a very nice target of this patch. Ludovic Caleb James DeLisle wrote:
My loader is able to load every page in my copy of XE and they all pass the .equals( test against the same page loaded by the default loader so I feel that I'm ready to publish some tests.
These are time results (in milliseconds) for loading a page containing 1000 comments. see: http://jira.xwiki.org/jira/browse/XWIKI-2874 My test script runs the tests 30 times interchanging old loader and new. These tests were all the first call to a newly started server, you can see it speed up as the code is jit compiled.
Conclusion: 850% improvment can be expected for loading a page with 1000 comments. StringListProperty and LargeStringProperty being mapped to the same column costs about 100ms for the workaround, disabling this workaround brings it to an even 1000% speed increase. Disabling custom mapping saves a whopping 8ms. This surprised me. My loader is only marginally faster at loading all of the pages in XE, it is best at scaling with lots of objects. This didn't surprise me.
The actual test results are below.
Caleb James DeLisle
test1: no special optimizations.
Old loader ===================== New Loader 11835ms. ===================== 2875ms. 7776ms. ===================== 771ms. 6827ms. ===================== 684ms. 6652ms. ===================== 405ms. 4406ms. ===================== 348ms. 3790ms. ===================== 363ms. 3482ms. ===================== 288ms. 3431ms. ===================== 965ms. 3173ms. ===================== 295ms. 3029ms. ===================== 271ms. 3714ms. ===================== 278ms. 3017ms. ===================== 285ms. 3828ms. ===================== 271ms. 2907ms. ===================== 285ms. 2845ms. ===================== 258ms. 2884ms. ===================== 275ms. 2829ms. ===================== 276ms. 2871ms. ===================== 256ms. 3638ms. ===================== 285ms. 2797ms. ===================== 295ms.
old loader's average: 4284.6ms. new loader's average: 501.4ms.
test2: this is with the LargeString/StringList workaround disabled.
Old loader ===================== New Loader 11494ms. ===================== 1541ms. 8916ms. ===================== 902ms. 7209ms. ===================== 639ms. 5584ms. ===================== 365ms. 4649ms. ===================== 324ms. 3700ms. ===================== 275ms. 3454ms. ===================== 282ms. 3391ms. ===================== 258ms. 3875ms. ===================== 260ms. 3087ms. ===================== 260ms. 3714ms. ===================== 342ms. 3012ms. ===================== 279ms. 3045ms. ===================== 1109ms. 3012ms. ===================== 242ms. 2873ms. ===================== 244ms. 2863ms. ===================== 247ms. 2880ms. ===================== 257ms. 2842ms. ===================== 276ms. 3667ms. ===================== 255ms. 2881ms. ===================== 259ms.
old loader's average: 4305.3ms. new loader's average: 430.8ms.
test3: LargeString/StringList workaround & custom mapping disabled.
Old loader ===================== New Loader 11813ms. ===================== 1465ms. 7984ms. ===================== 853ms. 6819ms. ===================== 602ms. 6182ms. ===================== 373ms. 4609ms. ===================== 320ms. 3749ms. ===================== 280ms. 3484ms. ===================== 309ms. 3348ms. ===================== 269ms. 3797ms. ===================== 263ms. 3119ms. ===================== 257ms. 3733ms. ===================== 327ms. 3044ms. ===================== 274ms. 2985ms. ===================== 1086ms. 2864ms. ===================== 239ms. 2888ms. ===================== 265ms. 2854ms. ===================== 262ms. 2836ms. ===================== 264ms. 2835ms. ===================== 269ms. 3653ms. ===================== 241ms. 2843ms. ===================== 247ms.
old loader's average: 4269.8ms. new loader's average: 423.2ms.
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Ludovic Dubost Blog: http://blog.ludovic.org/ XWiki: http://www.xwiki.com Skype: ldubost GTalk: ldubost
This is very cool... It would be interesting to test this on a big wiki with big objects. Curriki would probably be a very nice target of this patch. Ludovic Caleb James DeLisle wrote:
My loader is able to load every page in my copy of XE and they all pass the .equals( test against the same page loaded by the default loader so I feel that I'm ready to publish some tests.
These are time results (in milliseconds) for loading a page containing 1000 comments. see: http://jira.xwiki.org/jira/browse/XWIKI-2874 My test script runs the tests 30 times interchanging old loader and new. These tests were all the first call to a newly started server, you can see it speed up as the code is jit compiled.
Conclusion: 850% improvment can be expected for loading a page with 1000 comments. StringListProperty and LargeStringProperty being mapped to the same column costs about 100ms for the workaround, disabling this workaround brings it to an even 1000% speed increase. Disabling custom mapping saves a whopping 8ms. This surprised me. My loader is only marginally faster at loading all of the pages in XE, it is best at scaling with lots of objects. This didn't surprise me.
The actual test results are below.
Caleb James DeLisle
test1: no special optimizations.
Old loader ===================== New Loader 11835ms. ===================== 2875ms. 7776ms. ===================== 771ms. 6827ms. ===================== 684ms. 6652ms. ===================== 405ms. 4406ms. ===================== 348ms. 3790ms. ===================== 363ms. 3482ms. ===================== 288ms. 3431ms. ===================== 965ms. 3173ms. ===================== 295ms. 3029ms. ===================== 271ms. 3714ms. ===================== 278ms. 3017ms. ===================== 285ms. 3828ms. ===================== 271ms. 2907ms. ===================== 285ms. 2845ms. ===================== 258ms. 2884ms. ===================== 275ms. 2829ms. ===================== 276ms. 2871ms. ===================== 256ms. 3638ms. ===================== 285ms. 2797ms. ===================== 295ms.
old loader's average: 4284.6ms. new loader's average: 501.4ms.
test2: this is with the LargeString/StringList workaround disabled.
Old loader ===================== New Loader 11494ms. ===================== 1541ms. 8916ms. ===================== 902ms. 7209ms. ===================== 639ms. 5584ms. ===================== 365ms. 4649ms. ===================== 324ms. 3700ms. ===================== 275ms. 3454ms. ===================== 282ms. 3391ms. ===================== 258ms. 3875ms. ===================== 260ms. 3087ms. ===================== 260ms. 3714ms. ===================== 342ms. 3012ms. ===================== 279ms. 3045ms. ===================== 1109ms. 3012ms. ===================== 242ms. 2873ms. ===================== 244ms. 2863ms. ===================== 247ms. 2880ms. ===================== 257ms. 2842ms. ===================== 276ms. 3667ms. ===================== 255ms. 2881ms. ===================== 259ms.
old loader's average: 4305.3ms. new loader's average: 430.8ms.
test3: LargeString/StringList workaround & custom mapping disabled.
Old loader ===================== New Loader 11813ms. ===================== 1465ms. 7984ms. ===================== 853ms. 6819ms. ===================== 602ms. 6182ms. ===================== 373ms. 4609ms. ===================== 320ms. 3749ms. ===================== 280ms. 3484ms. ===================== 309ms. 3348ms. ===================== 269ms. 3797ms. ===================== 263ms. 3119ms. ===================== 257ms. 3733ms. ===================== 327ms. 3044ms. ===================== 274ms. 2985ms. ===================== 1086ms. 2864ms. ===================== 239ms. 2888ms. ===================== 265ms. 2854ms. ===================== 262ms. 2836ms. ===================== 264ms. 2835ms. ===================== 269ms. 3653ms. ===================== 241ms. 2843ms. ===================== 247ms.
old loader's average: 4269.8ms. new loader's average: 423.2ms.
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
-- Ludovic Dubost Blog: http://blog.ludovic.org/ XWiki: http://www.xwiki.com Skype: ldubost GTalk: ldubost
I'm glad to hear it. Getting dynamic custom mapping working has exposed some more issues which I will have to address, but I think it will be production ready in a few days. Caleb James DeLisle Ludovic Dubost wrote:
This is very cool... It would be interesting to test this on a big wiki with big objects. Curriki would probably be a very nice target of this patch.
Ludovic
Caleb James DeLisle wrote:
My loader is able to load every page in my copy of XE and they all pass the .equals( test against the same page loaded by the default loader so I feel that I'm ready to publish some tests.
These are time results (in milliseconds) for loading a page containing 1000 comments. see: http://jira.xwiki.org/jira/browse/XWIKI-2874 My test script runs the tests 30 times interchanging old loader and new. These tests were all the first call to a newly started server, you can see it speed up as the code is jit compiled.
Conclusion: 850% improvment can be expected for loading a page with 1000 comments. StringListProperty and LargeStringProperty being mapped to the same column costs about 100ms for the workaround, disabling this workaround brings it to an even 1000% speed increase. Disabling custom mapping saves a whopping 8ms. This surprised me. My loader is only marginally faster at loading all of the pages in XE, it is best at scaling with lots of objects. This didn't surprise me.
The actual test results are below.
Caleb James DeLisle
test1: no special optimizations.
Old loader ===================== New Loader 11835ms. ===================== 2875ms. 7776ms. ===================== 771ms. 6827ms. ===================== 684ms. 6652ms. ===================== 405ms. 4406ms. ===================== 348ms. 3790ms. ===================== 363ms. 3482ms. ===================== 288ms. 3431ms. ===================== 965ms. 3173ms. ===================== 295ms. 3029ms. ===================== 271ms. 3714ms. ===================== 278ms. 3017ms. ===================== 285ms. 3828ms. ===================== 271ms. 2907ms. ===================== 285ms. 2845ms. ===================== 258ms. 2884ms. ===================== 275ms. 2829ms. ===================== 276ms. 2871ms. ===================== 256ms. 3638ms. ===================== 285ms. 2797ms. ===================== 295ms.
old loader's average: 4284.6ms. new loader's average: 501.4ms.
test2: this is with the LargeString/StringList workaround disabled.
Old loader ===================== New Loader 11494ms. ===================== 1541ms. 8916ms. ===================== 902ms. 7209ms. ===================== 639ms. 5584ms. ===================== 365ms. 4649ms. ===================== 324ms. 3700ms. ===================== 275ms. 3454ms. ===================== 282ms. 3391ms. ===================== 258ms. 3875ms. ===================== 260ms. 3087ms. ===================== 260ms. 3714ms. ===================== 342ms. 3012ms. ===================== 279ms. 3045ms. ===================== 1109ms. 3012ms. ===================== 242ms. 2873ms. ===================== 244ms. 2863ms. ===================== 247ms. 2880ms. ===================== 257ms. 2842ms. ===================== 276ms. 3667ms. ===================== 255ms. 2881ms. ===================== 259ms.
old loader's average: 4305.3ms. new loader's average: 430.8ms.
test3: LargeString/StringList workaround & custom mapping disabled.
Old loader ===================== New Loader 11813ms. ===================== 1465ms. 7984ms. ===================== 853ms. 6819ms. ===================== 602ms. 6182ms. ===================== 373ms. 4609ms. ===================== 320ms. 3749ms. ===================== 280ms. 3484ms. ===================== 309ms. 3348ms. ===================== 269ms. 3797ms. ===================== 263ms. 3119ms. ===================== 257ms. 3733ms. ===================== 327ms. 3044ms. ===================== 274ms. 2985ms. ===================== 1086ms. 2864ms. ===================== 239ms. 2888ms. ===================== 265ms. 2854ms. ===================== 262ms. 2836ms. ===================== 264ms. 2835ms. ===================== 269ms. 3653ms. ===================== 241ms. 2843ms. ===================== 247ms.
old loader's average: 4269.8ms. new loader's average: 423.2ms.
_______________________________________________ devs mailing list [email protected] http://lists.xwiki.org/mailman/listinfo/devs
participants (2)
-
Caleb James DeLisle -
Ludovic Dubost