Skip to main content

root_node_id

Function root_node_id 

Source
pub const fn root_node_id(namespace: &str) -> NodeId
Expand 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}