whitepaper: 352/169 — wave4 MEDIUM (hadoop/hbase/nova/neutron/openstack) + fix odl-0002 dup
This commit is contained in:
parent
9934133dcf
commit
835ae73b0f
82 changed files with 5931 additions and 6 deletions
66
defects/wasmtime/patch/wasmtime-0001.patch
Normal file
66
defects/wasmtime/patch/wasmtime-0001.patch
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
--- a/crates/wasmtime/src/runtime/component/concurrent.rs
|
||||
+++ b/crates/wasmtime/src/runtime/component/concurrent.rs
|
||||
@@ -4872,7 +4872,10 @@ struct WorkQueue {
|
||||
/// High-priority work items to be handled before low-priority items.
|
||||
/// These items are drained and re-queued at the top of each scheduling
|
||||
/// loop iteration.
|
||||
- high_priority: Vec<WorkItem>,
|
||||
+ /// Keyed by (instance, thread) for O(1) promote_thread_work_item lookup.
|
||||
+ high_priority_by_thread: HashMap<QualifiedThreadId, VecDeque<WorkItem>>,
|
||||
+ /// High-priority items without a specific thread target (WorkerFunction etc.)
|
||||
+ high_priority_general: Vec<WorkItem>,
|
||||
/// Low-priority work items. These are only handled after all high-priority
|
||||
/// items have been processed.
|
||||
low_priority: VecDeque<WorkItem>,
|
||||
@@ -4908,7 +4911,8 @@ impl WorkQueue {
|
||||
fn new() -> Self {
|
||||
Self {
|
||||
- high_priority: Vec::new(),
|
||||
+ high_priority_by_thread: HashMap::new(),
|
||||
+ high_priority_general: Vec::new(),
|
||||
low_priority: VecDeque::new(),
|
||||
}
|
||||
}
|
||||
@@ -5044,7 +5050,15 @@ impl WorkQueue {
|
||||
fn push_high_priority(&mut self, item: WorkItem) {
|
||||
- self.high_priority.push(item);
|
||||
+ match &item {
|
||||
+ WorkItem::ResumeThread(_, t) | WorkItem::GuestCall(_, GuestCall { thread: t, .. }) => {
|
||||
+ self.high_priority_by_thread
|
||||
+ .entry(*t)
|
||||
+ .or_default()
|
||||
+ .push_back(item);
|
||||
+ }
|
||||
+ _ => self.high_priority_general.push(item),
|
||||
+ }
|
||||
}
|
||||
|
||||
@@ -5086,14 +5100,25 @@ impl WorkQueue {
|
||||
fn promote_work_items_matching<F>(&mut self, mut predicate: F) -> bool
|
||||
where
|
||||
F: FnMut(&WorkItem) -> bool,
|
||||
{
|
||||
- // If there's a high-priority work item to resume the current guest thread,
|
||||
- // we don't need to promote anything, but we return true to indicate that
|
||||
- // work is pending for the current instance.
|
||||
- if self.high_priority.iter().any(&mut predicate) {
|
||||
+ // Check thread-keyed high-priority items (O(1) lookup by thread id).
|
||||
+ let found_in_keyed = self.high_priority_by_thread
|
||||
+ .values()
|
||||
+ .any(|q| q.iter().any(&mut predicate));
|
||||
+ let found_in_general = !found_in_keyed &&
|
||||
+ self.high_priority_general.iter().any(&mut predicate);
|
||||
+
|
||||
+ if found_in_keyed || found_in_general {
|
||||
true
|
||||
}
|
||||
// Otherwise, look for a low-priority work item that matches the current
|
||||
// instance and promote it to high-priority.
|
||||
else if let Some(idx) = self.low_priority.iter().position(&mut predicate) {
|
||||
let item = self.low_priority.remove(idx).unwrap();
|
||||
self.push_high_priority(item);
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
33
defects/wasmtime/patch/wasmtime-0002.patch
Normal file
33
defects/wasmtime/patch/wasmtime-0002.patch
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
--- a/crates/environ/src/component/translate/adapt.rs
|
||||
+++ b/crates/environ/src/component/translate/adapt.rs
|
||||
@@ -168,7 +168,8 @@ pub struct AdapterOptions {
|
||||
pub instance: RuntimeComponentInstanceIndex,
|
||||
/// The ancestors (i.e. chain of instantiating instances) of the instance
|
||||
/// specified in the `instance` field.
|
||||
- pub ancestors: Vec<RuntimeComponentInstanceIndex>,
|
||||
+ /// Stored as IndexSet for O(1) contains() — order preserved for serialization.
|
||||
+ pub ancestors: indexmap::IndexSet<RuntimeComponentInstanceIndex>,
|
||||
|
||||
--- a/crates/environ/src/fact.rs
|
||||
+++ b/crates/environ/src/fact.rs
|
||||
@@ -127,7 +127,8 @@ struct AdapterOptions {
|
||||
instance: RuntimeComponentInstanceIndex,
|
||||
/// The ancestors (i.e. chain of instantiating instances) of the instance
|
||||
/// specified in the `instance` field.
|
||||
- ancestors: Vec<RuntimeComponentInstanceIndex>,
|
||||
+ /// IndexSet for O(1) contains().
|
||||
+ ancestors: indexmap::IndexSet<RuntimeComponentInstanceIndex>,
|
||||
|
||||
--- a/crates/environ/src/component/translate/inline.rs
|
||||
+++ b/crates/environ/src/component/translate/inline.rs
|
||||
@@ -1580,7 +1580,8 @@ fn build_adapter_options(...) -> AdapterOptions {
|
||||
AdapterOptions {
|
||||
instance: frame.instance,
|
||||
- ancestors: frames
|
||||
+ ancestors: frames
|
||||
.iter()
|
||||
.rev()
|
||||
.skip(1)
|
||||
.map(|(frame, _)| frame.instance)
|
||||
- .collect(),
|
||||
+ .collect::<indexmap::IndexSet<_>>(),
|
||||
Loading…
Add table
Add a link
Reference in a new issue