| Summary: | Performance of checkout | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Product: | [Technology] JGit | Reporter: | Mathias Kinzler <mathias.kinzler> | ||||||
| Component: | JGit | Assignee: | Project Inbox <jgit.core-inbox> | ||||||
| Status: | CLOSED WORKSFORME | QA Contact: | |||||||
| Severity: | major | ||||||||
| Priority: | P3 | ||||||||
| Version: | 0.9.0 | ||||||||
| Target Milestone: | 0.9.0 | ||||||||
| Hardware: | PC | ||||||||
| OS: | All | ||||||||
| Whiteboard: | |||||||||
| Attachments: |
|
||||||||
|
Description
Mathias Kinzler
I diggend into this by adding some debug output. It turns out that DeltaStram.skip() is horribly inefficient. I attach patch files (one in the generic patch format, one in git patch format) which add the debug output. The typical output looks like: Read during 2 skips: 244616 Read outside skips: 512 Read during 3 skips: 489684 Read outside skips: 512 Read during 3 skips: 2415688 Read outside skips: 512 Read during 1 skips: 274937 Read outside skips: 512 Read during 2 skips: 489684 Read outside skips: 512 Read during 2 skips: 2122925 Read outside skips: 512 Read during 2 skips: 450521 Read outside skips: 512 Read during 1 skips: 240251 Read outside skips: 512 (only a very small number of DeltaStream instances shown). The Inflater does around 400 to 500 times more work during skip compared to the actual read work. I didn't quite understand how this happens, but it looks like some weird kind of recursion. Created attachment 175582 [details]
Standard patch format with debug output
Created attachment 175583 [details]
Git patch format with debug output
Does http://egit.eclipse.org/r/#change,1441 fix this? Does not seem to be reproducible anymore. Not sure if http://egit.eclipse.org/r/#change,1441 fixed this (the clone went through without it), but I could clone this repository without problems. |