PackWriter: Combine small reuse batches together
If the total number of objects to look for reuse on is under 4096 this is really close to a reasonable batch size for the DHT storage system to lookup at once. Combine all of the objects into a single temporary list, perform reuse, and then prune the main lists if any duplicate objects were detected from a selected CachedPack. The intention here is to try and avoid 4 tiny sequential lookups on the storage system when the time to wait for each of those to finish is higher than the CPU time required to build (and later GC) this temporary list. Change-Id: I528daf9d2f7744dc4a6281750c2d61d8f9da9f3a Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
parent
0be24ebf33
commit
36a38adf71
|
@ -722,10 +722,30 @@ private void searchForReuse(ProgressMonitor monitor) throws IOException {
|
|||
|
||||
long start = System.currentTimeMillis();
|
||||
monitor.beginTask(JGitText.get().searchForReuse, cnt);
|
||||
|
||||
if (cnt <= 4096) {
|
||||
// For small object counts, do everything as one list.
|
||||
BlockList<ObjectToPack> tmp = new BlockList<ObjectToPack>(cnt);
|
||||
tmp.addAll(objectsLists[Constants.OBJ_COMMIT]);
|
||||
tmp.addAll(objectsLists[Constants.OBJ_TREE]);
|
||||
tmp.addAll(objectsLists[Constants.OBJ_BLOB]);
|
||||
tmp.addAll(objectsLists[Constants.OBJ_TAG]);
|
||||
searchForReuse(monitor, tmp);
|
||||
if (pruneCurrentObjectList) {
|
||||
// If the list was pruned, we need to re-prune the main lists.
|
||||
pruneEdgesFromObjectList(objectsLists[Constants.OBJ_COMMIT]);
|
||||
pruneEdgesFromObjectList(objectsLists[Constants.OBJ_TREE]);
|
||||
pruneEdgesFromObjectList(objectsLists[Constants.OBJ_BLOB]);
|
||||
pruneEdgesFromObjectList(objectsLists[Constants.OBJ_TAG]);
|
||||
}
|
||||
|
||||
} else {
|
||||
searchForReuse(monitor, objectsLists[Constants.OBJ_COMMIT]);
|
||||
searchForReuse(monitor, objectsLists[Constants.OBJ_TREE]);
|
||||
searchForReuse(monitor, objectsLists[Constants.OBJ_BLOB]);
|
||||
searchForReuse(monitor, objectsLists[Constants.OBJ_TAG]);
|
||||
}
|
||||
|
||||
monitor.endTask();
|
||||
stats.timeSearchingForReuse = System.currentTimeMillis() - start;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue