Skip to content

Commit ec64d29

Browse files
committed
[ntuple] Distinguish between physical and aliased pages
1 parent 7ecc797 commit ec64d29

File tree

2 files changed

+37
-23
lines changed

2 files changed

+37
-23
lines changed

tree/ntuple/src/RNTupleDescriptorFmt.cxx

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ namespace {
2525

2626
struct ClusterInfo {
2727
std::uint64_t fFirstEntry = 0;
28-
std::uint32_t fNPages = 0;
28+
std::uint64_t fNPhysicalPages = 0;
29+
std::uint64_t fNAliasedPages = 0;
2930
std::uint32_t fNEntries = 0;
3031
std::uint32_t fNBytesOnStorage = 0;
3132
std::uint32_t fNBytesInMemory = 0;
@@ -40,7 +41,8 @@ struct ColumnInfo {
4041
ROOT::DescriptorId_t fLogicalColumnId = 0;
4142
ROOT::DescriptorId_t fFieldId = 0;
4243
std::uint64_t fNElements = 0;
43-
std::uint64_t fNPages = 0;
44+
std::uint64_t fNPhysicalPages = 0;
45+
std::uint64_t fNAliasedPages = 0;
4446
std::uint64_t fNBytesOnStorage = 0;
4547
std::uint32_t fElementSize = 0;
4648
std::uint32_t fColumnIndex = 0;
@@ -92,7 +94,8 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
9294

9395
std::uint64_t nBytesOnStorage = 0;
9496
std::uint64_t nBytesInMemory = 0;
95-
std::uint64_t nPages = 0;
97+
std::uint64_t nPhysicalPages = 0;
98+
std::uint64_t nAliasedPages = 0;
9699
std::unordered_set<std::uint64_t> seenPages{};
97100
int compression = -1;
98101
for (const auto &column : fColumnDescriptors) {
@@ -136,10 +139,14 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
136139
nBytesInMemory += page.GetNElements() * elementSize;
137140
clusters[idx].fNBytesOnStorage += page.GetLocator().GetNBytesOnStorage();
138141
clusters[idx].fNBytesInMemory += page.GetNElements() * elementSize;
139-
++clusters[idx].fNPages;
142+
++clusters[idx].fNPhysicalPages;
140143
info.fNBytesOnStorage += page.GetLocator().GetNBytesOnStorage();
141-
++info.fNPages;
142-
++nPages;
144+
++info.fNPhysicalPages;
145+
++nPhysicalPages;
146+
} else {
147+
++clusters[idx].fNAliasedPages;
148+
++info.fNAliasedPages;
149+
++nAliasedPages;
143150
}
144151
}
145152
}
@@ -155,7 +162,8 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
155162
output << " # Fields: " << GetNFields() << "\n";
156163
output << " # Columns: " << GetNPhysicalColumns() << "\n";
157164
output << " # Alias Columns: " << GetNLogicalColumns() - GetNPhysicalColumns() << "\n";
158-
output << " # Pages: " << nPages << "\n";
165+
output << " # Physical Pages: " << nPhysicalPages << "\n";
166+
output << " # Aliased Pages: " << nAliasedPages << "\n";
159167
output << " # Clusters: " << GetNClusters() << "\n";
160168
output << " Size on storage: " << nBytesOnStorage << " B" << "\n";
161169
output << " Compression rate: " << std::fixed << std::setprecision(2)
@@ -172,12 +180,13 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
172180

173181
std::sort(clusters.begin(), clusters.end());
174182
for (unsigned int i = 0; i < clusters.size(); ++i) {
175-
output << " # " << std::setw(5) << i << " Entry range: [" << clusters[i].fFirstEntry << ".."
183+
output << " # " << std::setw(5) << i << " Entry range: [" << clusters[i].fFirstEntry << ".."
176184
<< clusters[i].fFirstEntry + clusters[i].fNEntries - 1 << "] -- " << clusters[i].fNEntries << "\n";
177-
output << " " << " # Pages: " << clusters[i].fNPages << "\n";
178-
output << " " << " Size on storage: " << clusters[i].fNBytesOnStorage << " B\n";
179-
output << " " << " Compression: " << std::fixed << std::setprecision(2);
180-
if (clusters[i].fNPages > 0)
185+
output << " " << " # Physical Pages: " << clusters[i].fNPhysicalPages << "\n";
186+
output << " " << " # Aliased Pages: " << clusters[i].fNAliasedPages << "\n";
187+
output << " " << " Size on storage: " << clusters[i].fNBytesOnStorage << " B\n";
188+
output << " " << " Compression: " << std::fixed << std::setprecision(2);
189+
if (clusters[i].fNPhysicalPages > 0)
181190
output << float(clusters[i].fNBytesInMemory) / float(float(clusters[i].fNBytesOnStorage)) << std::endl;
182191
else
183192
output << "N/A" << std::endl;
@@ -192,8 +201,8 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
192201
}
193202
std::sort(columns.begin(), columns.end());
194203
for (const auto &col : columns) {
195-
auto avgPageSize = (col.fNPages == 0) ? 0 : (col.fNBytesOnStorage / col.fNPages);
196-
auto avgElementsPerPage = (col.fNPages == 0) ? 0 : (col.fNElements / col.fNPages);
204+
auto avgPageSize = (col.fNPhysicalPages == 0) ? 0 : (col.fNBytesOnStorage / col.fNPhysicalPages);
205+
auto avgElementsPerPage = (col.fNPhysicalPages == 0) ? 0 : (col.fNElements / col.fNPhysicalPages);
197206
std::string nameAndType = std::string(" ") + col.fFieldName + " [#" + std::to_string(col.fColumnIndex);
198207
if (col.fRepresentationIndex > 0)
199208
nameAndType += " / R." + std::to_string(col.fRepresentationIndex);
@@ -205,12 +214,13 @@ void ROOT::RNTupleDescriptor::PrintInfo(std::ostream &output) const
205214
if (!col.fFieldDescription.empty())
206215
output << " Description: " << col.fFieldDescription << "\n";
207216
output << " # Elements: " << col.fNElements << "\n";
208-
output << " # Pages: " << col.fNPages << "\n";
217+
output << " # Physical Pages: " << col.fNPhysicalPages << "\n";
218+
output << " # Aliased Pages: " << col.fNAliasedPages << "\n";
209219
output << " Avg elements / page: " << avgElementsPerPage << "\n";
210220
output << " Avg page size: " << avgPageSize << " B\n";
211221
output << " Size on storage: " << col.fNBytesOnStorage << " B\n";
212222
output << " Compression: " << std::fixed << std::setprecision(2);
213-
if (col.fNPages > 0)
223+
if (col.fNPhysicalPages > 0)
214224
output << float(col.fElementSize * col.fNElements) / float(col.fNBytesOnStorage) << std::endl;
215225
else
216226
output << "N/A" << std::endl;

tree/ntuple/test/ntuple_print.cxx

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ TEST(RNtuplePrint, FullString)
4040
" # Fields: 4\n"
4141
" # Columns: 2\n"
4242
" # Alias Columns: 1\n"
43-
" # Pages: 1\n"
43+
" # Physical Pages: 1\n"
44+
" # Aliased Pages: 1\n"
4445
" # Clusters: 1\n"
4546
" Size on storage: 4 B\n"
4647
" Compression rate: 1.00\n"
@@ -50,24 +51,27 @@ TEST(RNtuplePrint, FullString)
5051
"------------------------------------------------------------\n"
5152
"CLUSTER DETAILS\n"
5253
"------------------------------------------------------------\n"
53-
" # 0 Entry range: .0..0. -- 1\n"
54-
" # Pages: 1\n"
55-
" Size on storage: 4 B\n"
56-
" Compression: 1.00\n"
54+
" # 0 Entry range: .0..0. -- 1\n"
55+
" # Physical Pages: 1\n"
56+
" # Aliased Pages: 1\n"
57+
" Size on storage: 4 B\n"
58+
" Compression: 1.00\n"
5759
"------------------------------------------------------------\n"
5860
"COLUMN DETAILS\n"
5961
"------------------------------------------------------------\n"
6062
" px .#0. -- Real32 .id:0.\n"
6163
" # Elements: 1\n"
62-
" # Pages: 0\n"
64+
" # Physical Pages: 0\n"
65+
" # Aliased Pages: 1\n"
6366
" Avg elements / page: 0\n"
6467
" Avg page size: 0 B\n"
6568
" Size on storage: 0 B\n"
6669
" Compression: N/A\n"
6770
"............................................................\n"
6871
" py .#0. -- Real32 .id:1.\n"
6972
" # Elements: 1\n"
70-
" # Pages: 1\n"
73+
" # Physical Pages: 1\n"
74+
" # Aliased Pages: 0\n"
7175
" Avg elements / page: 1\n"
7276
" Avg page size: 4 B\n"
7377
" Size on storage: 4 B\n"

0 commit comments

Comments
 (0)