[SERVER-9721] Performance regression in Windows build Created: 17/May/13 Updated: 11/Jul/16 Resolved: 22/May/13 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Performance |
| Affects Version/s: | 2.4.3 |
| Fix Version/s: | 2.4.4, 2.5.1 |
| Type: | Bug | Priority: | Critical - P2 |
| Reporter: | Tad Marshall | Assignee: | Eric Milkie |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Windows |
||
| Attachments: |
|
||||||||||||||||
| Issue Links: |
|
||||||||||||||||
| Operating System: | Windows | ||||||||||||||||
| Participants: | |||||||||||||||||
| Description |
|
Performance of the Windows version in a simple getmore loop is much worse in version 2.4.3 than in version 2.2.4. Here are some JavaScript functions that I used for this testing:
The created collection's documents contain just an _id (ObjectID) and an array. The purpose of the array is to bulk up the documents and slow down the scanning code. These are the statistics on the test collection:
The "First pass" and "Second pass" columns are from running "time(func)" twice against a single run of the server. "First hinted" and "Second hinted" are the same thing using "time(func2)". In all tests, I restarted the server between the "func" and "func2" tests and I used the current 2.5.0-pre- version of the mongo shell for all tests, leaving it running between tests, to reduce the number of variables. The data file was generated once per platform and then reused for later tests. The disk is a Samsung 840 Pro SSD, which is quite fast. The only thing that changed from one test to the next was what version of mongod was running. Here are the results:
The change in timing between version 2.2.4 and version 2.5.0-pre- is not due to a change in the number of yields, so something else is going on. 2.5.0-pre-:
2.2.4:
With very similar numbers of yields (1877 vs. 1884), version 2.5.0-pre- took 1878 milliseconds while version 2.2.4 took 8 milliseconds. |
| Comments |
| Comment by Githook User [ 05/Feb/15 ] | |||
|
Author: {u'username': u'benety', u'name': u'Benety Goh', u'email': u'benety@mongodb.com'}Message: This test was originally introduced in | |||
| Comment by auto [ 23/May/13 ] | |||
|
Author: {u'username': u'tadmarshall', u'name': u'Tad Marshall', u'email': u'tad@10gen.com'}Message: | |||
| Comment by auto [ 22/May/13 ] | |||
|
Author: {u'username': u'milkie', u'name': u'Eric Milkie', u'email': u'milkie@10gen.com'}Message: | |||
| Comment by auto [ 22/May/13 ] | |||
|
Author: {u'username': u'milkie', u'name': u'Eric Milkie', u'email': u'milkie@10gen.com'}Message: | |||
| Comment by Tad Marshall [ 18/May/13 ] | |||
|
The regression was introduced in commit d901ee1c28cb3c13fdfe7124b44e33f23aa82357 . I verified that reverting this change restores performance to approximately that of version 2.2.4. Running getmore_performance.js:
| |||
| Comment by Tad Marshall [ 17/May/13 ] | |||
|
First cut at jstest to test for performance regression. |