pub const fn root_node_id(namespace: &str) -> NodeIdExpand description
Return the root identity for one isolated package namespace. 返回某个隔离包命名空间的根身份。
Examples found in repository?
examples/scale_audit.rs (line 114)
93fn main() {
94 let sizes = std::env::args()
95 .skip(1)
96 .map(|value| value.parse::<usize>().expect("size must be an integer"))
97 .collect::<Vec<_>>();
98 let sizes = if sizes.is_empty() {
99 vec![10_000, 100_000]
100 } else {
101 sizes
102 };
103 println!(
104 "nodes\tregister_ms\tregister_budget_ms\tindex_ms\tindex_budget_ms\tentries\tpages\tstatic_face_bytes"
105 );
106 // 40 µs and 20 µs per node: roughly eight times the 5.2 µs and 2.6 µs measured
107 // for 100 000 nodes when this budget was added.
108 // 每节点 40 µs 与 20 µs:约等于加入本预算时 100 000 个节点实测 5.2 µs 与 2.6 µs 的八倍。
109 let register_ceiling = ceiling("NICHLINK_SCALE_REGISTER_US", 40);
110 let index_ceiling = ceiling("NICHLINK_SCALE_INDEX_US", 20);
111 for size in sizes {
112 let namespace = format!("scale-{size}");
113 let root = Registry::root_for_namespace(FrameworkId::new("nichlink.scale"), &namespace);
114 let parent = root_node_id(&namespace);
115 let submissions = (0..size)
116 .map(|index| snapshot(&namespace, index, parent))
117 .collect::<Vec<_>>();
118 let mut registry = root;
119 let register_start = Instant::now();
120 registry
121 .register_snapshot_batch(submissions)
122 .expect("generated scale batch must register");
123 let register_ms = register_start.elapsed().as_millis();
124 let index_start = Instant::now();
125 let index = registry.index();
126 let index_ms = index_start.elapsed().as_millis();
127 let stats = registry.storage_stats();
128 let register_budget_ms = register_ceiling * size as u128 / 1000;
129 let index_budget_ms = index_ceiling * size as u128 / 1000;
130 println!(
131 "{size}\t{register_ms}\t{register_budget_ms}\t{index_ms}\t{index_budget_ms}\t{}\t{}\t{}",
132 index.len(),
133 stats.pages,
134 size * std::mem::size_of::<nichlink::StaticFace>()
135 );
136 assert!(
137 register_ms <= register_budget_ms,
138 "registering {size} nodes took {register_ms} ms, over the {register_budget_ms} ms budget ({register_ceiling} µs per node); raise NICHLINK_SCALE_REGISTER_US if this machine is simply slower, and update docs/performance-baseline.md if the baseline moved"
139 );
140 assert!(
141 index_ms <= index_budget_ms,
142 "indexing {size} nodes took {index_ms} ms, over the {index_budget_ms} ms budget ({index_ceiling} µs per node); raise NICHLINK_SCALE_INDEX_US if this machine is simply slower, and update docs/performance-baseline.md if the baseline moved"
143 );
144 let extra = snapshot(&namespace, size, parent);
145 registry
146 .register_snapshot_batch([extra])
147 .expect("incremental transaction must register");
148 assert_eq!(registry.index().len(), size + 2);
149 }
150}