pub struct FrameworkId(pub &'static str);Expand description
A stable host identity. Package names are not enough when several frameworks share one process. 稳定的宿主身份。同一进程存在多个框架时,crate 名称并不足以区分目标。
Tuple Fields§
§0: &'static strImplementations§
Source§impl FrameworkId
impl FrameworkId
Sourcepub const fn new(value: &'static str) -> FrameworkId
pub const fn new(value: &'static str) -> FrameworkId
Wrap a host identity; the text is used verbatim for equality and display. 包装宿主身份;该文本原样用于相等比较与展示。
Examples found in repository?
examples/scale_audit.rs (line 113)
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}Trait Implementations§
Source§impl Clone for FrameworkId
impl Clone for FrameworkId
Source§fn clone(&self) -> FrameworkId
fn clone(&self) -> FrameworkId
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreimpl Copy for FrameworkId
Source§impl Debug for FrameworkId
impl Debug for FrameworkId
Source§impl Display for FrameworkId
impl Display for FrameworkId
impl Eq for FrameworkId
Source§impl Hash for FrameworkId
impl Hash for FrameworkId
Source§impl PartialEq for FrameworkId
impl PartialEq for FrameworkId
impl StructuralPartialEq for FrameworkId
Auto Trait Implementations§
impl Freeze for FrameworkId
impl RefUnwindSafe for FrameworkId
impl Send for FrameworkId
impl Sync for FrameworkId
impl Unpin for FrameworkId
impl UnsafeUnpin for FrameworkId
impl UnwindSafe for FrameworkId
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more