Skip to content

Commit 68650ca

Browse files
committed
Auto merge of #58085 - wesleywiser:profiler_2, r=wesleywiser
Implement more detailed self profiling Timing data and cache hits/misses are now recorded at the query level. This allows us to show detailed per query information such as total time for each query. To see detailed query information in the summary pass the `-Z verbose` flag. For example: ``` rustc -Z self-profile -Z verbose hello_world.rs ``` results in something like: ```md Self profiling results: | Phase | Time (ms) | Time (%) | Queries | Hits (%) | ----------------------------------------- | -------------- | -------- | -------------- | -------- | Other | 177 | 54.97 | 8094 | 45.47 | - {time spent not running queries} | 113 | 35.09 | 0 | 0.00 | - const_eval | 16 | 4.97 | 26 | 11.54 | - type_of | 9 | 2.80 | 627 | 27.75 | - const_eval_raw | 8 | 2.48 | 22 | 0.00 | - adt_def | 7 | 2.17 | 381 | 11.55 | - visible_parent_map | 7 | 2.17 | 99 | 98.99 | - item_attrs | 6 | 1.86 | 698 | 50.14 | - item_children | 5 | 1.55 | 2815 | 0.00 | - adt_dtorck_constraint | 4 | 1.24 | 2 | 0.00 | - adt_destructor | 2 | 0.62 | 15 | 86.67 | TypeChecking | 53 | 16.46 | 2834 | 79.89 | - trait_impls_of | 9 | 2.80 | 65 | 86.15 | - evaluate_obligation | 7 | 2.17 | 80 | 2.50 | - const_is_rvalue_promotable_to_static | 6 | 1.86 | 1 | 0.00 | - is_copy_raw | 6 | 1.86 | 29 | 58.62 | - rvalue_promotable_map | 6 | 1.86 | 2 | 50.00 | - {time spent not running queries} | 6 | 1.86 | 0 | 0.00 | - typeck_item_bodies | 5 | 1.55 | 1 | 0.00 | - typeck_tables_of | 5 | 1.55 | 19 | 94.74 | - dropck_outlives | 2 | 0.62 | 1 | 0.00 | - layout_raw | 1 | 0.31 | 668 | 87.87 | Linking | 48 | 14.91 | 43 | 46.51 | - {time spent not running queries} | 48 | 14.91 | 0 | 0.00 | Codegen | 29 | 9.01 | 420 | 61.90 | - {time spent not running queries} | 16 | 4.97 | 0 | 0.00 | - collect_and_partition_mono_items | 11 | 3.42 | 13 | 92.31 | - mir_const | 1 | 0.31 | 1 | 0.00 | - mir_validated | 1 | 0.31 | 3 | 66.67 | Expansion | 14 | 4.35 | 0 | 0.00 | - {time spent not running queries} | 14 | 4.35 | 0 | 0.00 | BorrowChecking | 1 | 0.31 | 12 | 41.67 | - borrowck | 1 | 0.31 | 2 | 50.00 | Parsing | 0 | 0.00 | 0 | 0.00 Optimization level: No Incremental: off ``` <details> <summary>Rendered</summary> Self profiling results: | Phase | Time (ms) | Time (%) | Queries | Hits (%) | ----------------------------------------- | -------------- | -------- | -------------- | -------- | **Other** | **177** | **54.97** | **8094** | **45.47** | - {time spent not running queries} | 113 | 35.09 | 0 | 0.00 | - const_eval | 16 | 4.97 | 26 | 11.54 | - type_of | 9 | 2.80 | 627 | 27.75 | - const_eval_raw | 8 | 2.48 | 22 | 0.00 | - adt_def | 7 | 2.17 | 381 | 11.55 | - visible_parent_map | 7 | 2.17 | 99 | 98.99 | - item_attrs | 6 | 1.86 | 698 | 50.14 | - item_children | 5 | 1.55 | 2815 | 0.00 | - adt_dtorck_constraint | 4 | 1.24 | 2 | 0.00 | - adt_destructor | 2 | 0.62 | 15 | 86.67 | TypeChecking | 53 | 16.46 | 2834 | 79.89 | - trait_impls_of | 9 | 2.80 | 65 | 86.15 | - evaluate_obligation | 7 | 2.17 | 80 | 2.50 | - const_is_rvalue_promotable_to_static | 6 | 1.86 | 1 | 0.00 | - is_copy_raw | 6 | 1.86 | 29 | 58.62 | - rvalue_promotable_map | 6 | 1.86 | 2 | 50.00 | - {time spent not running queries} | 6 | 1.86 | 0 | 0.00 | - typeck_item_bodies | 5 | 1.55 | 1 | 0.00 | - typeck_tables_of | 5 | 1.55 | 19 | 94.74 | - dropck_outlives | 2 | 0.62 | 1 | 0.00 | - layout_raw | 1 | 0.31 | 668 | 87.87 | Linking | 48 | 14.91 | 43 | 46.51 | - {time spent not running queries} | 48 | 14.91 | 0 | 0.00 | Codegen | 29 | 9.01 | 420 | 61.90 | - {time spent not running queries} | 16 | 4.97 | 0 | 0.00 | - collect_and_partition_mono_items | 11 | 3.42 | 13 | 92.31 | - mir_const | 1 | 0.31 | 1 | 0.00 | - mir_validated | 1 | 0.31 | 3 | 66.67 | Expansion | 14 | 4.35 | 0 | 0.00 | - {time spent not running queries} | 14 | 4.35 | 0 | 0.00 | BorrowChecking | 1 | 0.31 | 12 | 41.67 | - borrowck | 1 | 0.31 | 2 | 50.00 | Parsing | 0 | 0.00 | 0 | 0.00 Optimization level: No Incremental: off </details> cc @nikomatsakis @michaelwoerister @Zoxc Fixes #54141
2 parents de111e6 + 584081a commit 68650ca

File tree

2 files changed

+363
-182
lines changed

2 files changed

+363
-182
lines changed

src/librustc/ty/query/plumbing.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ impl<'a, 'tcx, Q: QueryDescription<'tcx>> JobOwner<'a, 'tcx, Q> {
113113
let mut lock = cache.borrow_mut();
114114
if let Some(value) = lock.results.get(key) {
115115
profq_msg!(tcx, ProfileQueriesMsg::CacheHit);
116-
tcx.sess.profiler(|p| p.record_query_hit(Q::CATEGORY));
116+
tcx.sess.profiler(|p| p.record_query_hit(Q::NAME, Q::CATEGORY));
117117
let result = Ok((value.value.clone(), value.index));
118118
#[cfg(debug_assertions)]
119119
{
@@ -375,7 +375,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
375375

376376
if dep_node.kind.is_anon() {
377377
profq_msg!(self, ProfileQueriesMsg::ProviderBegin);
378-
self.sess.profiler(|p| p.start_activity(Q::CATEGORY));
378+
self.sess.profiler(|p| p.start_query(Q::NAME, Q::CATEGORY));
379379

380380
let ((result, dep_node_index), diagnostics) = with_diagnostics(|diagnostics| {
381381
job.start(self, diagnostics, |tcx| {
@@ -385,7 +385,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
385385
})
386386
});
387387

388-
self.sess.profiler(|p| p.end_activity(Q::CATEGORY));
388+
self.sess.profiler(|p| p.end_query(Q::NAME, Q::CATEGORY));
389389
profq_msg!(self, ProfileQueriesMsg::ProviderEnd);
390390

391391
self.dep_graph.read_index(dep_node_index);
@@ -452,14 +452,14 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
452452

453453
let result = if let Some(result) = result {
454454
profq_msg!(self, ProfileQueriesMsg::CacheHit);
455-
self.sess.profiler(|p| p.record_query_hit(Q::CATEGORY));
455+
self.sess.profiler(|p| p.record_query_hit(Q::NAME, Q::CATEGORY));
456456

457457
result
458458
} else {
459459
// We could not load a result from the on-disk cache, so
460460
// recompute.
461461

462-
self.sess.profiler(|p| p.start_activity(Q::CATEGORY));
462+
self.sess.profiler(|p| p.start_query(Q::NAME, Q::CATEGORY));
463463

464464
// The diagnostics for this query have already been
465465
// promoted to the current session during
@@ -472,7 +472,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
472472
})
473473
});
474474

475-
self.sess.profiler(|p| p.end_activity(Q::CATEGORY));
475+
self.sess.profiler(|p| p.end_query(Q::NAME, Q::CATEGORY));
476476
result
477477
};
478478

@@ -537,7 +537,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
537537
key, dep_node);
538538

539539
profq_msg!(self, ProfileQueriesMsg::ProviderBegin);
540-
self.sess.profiler(|p| p.start_activity(Q::CATEGORY));
540+
self.sess.profiler(|p| p.start_query(Q::NAME, Q::CATEGORY));
541541

542542
let ((result, dep_node_index), diagnostics) = with_diagnostics(|diagnostics| {
543543
job.start(self, diagnostics, |tcx| {
@@ -557,7 +557,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
557557
})
558558
});
559559

560-
self.sess.profiler(|p| p.end_activity(Q::CATEGORY));
560+
self.sess.profiler(|p| p.end_query(Q::NAME, Q::CATEGORY));
561561
profq_msg!(self, ProfileQueriesMsg::ProviderEnd);
562562

563563
if unlikely!(self.sess.opts.debugging_opts.query_dep_graph) {
@@ -600,7 +600,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
600600
let _ = self.get_query::<Q>(DUMMY_SP, key);
601601
} else {
602602
profq_msg!(self, ProfileQueriesMsg::CacheHit);
603-
self.sess.profiler(|p| p.record_query_hit(Q::CATEGORY));
603+
self.sess.profiler(|p| p.record_query_hit(Q::NAME, Q::CATEGORY));
604604
}
605605
}
606606

@@ -739,6 +739,7 @@ macro_rules! define_queries_inner {
739739
sess.profiler(|p| {
740740
$(
741741
p.record_computed_queries(
742+
<queries::$name<'_> as QueryConfig<'_>>::NAME,
742743
<queries::$name<'_> as QueryConfig<'_>>::CATEGORY,
743744
self.$name.lock().results.len()
744745
);

0 commit comments

Comments
 (0)