Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
More comment, release notes
  • Loading branch information
Peter Van Gemmeren committed Sep 21, 2016
commit 37cc4467d38d5ddab989f027ae978d85d11bf27e
3 changes: 3 additions & 0 deletions README/ReleaseNotes/v608/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ The following people have contributed to this new version:
Paul Russo, Fermilab,\
Enric Tejedor Saavedra, CERN/SFT,\
Liza Sakellari, CERN/SFT,\
Alex Saperstein, ANL,\
Manuel Tobias Schiller, CERN/LHCb,\
David Smith, CERN/IT,\
Matevz Tadel, UCSD/CMS, Eve,\
Peter van Gemmeren, ANL, ATLAS,\
Vassil Vassilev, Fermilab/CMS,\
Wouter Verkerke, NIKHEF/Atlas, RooFit

Expand Down Expand Up @@ -128,6 +130,7 @@ Add a new mode for `TClass::SetCanSplit` (2) which indicates that this class and
* The with `goff` option one can use as many variables as needed. There no more
limitation, like with the options `para`and `candle`.
* Fix detection of errors that appears in nested TTreeFormula [ROOT-8218]
* Better basket size optimization by taking into account meta date and rounding up to next 512 bytes, ensuring a complete cluster fits into a single basket.

### Fast Cloning

Expand Down
6 changes: 6 additions & 0 deletions tree/tree/src/TTree.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -6585,6 +6585,12 @@ void TTree::OptimizeBaskets(ULong64_t maxMemory, Float_t minComp, Option_t *opti
newBsize = newBsize + (branch->GetBasket(0)->GetNevBuf() * sizeof(Int_t) * 2); // make room for meta data
}
// rounds up, increases basket size to ensure all entries fit into single basket as intended
// We used ATLAS fully-split xAOD for testing, which is a rather unbalanced TTree, 10K branches,
// with 8K having baskets smaller than 512 bytes. To achieve good I/O performance ATLAS uses auto-flush 100,
// resulting in the smallest baskets being ~300-400 bytes, so this change increases their memory by about 8k*150B =~ 1MB,
// at the same time it significantly reduces the number of total baskets because it ensures that all 100 entries can be
// stored in a single basket (the old optimization tended to make baskets too small). In a toy example with fixed sized
// structures we found a factor of 2 fewer baskets needed in the new scheme.
newBsize = newBsize - newBsize%512 + 512;
}
if (newBsize < sizeOfOneEntry) newBsize = sizeOfOneEntry;
Expand Down