From 85999dfb41dd5a0f641a2cef2a70093f9858b497 Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Thu, 24 Mar 2022 11:01:35 +0000 Subject: [PATCH 01/32] net: simplify writing to frame to guest logic Logic for writing a frame to a descriptor chain was a bit convoluted. Signed-off-by: Babis Chalios --- src/devices/src/virtio/net/device.rs | 103 +++++++++++++++------------ 1 file changed, 59 insertions(+), 44 deletions(-) diff --git a/src/devices/src/virtio/net/device.rs b/src/devices/src/virtio/net/device.rs index d9309da7cf6..38841988fda 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -11,6 +11,7 @@ use crate::virtio::net::test_utils::Mocks; use crate::virtio::net::Error; use crate::virtio::net::Result; use crate::virtio::net::{MAX_BUFFER_SIZE, QUEUE_SIZE, QUEUE_SIZES, RX_INDEX, TX_INDEX}; +use crate::virtio::DescriptorChain; use crate::virtio::{ ActivateResult, DeviceState, IrqTrigger, IrqType, Queue, VirtioDevice, TYPE_NET, }; @@ -299,70 +300,84 @@ impl Net { success } - // Copies a single frame from `self.rx_frame_buf` into the guest. - fn do_write_frame_to_guest(&mut self) -> std::result::Result<(), FrontendError> { - let mut result: std::result::Result<(), FrontendError> = Ok(()); - // This is safe since we checked in the event handler that the device is activated. - let mem = self.device_state.mem().unwrap(); - - let queue = &mut self.queues[RX_INDEX]; - let head_descriptor = queue.pop(mem).ok_or_else(|| { - METRICS.net.no_rx_avail_buffer.inc(); - FrontendError::EmptyQueue - })?; - let head_index = head_descriptor.index; - - let mut frame_slice = &self.rx_frame_buf[..self.rx_bytes_read]; - let frame_len = frame_slice.len(); - let mut maybe_next_descriptor = Some(head_descriptor); - while let Some(descriptor) = &maybe_next_descriptor { - if frame_slice.is_empty() { - break; - } - + /// Write a slice in a descriptor chain + /// + /// # Errors + /// + /// Returns an error if the descriptor chain is too short or + /// an inappropriate (read only) descriptor is found in the chain + fn write_to_descriptor_chain( + mem: &GuestMemoryMmap, + data: &[u8], + head: DescriptorChain, + ) -> std::result::Result<(), FrontendError> { + let mut chunk = data; + let mut next_descriptor = Some(head); + + while let Some(descriptor) = &next_descriptor { if !descriptor.is_write_only() { - result = Err(FrontendError::ReadOnlyDescriptor); - break; + return Err(FrontendError::ReadOnlyDescriptor); } - let len = std::cmp::min(frame_slice.len(), descriptor.len as usize); - match mem.write_slice(&frame_slice[..len], descriptor.addr) { + let len = std::cmp::min(chunk.len(), descriptor.len as usize); + match mem.write_slice(&chunk[..len], descriptor.addr) { Ok(()) => { METRICS.net.rx_count.inc(); - frame_slice = &frame_slice[len..]; + chunk = &chunk[len..]; } Err(e) => { error!("Failed to write slice: {:?}", e); - match e { - GuestMemoryError::PartialBuffer { .. } => &METRICS.net.rx_partial_writes, - _ => &METRICS.net.rx_fails, + if let GuestMemoryError::PartialBuffer { .. } = e { + METRICS.net.rx_partial_writes.inc(); } - .inc(); - result = Err(FrontendError::GuestMemory(e)); - break; + return Err(FrontendError::GuestMemory(e)); } - }; + } - maybe_next_descriptor = descriptor.next_descriptor(); - } - if result.is_ok() && !frame_slice.is_empty() { - warn!("Receiving buffer is too small to hold frame of current size"); - METRICS.net.rx_fails.inc(); - result = Err(FrontendError::DescriptorChainTooSmall); + // If chunk is empty we are done here. + if chunk.is_empty() { + METRICS.net.rx_bytes_count.add(data.len()); + METRICS.net.rx_packets_count.inc(); + return Ok(()); + } + + next_descriptor = descriptor.next_descriptor(); } + warn!("Receiving buffer is too small to hold frame of current size"); + Err(FrontendError::DescriptorChainTooSmall) + } + + // Copies a single frame from `self.rx_frame_buf` into the guest. + fn do_write_frame_to_guest(&mut self) -> std::result::Result<(), FrontendError> { + // This is safe since we checked in the event handler that the device is activated. + let mem = self.device_state.mem().unwrap(); + + let queue = &mut self.queues[RX_INDEX]; + let head_descriptor = queue.pop(mem).ok_or_else(|| { + METRICS.net.no_rx_avail_buffer.inc(); + FrontendError::EmptyQueue + })?; + let head_index = head_descriptor.index; + + let result = Self::write_to_descriptor_chain( + mem, + &self.rx_frame_buf[..self.rx_bytes_read], + head_descriptor, + ); // Mark the descriptor chain as used. If an error occurred, skip the descriptor chain. - let used_len = if result.is_err() { 0 } else { frame_len as u32 }; + let used_len = if result.is_err() { + METRICS.net.rx_fails.inc(); + 0 + } else { + self.rx_bytes_read as u32 + }; queue.add_used(mem, head_index, used_len).map_err(|e| { error!("Failed to add available descriptor {}: {}", head_index, e); FrontendError::AddUsed })?; self.rx_deferred_irqs = true; - if result.is_ok() { - METRICS.net.rx_bytes_count.add(frame_len); - METRICS.net.rx_packets_count.inc(); - } result } From 0b932a488ae65b87896d91723096099af549e907 Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Thu, 24 Mar 2022 19:44:58 +0000 Subject: [PATCH 02/32] net: enable notification suppression Use notification suppression feature of VirtIO for net device. Signed-off-by: Babis Chalios --- src/devices/src/virtio/net/device.rs | 49 +++++++++++++++++++--------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/src/devices/src/virtio/net/device.rs b/src/devices/src/virtio/net/device.rs index 38841988fda..65274da6a8d 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -37,6 +37,7 @@ use virtio_gen::virtio_net::{ VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_UFO, VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_MAC, }; +use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; use vm_memory::{ByteValued, Bytes, GuestAddress, GuestMemoryError, GuestMemoryMmap}; enum FrontendError { @@ -157,7 +158,8 @@ impl Net { | 1 << VIRTIO_NET_F_GUEST_UFO | 1 << VIRTIO_NET_F_HOST_TSO4 | 1 << VIRTIO_NET_F_HOST_UFO - | 1 << VIRTIO_F_VERSION_1; + | 1 << VIRTIO_F_VERSION_1 + | 1 << VIRTIO_RING_F_EVENT_IDX; let mut config_space = ConfigSpace::default(); if let Some(mac) = guest_mac { @@ -257,9 +259,15 @@ impl Net { } fn signal_rx_used_queue(&mut self) -> result::Result<(), DeviceError> { - if self.rx_deferred_irqs { + if !self.rx_deferred_irqs { + return Ok(()); + } + + let mem = self.device_state.mem().unwrap(); + if self.queues[RX_INDEX].prepare_kick(mem) { return self.signal_used_queue(); } + self.rx_deferred_irqs = false; Ok(()) } @@ -354,7 +362,7 @@ impl Net { let mem = self.device_state.mem().unwrap(); let queue = &mut self.queues[RX_INDEX]; - let head_descriptor = queue.pop(mem).ok_or_else(|| { + let head_descriptor = queue.pop_or_enable_notification(mem).ok_or_else(|| { METRICS.net.no_rx_avail_buffer.inc(); FrontendError::EmptyQueue })?; @@ -539,10 +547,10 @@ impl Net { // trigger a process_rx() which checks if there are any new frames to be sent, starting // with the MMDS network stack. let mut process_rx_for_mmds = false; - let mut raise_irq = false; + let mut used_any = false; let tx_queue = &mut self.queues[TX_INDEX]; - while let Some(head) = tx_queue.pop(mem) { + while let Some(head) = tx_queue.pop_or_enable_notification(mem) { // If limiter.consume() fails it means there is no more TokenType::Ops // budget and rate limiting is in effect. if !self.tx_rate_limiter.consume(1, TokenType::Ops) { @@ -628,13 +636,13 @@ impl Net { tx_queue .add_used(mem, head_index, 0) .map_err(DeviceError::QueueError)?; - raise_irq = true; + used_any = true; } - if raise_irq { - self.signal_used_queue()?; - } else { + if !used_any { METRICS.net.no_tx_avail_buffer.inc(); + } else if tx_queue.prepare_kick(mem) { + self.signal_used_queue()?; } // An incoming frame for the MMDS may trigger the transmission of a new message. @@ -669,13 +677,11 @@ impl Net { // rate limiters present but with _very high_ allowed rate error!("Failed to get rx queue event: {:?}", e); METRICS.net.event_fails.inc(); + } else if self.rx_rate_limiter.is_blocked() { + METRICS.net.rx_rate_limiter_throttled.inc(); } else { // If the limiter is not blocked, resume the receiving of bytes. - if !self.rx_rate_limiter.is_blocked() { - self.resume_rx().unwrap_or_else(report_net_event_fail); - } else { - METRICS.net.rx_rate_limiter_throttled.inc(); - } + self.resume_rx().unwrap_or_else(report_net_event_fail); } } @@ -840,6 +846,13 @@ impl VirtioDevice for Net { } fn activate(&mut self, mem: GuestMemoryMmap) -> ActivateResult { + let event_idx = self.has_feature(u64::from(VIRTIO_RING_F_EVENT_IDX)); + if event_idx { + for queue in &mut self.queues { + queue.enable_notif_suppression(); + } + } + if self.activate_evt.write(1).is_err() { error!("Net: Cannot write to activate_evt"); return Err(super::super::ActivateError::BadActivate); @@ -948,7 +961,8 @@ pub mod tests { | 1 << VIRTIO_NET_F_GUEST_UFO | 1 << VIRTIO_NET_F_HOST_TSO4 | 1 << VIRTIO_NET_F_HOST_UFO - | 1 << VIRTIO_F_VERSION_1; + | 1 << VIRTIO_F_VERSION_1 + | 1 << VIRTIO_RING_F_EVENT_IDX; assert_eq!(net.avail_features_by_page(0), features as u32); assert_eq!(net.avail_features_by_page(1), (features >> 32) as u32); @@ -1551,6 +1565,11 @@ pub mod tests { th.simulate_event(NetEvent::Tap) ); + // We need to set this here to false, otherwise the device will try to + // handle a deferred frame, it will fail and will never try to read from + // the tap. + th.net().rx_deferred_frame = false; + // Fake an avail buffer; this time, tap reading should error out. th.rxq.avail.idx.set(1); check_metric_after_block!( From 8c5d9c466c6fd76ad819087a4487f6712cba7ef3 Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Mon, 4 Apr 2022 12:27:01 +0000 Subject: [PATCH 03/32] net: use only `prepare_kick()` to raise queue irqs Instead of keeping track whether we have consumed any descriptors in a separate variable, rely on `prepare_kick()` to find out whether we should enable guest notifications. This will probably induce a performance hit with guests that don't support notification suppression, but it simplifies the code in the common case. Signed-off-by: Babis Chalios --- src/devices/src/virtio/net/device.rs | 41 ++++++++++++---------------- src/devices/src/virtio/net/mod.rs | 8 ++++++ 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/src/devices/src/virtio/net/device.rs b/src/devices/src/virtio/net/device.rs index 65274da6a8d..db6f61d386a 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -9,6 +9,7 @@ use crate::virtio::net::tap::Tap; #[cfg(test)] use crate::virtio::net::test_utils::Mocks; use crate::virtio::net::Error; +use crate::virtio::net::NetQueue; use crate::virtio::net::Result; use crate::virtio::net::{MAX_BUFFER_SIZE, QUEUE_SIZE, QUEUE_SIZES, RX_INDEX, TX_INDEX}; use crate::virtio::DescriptorChain; @@ -109,7 +110,6 @@ pub struct Net { pub(crate) tx_rate_limiter: RateLimiter, pub(crate) rx_deferred_frame: bool, - rx_deferred_irqs: bool, rx_bytes_read: usize, rx_frame_buf: [u8; MAX_BUFFER_SIZE], @@ -186,7 +186,6 @@ impl Net { rx_rate_limiter, tx_rate_limiter, rx_deferred_frame: false, - rx_deferred_irqs: false, rx_bytes_read: 0, rx_frame_buf: [0u8; MAX_BUFFER_SIZE], tx_frame_buf: [0u8; MAX_BUFFER_SIZE], @@ -248,26 +247,21 @@ impl Net { &self.tx_rate_limiter } - fn signal_used_queue(&mut self) -> result::Result<(), DeviceError> { - self.irq_trigger.trigger_irq(IrqType::Vring).map_err(|e| { - METRICS.net.event_fails.inc(); - DeviceError::FailedSignalingIrq(e) - })?; - - self.rx_deferred_irqs = false; - Ok(()) - } + fn signal_used_queue(&mut self, queue_type: NetQueue) -> result::Result<(), DeviceError> { + // This is safe since we checked in the event handler that the device is activated. + let mem = self.device_state.mem().unwrap(); - fn signal_rx_used_queue(&mut self) -> result::Result<(), DeviceError> { - if !self.rx_deferred_irqs { - return Ok(()); - } + let queue = match queue_type { + NetQueue::Rx => &mut self.queues[RX_INDEX], + NetQueue::Tx => &mut self.queues[TX_INDEX], + }; - let mem = self.device_state.mem().unwrap(); - if self.queues[RX_INDEX].prepare_kick(mem) { - return self.signal_used_queue(); + if queue.prepare_kick(mem) { + self.irq_trigger.trigger_irq(IrqType::Vring).map_err(|e| { + METRICS.net.event_fails.inc(); + DeviceError::FailedSignalingIrq(e) + })?; } - self.rx_deferred_irqs = false; Ok(()) } @@ -384,7 +378,6 @@ impl Net { error!("Failed to add available descriptor {}: {}", head_index, e); FrontendError::AddUsed })?; - self.rx_deferred_irqs = true; result } @@ -515,7 +508,7 @@ impl Net { // At this point we processed as many Rx frames as possible. // We have to wake the guest if at least one descriptor chain has been used. - self.signal_rx_used_queue() + self.signal_used_queue(NetQueue::Rx) } // Process the deferred frame first, then continue reading from tap. @@ -527,7 +520,7 @@ impl Net { return self.process_rx(); } - self.signal_rx_used_queue() + self.signal_used_queue(NetQueue::Rx) } fn resume_rx(&mut self) -> result::Result<(), DeviceError> { @@ -641,10 +634,10 @@ impl Net { if !used_any { METRICS.net.no_tx_avail_buffer.inc(); - } else if tx_queue.prepare_kick(mem) { - self.signal_used_queue()?; } + self.signal_used_queue(NetQueue::Tx)?; + // An incoming frame for the MMDS may trigger the transmission of a new message. if process_rx_for_mmds { self.process_rx() diff --git a/src/devices/src/virtio/net/mod.rs b/src/devices/src/virtio/net/mod.rs index 96ed6fe7bb6..02b8e4a3c4b 100644 --- a/src/devices/src/virtio/net/mod.rs +++ b/src/devices/src/virtio/net/mod.rs @@ -22,6 +22,14 @@ pub use self::device::Net; pub use self::event_handler::*; pub use tap::Error as TapError; +/// Enum representing the Net device queue types +pub enum NetQueue { + /// The RX queue + Rx, + /// The TX queue + Tx, +} + #[derive(Debug)] pub enum Error { /// Open tap device failed. From a647750418e47949e42debfbeeb902c969f85b3e Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Thu, 14 Apr 2022 18:29:12 +0000 Subject: [PATCH 04/32] net: unit tests in virtio-net device One notification-suppression related unit test and some more additions to increase total code coverage. Signed-off-by: Babis Chalios --- src/devices/src/virtio/net/device.rs | 102 ++++++++++++++++++++++++++- 1 file changed, 100 insertions(+), 2 deletions(-) diff --git a/src/devices/src/virtio/net/device.rs b/src/devices/src/virtio/net/device.rs index db6f61d386a..c4786b7d5bd 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -1572,6 +1572,56 @@ pub mod tests { ); } + #[test] + fn test_deferred_frame() { + let mut th = TestHelper::default(); + th.activate_net(); + th.net().mocks.set_read_tap(ReadTapMock::TapFrame); + + let rx_packets_count = METRICS.net.rx_packets_count.count(); + let _ = inject_tap_tx_frame(&th.net(), 1000); + // Trigger a Tap event that. This should fail since there + // are not any available descriptors in the queue + check_metric_after_block!( + &METRICS.net.no_rx_avail_buffer, + 1, + th.simulate_event(NetEvent::Tap) + ); + // The frame we read from the tap should be deferred now and + // no frames should have been transmitted + assert!(th.net().rx_deferred_frame); + assert_eq!(METRICS.net.rx_packets_count.count(), rx_packets_count); + + // Let's add a second frame, which should really have the same + // fate. + let _ = inject_tap_tx_frame(&th.net(), 1000); + + // Adding a descriptor in the queue. This should handle the first deferred + // frame. However, this should try to handle the second tap as well and fail + // since there's only one Descriptor Chain in the queue. + th.add_desc_chain(NetQueue::Rx, 0, &[(0, 4096, VIRTQ_DESC_F_WRITE)]); + check_metric_after_block!( + &METRICS.net.no_rx_avail_buffer, + 1, + th.simulate_event(NetEvent::Tap) + ); + // We should still have a deferred frame + assert!(th.net().rx_deferred_frame); + // However, we should have delivered the first frame + assert_eq!(METRICS.net.rx_packets_count.count(), rx_packets_count + 1); + + // Let's add one more descriptor and try to handle the last frame as well. + th.add_desc_chain(NetQueue::Rx, 0, &[(0, 4096, VIRTQ_DESC_F_WRITE)]); + check_metric_after_block!( + &METRICS.net.rx_packets_count, + 1, + th.simulate_event(NetEvent::RxQueue) + ); + + // We should be done with any deferred frame + assert!(!th.net().rx_deferred_frame); + } + #[test] fn test_rx_rate_limiter_handling() { let mut th = TestHelper::default(); @@ -1630,6 +1680,15 @@ pub mod tests { assert_eq!(th.txq.used.idx.get(), 0); } + // A second TX queue event should be throttled too + { + th.add_desc_chain(NetQueue::Tx, 0, &[(1, 1024, 0)]); + // trigger the RX queue event handler + th.simulate_event(NetEvent::TxQueue); + + assert_eq!(METRICS.net.tx_rate_limiter_throttled.count(), 2); + } + // wait for 100ms to give the rate-limiter timer a chance to replenish // wait for an extra 100ms to make sure the timerfd event makes its way from the kernel thread::sleep(Duration::from_millis(200)); @@ -1642,11 +1701,28 @@ pub mod tests { 2, th.simulate_event(NetEvent::TxRateLimiter) ); - // validate the rate_limiter is no longer blocked - assert!(!th.net().tx_rate_limiter.is_blocked()); + // This should be still blocked. We managed to send the first frame, but + // not enough budget for the second + assert!(th.net().tx_rate_limiter.is_blocked()); // make sure the data queue advanced assert_eq!(th.txq.used.idx.get(), 1); } + + thread::sleep(Duration::from_millis(200)); + + // following TX procedure should succeed to handle the second frame as well + { + // tx_count increments 1 from process_tx() and 1 from write_to_mmds_or_tap() + check_metric_after_block!( + &METRICS.net.tx_count, + 2, + th.simulate_event(NetEvent::TxRateLimiter) + ); + // validate the rate_limiter is no longer blocked + assert!(!th.net().tx_rate_limiter.is_blocked()); + // make sure the data queue advance one more place + assert_eq!(th.txq.used.idx.get(), 2); + } } // Test RX bandwidth rate limiting @@ -1678,6 +1754,14 @@ pub mod tests { assert_eq!(th.rxq.used.idx.get(), 0); } + // An RX queue event should be throttled too + { + // trigger the RX queue event handler + th.simulate_event(NetEvent::RxQueue); + + assert_eq!(METRICS.net.rx_rate_limiter_throttled.count(), 2); + } + // wait for 100ms to give the rate-limiter timer a chance to replenish // wait for an extra 100ms to make sure the timerfd event makes its way from the kernel thread::sleep(Duration::from_millis(200)); @@ -1871,4 +1955,18 @@ pub mod tests { // Test interrupts. assert!(!&net.irq_trigger.has_pending_irq(IrqType::Vring)); } + + #[test] + fn test_queues_notification_suppression() { + let features = 1 << VIRTIO_RING_F_EVENT_IDX; + + let mut th = TestHelper::default(); + th.net().set_acked_features(features); + th.activate_net(); + + let net = th.net(); + let queues = net.queues(); + assert!(queues[RX_INDEX].uses_notif_suppression); + assert!(queues[TX_INDEX].uses_notif_suppression); + } } From a9732918290b19df96e0377dfb70120e22179ed9 Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Tue, 19 Apr 2022 13:23:11 +0000 Subject: [PATCH 05/32] snap: make v1.0.0 incompatible with v1.1.1 On Firecracker v1.1.0 we add support for notification suppression in the VirtIO net device, which renders making snapshots for older versions incompatible. This commit forbids snapshots to v1.0.0 if the net device uses notification suppression and adapts integration tests to reflect the incompatibility. Signed-off-by: Babis Chalios --- docs/snapshotting/snapshot-support.md | 12 +++---- src/vmm/src/persist.rs | 10 ++++-- .../integration_tests/functional/test_mmds.py | 4 +-- .../functional/test_snapshot_advanced.py | 4 +-- .../functional/test_snapshot_version.py | 32 +++++++++++++------ 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/docs/snapshotting/snapshot-support.md b/docs/snapshotting/snapshot-support.md index 9cf769a2e85..6b7d6bc1f8c 100644 --- a/docs/snapshotting/snapshot-support.md +++ b/docs/snapshotting/snapshot-support.md @@ -154,16 +154,16 @@ The Firecracker snapshotting implementation offers support for snapshot versioni Firecracker release `v` might drop the possibility to save snapshots at any versions older than `v`. - For example Firecracker v1.0 adds support for some additional virtio features - (e.g. notification suppression). These features lead the guest drivers to - behave in a very specific way and as a consequence the Firecracker devices - have to respond accordingly. As a result, the snapshots that are created - while these features are in use will not be backwards compatible with + For example Firecracker v1.0 and v1.1 adds support for some additional virtio + features (e.g. notification suppression). These features lead the guest + drivers to behave in a very specific way and as a consequence the Firecracker + devices have to respond accordingly. As a result, the snapshots that are + created while these features are in use will not be backwards compatible with previous versions of Firecracker since the devices that come with these older versions do not behave in a way that’s compatible with the snapshotted guest drivers. - The list of versions that break snapshot backwards compatibility: `1.0` + The list of versions that break snapshot backwards compatibility: `1.0`, `1.1` - Loading snapshots from older versions (being able to load a snapshot created by any Firecracker version in the `[N, N + o]` interval, in a Firecracker version `N+o`). diff --git a/src/vmm/src/persist.rs b/src/vmm/src/persist.rs index e7e271e5ee1..c1ddcd44917 100644 --- a/src/vmm/src/persist.rs +++ b/src/vmm/src/persist.rs @@ -24,7 +24,7 @@ use crate::memory_snapshot; use crate::memory_snapshot::{GuestMemoryState, SnapshotMemory}; #[cfg(target_arch = "x86_64")] use crate::version_map::FC_V0_23_SNAP_VERSION; -use crate::version_map::{FC_V1_0_SNAP_VERSION, FC_VERSION_TO_SNAP_VERSION}; +use crate::version_map::{FC_V1_0_SNAP_VERSION, FC_V1_1_SNAP_VERSION, FC_VERSION_TO_SNAP_VERSION}; use crate::{Error as VmmError, EventManager, Vmm}; #[cfg(target_arch = "x86_64")] use cpuid::common::{get_vendor_id_from_cpuid, get_vendor_id_from_host}; @@ -33,6 +33,7 @@ use crate::resources::VmResources; use crate::vmm_config::instance_info::InstanceInfo; #[cfg(target_arch = "aarch64")] use arch::regs::{get_manufacturer_id_from_host, get_manufacturer_id_from_state}; +use devices::virtio::TYPE_NET; use logger::{error, info}; use seccompiler::BpfThreadMap; use serde::Serialize; @@ -370,13 +371,16 @@ pub fn get_snapshot_data_version( validate_devices_number(vmm.mmio_device_manager.used_irqs_count())?; } - if data_version < FC_V1_0_SNAP_VERSION { + if data_version < FC_V1_1_SNAP_VERSION { vmm.mmio_device_manager - .for_each_virtio_device(|_virtio_type, _id, _info, dev| { + .for_each_virtio_device(|virtio_type, _id, _info, dev| { + // Incompatibility between current version and all versions smaller than 1.0. + // Also, incompatibility between v1.1 and v1.0 for VirtIO net device if dev .lock() .expect("Poisoned lock") .has_feature(u64::from(VIRTIO_RING_F_EVENT_IDX)) + && (data_version < FC_V1_0_SNAP_VERSION || virtio_type == TYPE_NET) { return Err(CreateSnapshotError::IncompatibleVirtioFeature( "notification suppression", diff --git a/tests/integration_tests/functional/test_mmds.py b/tests/integration_tests/functional/test_mmds.py index e67ca2384b5..df9ad2b1af0 100644 --- a/tests/integration_tests/functional/test_mmds.py +++ b/tests/integration_tests/functional/test_mmds.py @@ -824,8 +824,8 @@ def test_mmds_snapshot(bin_cloner_path, version): # Create a snapshot with current build and restore with each FC binary # artifact. firecracker_artifacts = artifacts.firecrackers( - # v1.0.0 breaks snapshot compatibility with older versions. - min_version="1.0.0", + # v1.1.0 breaks snapshot compatibility with older versions. + min_version="1.1.0", max_version=get_firecracker_version_from_toml()) for firecracker in firecracker_artifacts: vm_instance = vm_builder.build_vm_nano( diff --git a/tests/integration_tests/functional/test_snapshot_advanced.py b/tests/integration_tests/functional/test_snapshot_advanced.py index c9078eeb996..03a636499d6 100644 --- a/tests/integration_tests/functional/test_snapshot_advanced.py +++ b/tests/integration_tests/functional/test_snapshot_advanced.py @@ -89,8 +89,8 @@ def test_restore_old_version(bin_cloner_path): # Create a snapshot with current build and restore with each FC binary # artifact. firecracker_artifacts = artifacts.firecrackers( - # v1.0.0 breaks snapshot compatibility with older versions. - min_version="1.0.0", + # v1.1.0 breaks snapshot compatibility with older versions. + min_version="1.1.0", max_version=get_firecracker_version_from_toml()) for firecracker in firecracker_artifacts: firecracker.download() diff --git a/tests/integration_tests/functional/test_snapshot_version.py b/tests/integration_tests/functional/test_snapshot_version.py index 2f1db536743..6f311bbd642 100644 --- a/tests/integration_tests/functional/test_snapshot_version.py +++ b/tests/integration_tests/functional/test_snapshot_version.py @@ -198,12 +198,26 @@ def test_create_with_newer_virtio_features(bin_cloner_path): "with older versions of Firecracker: notification suppression" \ in response.text - # It should work when we target a version >= 1.0.0 - response = test_microvm.snapshot.create( - mem_file_path="/snapshot/vm.mem", - snapshot_path="/snapshot/vm.vmstate", - version="1.0.0" - ) - assert test_microvm.api_session.is_status_no_content( - response.status_code - ) + # We try to create a snapshot for target version 1.0.0. This should + # fail because in 1.0.0 we do not support notification suppression for Net. + response = test_microvm.snapshot.create( + mem_file_path="/snapshot/vm.mem", + snapshot_path="/snapshot/vm.vmstate", + version="1.0.0" + ) + assert test_microvm.api_session.is_status_bad_request( + response.status_code + ) + assert "The virtio devices use a features that is incompatible " \ + "with older versions of Firecracker: notification suppression" \ + in response.text + + # It should work when we target a version >= 1.1.0 + response = test_microvm.snapshot.create( + mem_file_path="/snapshot/vm.mem", + snapshot_path="/snapshot/vm.vmstate", + version="1.1.0" + ) + assert test_microvm.api_session.is_status_no_content( + response.status_code + ) From 37372914e55b38624408a547142d161cba463679 Mon Sep 17 00:00:00 2001 From: Babis Chalios Date: Fri, 29 Apr 2022 13:29:58 +0000 Subject: [PATCH 06/32] CI: update code coverage Signed-off-by: Babis Chalios --- tests/integration_tests/build/test_coverage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration_tests/build/test_coverage.py b/tests/integration_tests/build/test_coverage.py index 7acee85d469..7cc3e400098 100644 --- a/tests/integration_tests/build/test_coverage.py +++ b/tests/integration_tests/build/test_coverage.py @@ -29,9 +29,9 @@ # Checkout the cpuid crate. In the future other # differences may appear. if utils.is_io_uring_supported(): - COVERAGE_DICT = {"Intel": 84.82, "AMD": 84.32, "ARM": 83.91} + COVERAGE_DICT = {"Intel": 84.89, "AMD": 84.38, "ARM": 84.06} else: - COVERAGE_DICT = {"Intel": 81.86, "AMD": 81.36, "ARM": 80.90} + COVERAGE_DICT = {"Intel": 81.89, "AMD": 81.43, "ARM": 81.05} PROC_MODEL = proc.proc_type() From f81d944ca43f8e1b61fca3cfa9d3470c83858c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Barb=C3=A1chano?= Date: Wed, 25 May 2022 12:53:24 +0200 Subject: [PATCH 07/32] Use == when comparing with an int literal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes these warnings when running the tests: Signed-off-by: Pablo Barbáchano --- tests/framework/stats/function.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/framework/stats/function.py b/tests/framework/stats/function.py index f1a2bea74fc..654150888b3 100644 --- a/tests/framework/stats/function.py +++ b/tests/framework/stats/function.py @@ -135,8 +135,7 @@ def __call__(self, result: Any) -> Any: """Get the stddev.""" assert isinstance(result, list) assert len(result) > 0 - # pylint: disable=R0123 - if len(result) is 1: + if len(result) == 1: return 0 return stdev(result) @@ -155,9 +154,8 @@ def __init__(self, k: int, name: str): def __call__(self, result: List) -> Any: """Get the kth percentile of the statistical exercise.""" - # pylint: disable=R0123 assert isinstance(result, list) - if len(result) is 1: + if len(result) == 1: return result[0] length = len(result) From 4ed4646be35439e6a42e1fa9b54070c299a9f7df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Moch=C5=88ak?= Date: Sat, 28 May 2022 03:18:31 +0200 Subject: [PATCH 08/32] docs: add serial console kernel config for aarch64 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ref: https://github.com/firecracker-microvm/firecracker/pull/1233 Signed-off-by: Ján Mochňak --- docs/kernel-policy.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/kernel-policy.md b/docs/kernel-policy.md index 457d3a300b9..cb208dd7565 100644 --- a/docs/kernel-policy.md +++ b/docs/kernel-policy.md @@ -61,6 +61,7 @@ on which Firecracker is run: ### ARM * timekeeping - `CONFIG_ARM_AMBA`, `CONFIG_RTC_DRV_PL031` +* serial console - `CONFIG_SERIAL_OF_PLATFORM` ### x86_64 From 6e35f2347107020df8316e8e29735f4022d1430a Mon Sep 17 00:00:00 2001 From: Alexandru-Cezar Sardan Date: Mon, 30 May 2022 15:20:31 +0000 Subject: [PATCH 09/32] tests/perf/net: update baselines for x86_64 Signed-off-by: Alexandru-Cezar Sardan --- ...st_network_tcp_throughput_config_4.14.json | 1058 ++++++++--------- ...st_network_tcp_throughput_config_5.10.json | 962 +++++++-------- 2 files changed, 1010 insertions(+), 1010 deletions(-) diff --git a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json index 0ba0cd9ebdd..520daadf88b 100644 --- a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json +++ b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json @@ -90,51 +90,51 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2762, - "delta_percentage": 5 + "target": 3178, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 19767, - "delta_percentage": 6 + "target": 22664, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 29091, - "delta_percentage": 6 + "target": 29251, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2764, - "delta_percentage": 5 + "target": 3183, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 19761, - "delta_percentage": 6 + "target": 22579, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 27285, + "target": 28129, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 2590, - "delta_percentage": 6 + "target": 2864, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-h2g": { - "target": 17145, - "delta_percentage": 6 + "target": 17558, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 34404, + "target": 35833, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2589, - "delta_percentage": 5 + "target": 2860, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 14485, - "delta_percentage": 5 + "target": 17746, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 31277, + "target": 33915, "delta_percentage": 6 } } @@ -142,76 +142,76 @@ "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3938, - "delta_percentage": 6 + "target": 5302, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 25850, - "delta_percentage": 4 + "target": 25915, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 29295, + "target": 28738, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3941, + "target": 5269, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 25798, + "target": 25875, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28830, + "target": 28040, "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 4152, + "target": 4500, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 24418, - "delta_percentage": 15 + "target": 28545, + "delta_percentage": 11 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 33424, - "delta_percentage": 6 + "target": 35085, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4160, + "target": 4497, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 22672, - "delta_percentage": 11 + "target": 29258, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 30091, - "delta_percentage": 6 + "target": 33418, + "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 4317, + "target": 4673, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 27936, - "delta_percentage": 7 + "target": 26582, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 31905, + "target": 31048, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 4320, - "delta_percentage": 5 + "target": 4673, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 26815, - "delta_percentage": 11 + "target": 25671, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 31151, - "delta_percentage": 6 + "target": 30070, + "delta_percentage": 5 } } } @@ -222,51 +222,51 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2785, - "delta_percentage": 7 + "target": 2796, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-g2h": { - "target": 18237, + "target": 20329, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 28163, - "delta_percentage": 6 + "target": 28511, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2553, - "delta_percentage": 6 + "target": 2661, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 18182, + "target": 20229, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28189, + "target": 28108, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 2457, - "delta_percentage": 5 + "target": 2593, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 16722, - "delta_percentage": 5 + "target": 17126, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 35200, - "delta_percentage": 8 + "target": 34939, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2455, - "delta_percentage": 5 + "target": 2604, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 15584, - "delta_percentage": 7 + "target": 16152, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 33914, + "target": 33957, "delta_percentage": 6 } } @@ -274,76 +274,76 @@ "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3584, - "delta_percentage": 7 + "target": 4337, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 24998, + "target": 25085, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 28848, + "target": 28837, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3575, - "delta_percentage": 7 + "target": 4340, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 24909, + "target": 24965, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28201, + "target": 28269, "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 3947, - "delta_percentage": 4 + "target": 4152, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { - "target": 23864, - "delta_percentage": 10 + "target": 22654, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 35939, - "delta_percentage": 6 + "target": 35740, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3948, - "delta_percentage": 4 + "target": 4149, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 21561, - "delta_percentage": 12 + "target": 23036, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 32970, - "delta_percentage": 6 + "target": 34548, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 3317, + "target": 3698, "delta_percentage": 6 }, "tcp-p1024K-ws256K-bd": { - "target": 29057, - "delta_percentage": 16 + "target": 29742, + "delta_percentage": 12 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 33067, - "delta_percentage": 6 + "target": 33206, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 3310, + "target": 3693, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 27169, - "delta_percentage": 14 + "target": 28096, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 32746, - "delta_percentage": 6 + "target": 32696, + "delta_percentage": 5 } } } @@ -356,32 +356,32 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 100, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 5 + "target": 98, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 64, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { "target": 99, @@ -393,15 +393,15 @@ }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 } } }, @@ -409,27 +409,27 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-ws256K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 114, - "delta_percentage": 8 + "target": 106, + "delta_percentage": 23 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 119, - "delta_percentage": 8 + "target": 101, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { "target": 198, @@ -437,26 +437,26 @@ }, "tcp-p1024K-ws256K-h2g": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 178, + "target": 176, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 198, - "delta_percentage": 4 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 198, - "delta_percentage": 5 + "target": 197, + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 187, + "target": 190, "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { @@ -464,11 +464,11 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 167, - "delta_percentage": 6 + "target": 140, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { @@ -476,8 +476,8 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 179, - "delta_percentage": 6 + "target": 135, + "delta_percentage": 7 } } } @@ -489,31 +489,31 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { "target": 99, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 85, - "delta_percentage": 10 + "target": 81, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 73, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { "target": 99, @@ -521,7 +521,7 @@ }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, @@ -533,7 +533,7 @@ }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 } } }, @@ -541,39 +541,39 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-ws256K-g2h": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 117, - "delta_percentage": 9 + "target": 107, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 113, - "delta_percentage": 7 + "target": 104, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 185, - "delta_percentage": 6 + "target": 184, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 197, @@ -584,19 +584,19 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 191, + "target": 194, "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 197, - "delta_percentage": 5 + "target": 198, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-bd": { - "target": 197, - "delta_percentage": 5 + "target": 198, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 123, + "target": 121, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { @@ -604,11 +604,11 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 126, + "target": 123, "delta_percentage": 8 } } @@ -622,51 +622,51 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 47, - "delta_percentage": 10 + "target": 57, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-g2h": { - "target": 74, - "delta_percentage": 8 + "target": 84, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 92, + "target": 91, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 48, - "delta_percentage": 9 + "target": 58, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 74, - "delta_percentage": 8 + "target": 84, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 90, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 40, - "delta_percentage": 10 + "target": 39, + "delta_percentage": 12 }, "tcp-p1024K-ws256K-h2g": { - "target": 55, - "delta_percentage": 8 + "target": 53, + "delta_percentage": 12 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 86, - "delta_percentage": 7 + "target": 88, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 40, + "target": 39, "delta_percentage": 11 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 57, - "delta_percentage": 9 + "target": 63, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 85, + "target": 90, "delta_percentage": 7 } } @@ -674,75 +674,75 @@ "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 59, + "target": 70, "delta_percentage": 8 }, "tcp-p1024K-ws256K-g2h": { - "target": 89, - "delta_percentage": 7 + "target": 88, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 94, + "target": 90, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 59, - "delta_percentage": 8 + "target": 68, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 89, + "target": 88, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 94, - "delta_percentage": 7 + "target": 91, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { - "target": 51, - "delta_percentage": 9 + "target": 49, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 80, - "delta_percentage": 11 + "target": 88, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 86, - "delta_percentage": 7 + "target": 88, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 52, - "delta_percentage": 10 + "target": 48, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 80, - "delta_percentage": 8 + "target": 93, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 86, - "delta_percentage": 7 + "target": 91, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 58, - "delta_percentage": 9 + "target": 57, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-bd": { - "target": 92, - "delta_percentage": 8 + "target": 86, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 93, - "delta_percentage": 7 + "target": 90, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 58, - "delta_percentage": 9 + "target": 57, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 90, - "delta_percentage": 8 + "target": 85, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 94, + "target": 90, "delta_percentage": 6 } } @@ -754,127 +754,127 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 50, - "delta_percentage": 9 + "target": 45, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-g2h": { - "target": 73, - "delta_percentage": 8 + "target": 74, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 90, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 50, + "target": 46, "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 72, - "delta_percentage": 8 + "target": 75, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 91, + "target": 90, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 44, - "delta_percentage": 10 + "target": 39, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-h2g": { - "target": 56, - "delta_percentage": 8 + "target": 54, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 88, - "delta_percentage": 7 + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 44, - "delta_percentage": 9 + "target": 38, + "delta_percentage": 14 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 61, - "delta_percentage": 9 + "target": 59, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 90, - "delta_percentage": 7 + "delta_percentage": 6 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 59, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-g2h": { - "target": 87, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 93, - "delta_percentage": 7 + "target": 92, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 59, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 87, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 93, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 52, - "delta_percentage": 9 + "target": 47, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 77, - "delta_percentage": 10 + "target": 65, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 91, - "delta_percentage": 7 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 52, - "delta_percentage": 8 + "target": 47, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 79, - "delta_percentage": 9 + "target": 80, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 91, + "target": 93, "delta_percentage": 7 }, "tcp-p1024K-ws16K-bd": { - "target": 58, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-bd": { - "target": 94, + "target": 95, "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 95, - "delta_percentage": 7 + "target": 94, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 58, - "delta_percentage": 9 + "target": 57, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws256K-bd": { "target": 92, - "delta_percentage": 9 + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 96, + "target": 95, "delta_percentage": 6 } } @@ -893,128 +893,128 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2274, - "delta_percentage": 5 + "target": 2637, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 18602, - "delta_percentage": 6 + "target": 20457, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 27003, - "delta_percentage": 9 + "target": 27259, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2281, - "delta_percentage": 6 + "target": 2667, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 18567, - "delta_percentage": 6 + "target": 20292, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 25710, - "delta_percentage": 8 + "target": 26126, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { - "target": 2109, + "target": 2371, "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { - "target": 14833, - "delta_percentage": 6 + "target": 15406, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 31263, - "delta_percentage": 6 + "target": 32922, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2105, + "target": 2368, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 13503, - "delta_percentage": 10 + "target": 15482, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 27801, - "delta_percentage": 7 + "target": 30990, + "delta_percentage": 9 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3286, + "target": 4418, "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 24548, - "delta_percentage": 7 + "target": 23694, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 27429, - "delta_percentage": 8 + "target": 26515, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3286, - "delta_percentage": 8 + "target": 4384, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 24272, - "delta_percentage": 7 + "target": 23503, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 27134, - "delta_percentage": 7 + "target": 26122, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 3320, + "target": 3776, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 23362, - "delta_percentage": 18 + "target": 26580, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 30026, - "delta_percentage": 9 + "target": 31865, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3324, - "delta_percentage": 5 + "target": 3772, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 19736, - "delta_percentage": 10 + "target": 26498, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 26590, - "delta_percentage": 7 + "target": 30468, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 3519, - "delta_percentage": 5 + "target": 3955, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-bd": { - "target": 24006, - "delta_percentage": 8 + "target": 24160, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 29277, + "target": 28782, "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 3518, + "target": 3955, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 22721, - "delta_percentage": 12 + "target": 23245, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 28873, - "delta_percentage": 11 + "target": 27620, + "delta_percentage": 8 } } } @@ -1025,128 +1025,128 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2164, - "delta_percentage": 6 + "target": 2195, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 17225, - "delta_percentage": 8 + "target": 18268, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 26627, - "delta_percentage": 10 + "target": 26904, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2160, - "delta_percentage": 7 + "target": 2220, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17140, - "delta_percentage": 9 + "target": 18191, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 26963, - "delta_percentage": 8 + "target": 26295, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { - "target": 2037, - "delta_percentage": 6 + "target": 2168, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-h2g": { - "target": 14666, - "delta_percentage": 5 + "target": 15244, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 32232, - "delta_percentage": 10 + "target": 32358, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2032, + "target": 2176, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 14519, - "delta_percentage": 5 + "target": 15932, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 30363, - "delta_percentage": 8 + "target": 30860, + "delta_percentage": 11 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3065, - "delta_percentage": 6 + "target": 3682, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 23177, - "delta_percentage": 6 + "target": 23146, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 27436, - "delta_percentage": 8 + "target": 26871, + "delta_percentage": 12 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3054, - "delta_percentage": 6 + "target": 3676, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 22813, - "delta_percentage": 7 + "target": 22923, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 26704, - "delta_percentage": 8 + "target": 26623, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { - "target": 3319, + "target": 3502, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 22425, - "delta_percentage": 13 + "target": 20242, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 33352, - "delta_percentage": 12 + "target": 32958, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3324, + "target": 3505, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 18724, - "delta_percentage": 11 + "target": 20609, + "delta_percentage": 10 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 30220, - "delta_percentage": 9 + "target": 32060, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-bd": { - "target": 2796, - "delta_percentage": 7 + "target": 3034, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 22660, - "delta_percentage": 10 + "target": 27571, + "delta_percentage": 16 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 31018, - "delta_percentage": 9 + "target": 31087, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 2797, - "delta_percentage": 8 + "target": 3043, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 22649, - "delta_percentage": 21 + "target": 26002, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 30375, - "delta_percentage": 13 + "target": 30398, + "delta_percentage": 11 } } } @@ -1159,7 +1159,7 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 99, + "target": 98, "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { @@ -1167,20 +1167,20 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 28 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 67, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { "target": 99, @@ -1200,7 +1200,7 @@ }, "tcp-pDEFAULT-ws256K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, @@ -1215,72 +1215,72 @@ "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 197, - "delta_percentage": 5 + "target": 196, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 117, - "delta_percentage": 10 + "target": 106, + "delta_percentage": 44 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 197, - "delta_percentage": 5 + "target": 198, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 123, + "target": 102, "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 175, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 198, - "delta_percentage": 6 + "target": 197, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 179, - "delta_percentage": 8 + "target": 189, + "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 165, - "delta_percentage": 6 + "target": 138, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 197, - "delta_percentage": 5 + "target": 198, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-bd": { "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 183, - "delta_percentage": 7 + "target": 134, + "delta_percentage": 12 } } } @@ -1291,16 +1291,16 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 100, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { "target": 99, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 98, - "delta_percentage": 6 + "target": 75, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, @@ -1311,12 +1311,12 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 5 + "target": 74, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { "target": 99, @@ -1328,11 +1328,11 @@ }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, @@ -1348,38 +1348,38 @@ }, "tcp-p1024K-ws256K-g2h": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 115, - "delta_percentage": 10 + "target": 95, + "delta_percentage": 17 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 197, + "target": 196, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 116, - "delta_percentage": 9 + "target": 101, + "delta_percentage": 16 }, "tcp-p1024K-ws16K-h2g": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { - "target": 198, - "delta_percentage": 5 + "target": 197, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 182, - "delta_percentage": 9 + "target": 180, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { @@ -1387,7 +1387,7 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 186, + "target": 191, "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { @@ -1395,12 +1395,12 @@ "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 124, - "delta_percentage": 8 + "target": 120, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { "target": 197, @@ -1411,8 +1411,8 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 125, - "delta_percentage": 12 + "target": 121, + "delta_percentage": 10 } } } @@ -1425,128 +1425,128 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 47, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-g2h": { - "target": 76, + "target": 81, "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 92, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 47, - "delta_percentage": 8 + "target": 58, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 76, - "delta_percentage": 8 + "target": 81, + "delta_percentage": 10 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 91, + "target": 90, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { "target": 40, - "delta_percentage": 9 + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 53, + "target": 52, "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 85, - "delta_percentage": 7 + "target": 89, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 40, - "delta_percentage": 10 + "target": 39, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 59, - "delta_percentage": 10 + "target": 63, + "delta_percentage": 11 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 83, - "delta_percentage": 7 + "target": 90, + "delta_percentage": 6 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 58, - "delta_percentage": 8 + "target": 69, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-g2h": { - "target": 91, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 94, - "delta_percentage": 7 + "target": 90, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 58, - "delta_percentage": 10 + "target": 70, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 92, - "delta_percentage": 8 + "target": 85, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 95, - "delta_percentage": 6 + "target": 89, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 52, - "delta_percentage": 9 + "target": 49, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-h2g": { - "target": 83, - "delta_percentage": 13 + "target": 91, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 86, - "delta_percentage": 8 + "target": 88, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 52, - "delta_percentage": 10 + "target": 50, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 78, - "delta_percentage": 8 + "target": 94, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 85, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 57, - "delta_percentage": 9 + "target": 58, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-bd": { - "target": 89, - "delta_percentage": 8 + "target": 83, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 93, - "delta_percentage": 5 + "target": 90, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { "target": 58, - "delta_percentage": 10 + "delta_percentage": 14 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 88, - "delta_percentage": 9 + "target": 84, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 95, - "delta_percentage": 6 + "target": 90, + "delta_percentage": 8 } } } @@ -1557,128 +1557,128 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 49, - "delta_percentage": 10 + "target": 44, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-g2h": { - "target": 75, + "target": 73, "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 92, + "target": 91, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 49, - "delta_percentage": 10 + "target": 44, + "delta_percentage": 12 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 75, - "delta_percentage": 7 + "target": 74, + "delta_percentage": 9 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 92, + "target": 91, "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 45, - "delta_percentage": 9 + "target": 39, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-h2g": { - "target": 55, - "delta_percentage": 7 + "target": 52, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 88, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 45, + "target": 40, "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 65, + "target": 67, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 90, - "delta_percentage": 7 + "target": 89, + "delta_percentage": 6 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 60, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 13 }, "tcp-p1024K-ws256K-g2h": { - "target": 87, - "delta_percentage": 6 + "target": 85, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 94, + "target": 92, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 60, - "delta_percentage": 8 + "target": 57, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 87, + "target": 84, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 94, - "delta_percentage": 7 + "target": 92, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 54, + "target": 48, "delta_percentage": 10 }, "tcp-p1024K-ws256K-h2g": { - "target": 80, - "delta_percentage": 11 + "target": 64, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 94, - "delta_percentage": 7 + "target": 93, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 54, - "delta_percentage": 9 + "target": 48, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 78, + "target": 81, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 92, - "delta_percentage": 7 + "target": 94, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-bd": { - "target": 57, - "delta_percentage": 10 + "target": 58, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-bd": { - "target": 86, + "target": 94, "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 95, - "delta_percentage": 7 + "target": 96, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 57, - "delta_percentage": 9 + "target": 58, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 88, - "delta_percentage": 14 + "target": 92, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { "target": 97, - "delta_percentage": 7 + "delta_percentage": 6 } } } diff --git a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json index bea2dc5a3a5..e5dc43872c6 100644 --- a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json +++ b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json @@ -90,51 +90,51 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3004, + "target": 3465, "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 20328, - "delta_percentage": 6 + "target": 23308, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 29762, + "target": 29815, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2999, - "delta_percentage": 5 + "target": 3477, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 20294, - "delta_percentage": 7 + "target": 23206, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28026, + "target": 28737, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 2703, - "delta_percentage": 5 + "target": 2970, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { - "target": 17255, - "delta_percentage": 7 + "target": 17641, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 34457, + "target": 36547, "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2701, - "delta_percentage": 5 + "target": 2969, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 14812, - "delta_percentage": 6 + "target": 18031, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 32076, + "target": 34181, "delta_percentage": 6 } } @@ -142,76 +142,76 @@ "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3481, - "delta_percentage": 6 + "target": 5275, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-g2h": { - "target": 26274, + "target": 26393, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 29733, - "delta_percentage": 5 + "target": 28786, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3484, - "delta_percentage": 6 + "target": 5269, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 26124, + "target": 26215, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28920, + "target": 28038, "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 4188, - "delta_percentage": 5 + "target": 4504, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { - "target": 25913, - "delta_percentage": 13 + "target": 28191, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 34467, - "delta_percentage": 6 + "target": 35517, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4179, + "target": 4511, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 24008, - "delta_percentage": 8 + "target": 28941, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 30875, - "delta_percentage": 6 + "target": 34227, + "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 4232, - "delta_percentage": 6 + "target": 4830, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-bd": { - "target": 27371, - "delta_percentage": 6 + "target": 26434, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 31836, + "target": 30962, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 4239, + "target": 4832, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 26622, - "delta_percentage": 7 + "target": 25407, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 30776, - "delta_percentage": 6 + "target": 29765, + "delta_percentage": 5 } } } @@ -222,128 +222,128 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2646, + "target": 2813, "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 18376, - "delta_percentage": 6 + "target": 20828, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 28949, + "target": 29295, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2646, + "target": 2737, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 18716, - "delta_percentage": 7 + "target": 20938, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28421, + "target": 28806, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 2540, + "target": 2737, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 16563, - "delta_percentage": 6 + "target": 17293, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 36667, + "target": 36994, "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2538, + "target": 2735, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 15400, + "target": 16157, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 32966, - "delta_percentage": 7 + "target": 33602, + "delta_percentage": 6 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3155, - "delta_percentage": 7 + "target": 4177, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 25251, - "delta_percentage": 5 + "target": 25485, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 29194, + "target": 29225, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3159, - "delta_percentage": 7 + "target": 4189, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 25167, + "target": 25404, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 28377, + "target": 28498, "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 3981, + "target": 4224, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 22166, - "delta_percentage": 23 + "target": 21396, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 37230, - "delta_percentage": 7 + "target": 37086, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3978, + "target": 4220, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 22844, + "target": 24760, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 34762, - "delta_percentage": 6 + "target": 35818, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 3090, + "target": 3577, "delta_percentage": 6 }, "tcp-p1024K-ws256K-bd": { - "target": 28967, + "target": 29839, "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 32999, - "delta_percentage": 6 + "target": 33126, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 3086, + "target": 3572, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 27128, - "delta_percentage": 9 + "target": 28057, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 32410, - "delta_percentage": 6 + "target": 32286, + "delta_percentage": 5 } } } @@ -364,8 +364,8 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 5 + "target": 97, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, @@ -373,11 +373,11 @@ }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 64, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { "target": 99, @@ -389,15 +389,15 @@ }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, @@ -413,38 +413,38 @@ }, "tcp-p1024K-ws256K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 117, - "delta_percentage": 9 + "target": 98, + "delta_percentage": 39 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 118, - "delta_percentage": 7 + "target": 103, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 187, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { @@ -452,32 +452,32 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 191, + "target": 193, "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 198, - "delta_percentage": 5 + "target": 197, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-bd": { "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 166, - "delta_percentage": 6 + "target": 140, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 177, - "delta_percentage": 7 + "target": 134, + "delta_percentage": 10 } } } @@ -496,8 +496,8 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 88, - "delta_percentage": 9 + "target": 84, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, @@ -508,8 +508,8 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 74, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { "target": 99, @@ -517,7 +517,7 @@ }, "tcp-p1024K-ws256K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, @@ -544,28 +544,28 @@ "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 117, - "delta_percentage": 9 + "target": 105, + "delta_percentage": 12 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 197, - "delta_percentage": 5 + "target": 198, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 111, + "target": 101, "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 198, - "delta_percentage": 5 + "target": 197, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { "target": 198, @@ -577,10 +577,10 @@ }, "tcp-pDEFAULT-ws16K-h2g": { "target": 198, - "delta_percentage": 4 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { @@ -592,11 +592,11 @@ "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 123, + "target": 120, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { @@ -605,11 +605,11 @@ }, "tcp-pDEFAULT-ws256K-bd": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 125, - "delta_percentage": 8 + "target": 121, + "delta_percentage": 7 } } } @@ -622,51 +622,51 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 49, - "delta_percentage": 9 + "target": 61, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 75, - "delta_percentage": 8 + "target": 85, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 93, - "delta_percentage": 7 + "target": 91, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 49, + "target": 61, "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 75, - "delta_percentage": 8 + "target": 84, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 91, + "target": 90, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { "target": 40, - "delta_percentage": 11 + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 55, - "delta_percentage": 9 + "target": 54, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 87, - "delta_percentage": 7 + "target": 90, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 40, - "delta_percentage": 11 + "delta_percentage": 13 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 58, - "delta_percentage": 8 + "target": 63, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 87, + "target": 90, "delta_percentage": 6 } } @@ -674,76 +674,76 @@ "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 57, - "delta_percentage": 8 + "target": 71, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 89, - "delta_percentage": 7 + "target": 88, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 94, + "target": 91, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 57, - "delta_percentage": 9 + "target": 71, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 89, + "target": 87, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 94, - "delta_percentage": 7 + "target": 91, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 54, + "target": 49, "delta_percentage": 9 }, "tcp-p1024K-ws256K-h2g": { - "target": 84, - "delta_percentage": 14 + "target": 88, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 90, - "delta_percentage": 7 + "target": 91, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 54, + "target": 50, "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 84, + "target": 94, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 89, - "delta_percentage": 7 + "target": 95, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-bd": { - "target": 59, - "delta_percentage": 8 + "target": 64, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-bd": { - "target": 91, + "target": 86, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 93, + "target": 90, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 59, - "delta_percentage": 8 + "target": 64, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 90, + "target": 85, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 94, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 7 } } } @@ -754,23 +754,23 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 50, - "delta_percentage": 10 + "target": 46, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-g2h": { - "target": 72, + "target": 75, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 90, - "delta_percentage": 7 + "target": 89, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 50, + "target": 47, "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 73, + "target": 76, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { @@ -778,27 +778,27 @@ "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 44, - "delta_percentage": 10 + "target": 39, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-h2g": { - "target": 56, - "delta_percentage": 8 + "target": 54, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 90, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 44, + "target": 39, "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 60, - "delta_percentage": 7 + "target": 59, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 89, + "target": 90, "delta_percentage": 7 } } @@ -806,23 +806,23 @@ "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 57, + "target": 58, "delta_percentage": 8 }, "tcp-p1024K-ws256K-g2h": { - "target": 86, + "target": 85, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 93, + "target": 92, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 57, - "delta_percentage": 9 + "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 86, + "target": 85, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { @@ -830,48 +830,48 @@ "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 53, - "delta_percentage": 9 + "target": 49, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-h2g": { - "target": 70, - "delta_percentage": 30 + "target": 63, + "delta_percentage": 11 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 95, - "delta_percentage": 6 + "target": 94, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 53, - "delta_percentage": 9 + "target": 48, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 82, - "delta_percentage": 9 + "target": 85, + "delta_percentage": 10 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 95, - "delta_percentage": 6 + "target": 97, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 57, - "delta_percentage": 8 + "target": 56, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-bd": { - "target": 95, - "delta_percentage": 9 + "target": 96, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-bd": { "target": 95, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 57, - "delta_percentage": 9 + "target": 56, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { "target": 92, - "delta_percentage": 8 + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { "target": 96, @@ -893,128 +893,128 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2512, + "target": 2895, "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 18709, - "delta_percentage": 6 + "target": 21089, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 26934, - "delta_percentage": 9 + "target": 27582, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2509, - "delta_percentage": 5 + "target": 2874, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 18590, - "delta_percentage": 6 + "target": 20915, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 26027, - "delta_percentage": 7 + "target": 26469, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { - "target": 2230, + "target": 2475, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 14946, + "target": 15438, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 31760, - "delta_percentage": 9 + "target": 33199, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2228, + "target": 2472, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 13853, - "delta_percentage": 13 + "target": 15946, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 29130, - "delta_percentage": 7 + "target": 31543, + "delta_percentage": 9 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2762, - "delta_percentage": 5 + "target": 4413, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 24319, - "delta_percentage": 6 + "target": 24115, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 27775, - "delta_percentage": 11 + "target": 26903, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2753, + "target": 4392, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 24263, - "delta_percentage": 5 + "target": 23817, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 27490, - "delta_percentage": 8 + "target": 26224, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 3413, + "target": 3844, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 24772, - "delta_percentage": 14 + "target": 26340, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 31207, - "delta_percentage": 8 + "target": 32459, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3407, + "target": 3849, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 20783, - "delta_percentage": 6 + "target": 26410, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 27533, - "delta_percentage": 6 + "target": 31144, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-bd": { - "target": 3206, - "delta_percentage": 6 + "target": 4086, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 24028, - "delta_percentage": 7 + "target": 24162, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 29407, - "delta_percentage": 10 + "target": 28665, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 3219, - "delta_percentage": 6 + "target": 4085, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 23197, - "delta_percentage": 9 + "target": 23260, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 29008, - "delta_percentage": 9 + "target": 27582, + "delta_percentage": 8 } } } @@ -1025,128 +1025,128 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2263, + "target": 2397, "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 17368, + "target": 18841, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 27709, + "target": 27494, "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2256, + "target": 2393, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17474, - "delta_percentage": 7 + "target": 18926, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 27118, - "delta_percentage": 8 + "target": 27012, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { - "target": 2134, - "delta_percentage": 5 + "target": 2315, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { - "target": 14694, - "delta_percentage": 6 + "target": 15485, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 34871, - "delta_percentage": 9 + "target": 34553, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2132, - "delta_percentage": 5 + "target": 2312, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 14936, + "target": 16337, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 30004, - "delta_percentage": 8 + "target": 30153, + "delta_percentage": 7 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2544, + "target": 3656, "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 23633, - "delta_percentage": 9 + "target": 23692, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 28008, - "delta_percentage": 8 + "target": 27748, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2536, + "target": 3655, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 23474, - "delta_percentage": 6 + "target": 23440, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 26939, - "delta_percentage": 11 + "target": 27071, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { - "target": 3412, - "delta_percentage": 5 + "target": 3622, + "delta_percentage": 4 }, "tcp-p1024K-ws256K-h2g": { - "target": 20622, - "delta_percentage": 25 + "target": 19484, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 34945, - "delta_percentage": 9 + "target": 34371, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3408, + "target": 3622, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 19813, - "delta_percentage": 6 + "target": 21712, + "delta_percentage": 10 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 32251, - "delta_percentage": 9 + "target": 33330, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-bd": { - "target": 2531, - "delta_percentage": 6 + "target": 2788, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-bd": { - "target": 22766, + "target": 28000, "delta_percentage": 11 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 31105, - "delta_percentage": 11 + "target": 31167, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 2527, + "target": 2787, "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 23940, - "delta_percentage": 12 + "target": 25923, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 30761, - "delta_percentage": 10 + "target": 30456, + "delta_percentage": 8 } } } @@ -1164,31 +1164,31 @@ }, "tcp-p1024K-ws256K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 5 + "target": 93, + "delta_percentage": 20 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 7 + "target": 66, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, @@ -1204,7 +1204,7 @@ }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 } } }, @@ -1212,27 +1212,27 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { "target": 197, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 119, - "delta_percentage": 11 + "target": 115, + "delta_percentage": 30 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 197, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 124, - "delta_percentage": 7 + "target": 101, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { "target": 198, @@ -1240,47 +1240,47 @@ }, "tcp-p1024K-ws256K-h2g": { "target": 197, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 183, + "target": 186, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 198, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 197, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 183, + "target": 191, "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 197, + "target": 198, "delta_percentage": 6 }, "tcp-p1024K-ws256K-bd": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 166, - "delta_percentage": 7 + "target": 140, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws16K-bd": { "target": 198, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { "target": 197, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 182, - "delta_percentage": 7 + "target": 135, + "delta_percentage": 11 } } } @@ -1292,31 +1292,31 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 75, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 75, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { "target": 99, @@ -1344,15 +1344,15 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 198, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { "target": 198, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 120, - "delta_percentage": 10 + "target": 99, + "delta_percentage": 12 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 197, @@ -1363,55 +1363,55 @@ "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 117, - "delta_percentage": 9 + "target": 102, + "delta_percentage": 10 }, "tcp-p1024K-ws16K-h2g": { "target": 198, "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { - "target": 197, - "delta_percentage": 6 + "target": 198, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 188, - "delta_percentage": 8 + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 193, - "delta_percentage": 6 + "target": 196, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 198, - "delta_percentage": 5 + "target": 197, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-bd": { "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 123, + "target": 119, "delta_percentage": 9 }, "tcp-pDEFAULT-ws16K-bd": { "target": 198, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { "target": 197, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 126, + "target": 121, "delta_percentage": 8 } } @@ -1425,51 +1425,51 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 50, - "delta_percentage": 9 + "target": 63, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-g2h": { - "target": 74, - "delta_percentage": 9 + "target": 82, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 91, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 51, - "delta_percentage": 12 + "target": 63, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 73, + "target": 82, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 90, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { "target": 40, - "delta_percentage": 9 + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 54, + "target": 52, "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 86, + "target": 89, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 41, - "delta_percentage": 12 + "target": 40, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 60, - "delta_percentage": 10 + "target": 64, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 85, + "target": 90, "delta_percentage": 6 } } @@ -1477,75 +1477,75 @@ "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 56, - "delta_percentage": 8 + "target": 70, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 90, - "delta_percentage": 8 + "target": 86, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 95, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 56, - "delta_percentage": 9 + "target": 70, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 90, + "target": 86, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 95, + "target": 90, "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 53, + "target": 49, "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 88, - "delta_percentage": 11 + "target": 91, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 88, + "target": 90, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 53, + "target": 50, "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 81, - "delta_percentage": 8 + "target": 94, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 87, - "delta_percentage": 7 + "target": 93, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 58, - "delta_percentage": 7 + "target": 62, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-bd": { - "target": 88, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 93, - "delta_percentage": 7 + "target": 89, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 57, - "delta_percentage": 8 + "target": 63, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 88, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 95, + "target": 90, "delta_percentage": 7 } } @@ -1557,128 +1557,128 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 51, - "delta_percentage": 9 + "target": 46, + "delta_percentage": 12 }, "tcp-p1024K-ws256K-g2h": { - "target": 73, + "target": 74, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 92, - "delta_percentage": 7 + "target": 90, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 51, - "delta_percentage": 10 + "target": 46, + "delta_percentage": 13 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 73, - "delta_percentage": 7 + "target": 74, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 92, - "delta_percentage": 6 + "target": 91, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 45, - "delta_percentage": 10 + "target": 41, + "delta_percentage": 11 }, "tcp-p1024K-ws256K-h2g": { - "target": 55, - "delta_percentage": 9 + "target": 53, + "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 91, - "delta_percentage": 6 + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 45, + "target": 40, "delta_percentage": 10 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 66, + "target": 67, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 88, - "delta_percentage": 7 + "delta_percentage": 5 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 57, - "delta_percentage": 10 + "target": 58, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 87, - "delta_percentage": 6 + "target": 85, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 95, - "delta_percentage": 6 + "target": 93, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 56, - "delta_percentage": 8 + "target": 58, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 87, - "delta_percentage": 7 + "target": 85, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 94, + "target": 93, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 55, - "delta_percentage": 9 + "target": 50, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-h2g": { - "target": 71, - "delta_percentage": 34 + "target": 62, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 96, - "delta_percentage": 7 + "target": 95, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 55, - "delta_percentage": 9 + "target": 49, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 81, - "delta_percentage": 6 + "target": 83, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 95, + "target": 97, "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 56, - "delta_percentage": 9 + "target": 55, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-bd": { - "target": 86, - "delta_percentage": 10 + "target": 96, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-bd": { "target": 96, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 57, - "delta_percentage": 8 + "target": 56, + "delta_percentage": 11 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 90, - "delta_percentage": 10 + "target": 93, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 97, - "delta_percentage": 6 + "target": 96, + "delta_percentage": 7 } } } From f7348fff09e11eb1eeb45d86abef130f3585d0a4 Mon Sep 17 00:00:00 2001 From: Alexandru-Cezar Sardan Date: Tue, 31 May 2022 07:52:35 +0000 Subject: [PATCH 10/32] tests/perf/net: update baselines for aarch64 Signed-off-by: Alexandru-Cezar Sardan --- ...st_network_tcp_throughput_config_4.14.json | 408 ++++++++--------- ...st_network_tcp_throughput_config_5.10.json | 430 +++++++++--------- 2 files changed, 419 insertions(+), 419 deletions(-) diff --git a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json index 520daadf88b..5d7ac9f6ad2 100644 --- a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json +++ b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_4.14.json @@ -1700,51 +1700,51 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3744, - "delta_percentage": 5 + "target": 3937, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-g2h": { - "target": 16974, - "delta_percentage": 7 + "target": 16481, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 19266, + "target": 18345, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3741, - "delta_percentage": 5 + "target": 3964, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17161, + "target": 16511, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 18512, + "target": 18071, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 3232, - "delta_percentage": 6 + "target": 3352, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 13213, + "target": 13391, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 24797, - "delta_percentage": 4 + "target": 24543, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3232, - "delta_percentage": 6 + "target": 3349, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 15521, - "delta_percentage": 5 + "target": 15955, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 23124, + "target": 23216, "delta_percentage": 5 } } @@ -1752,75 +1752,75 @@ "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 5296, - "delta_percentage": 5 + "target": 5284, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 17787, - "delta_percentage": 6 + "target": 17551, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 18724, + "target": 18099, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 5294, - "delta_percentage": 5 + "target": 5254, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17631, - "delta_percentage": 7 + "target": 17578, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 18656, - "delta_percentage": 5 + "target": 17971, + "delta_percentage": 4 }, "tcp-p1024K-ws16K-h2g": { - "target": 4797, - "delta_percentage": 8 + "target": 4780, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 20334, + "target": 20568, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 23895, + "target": 23938, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4799, - "delta_percentage": 8 + "target": 4777, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 19507, + "target": 20171, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 22272, + "target": 22596, "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 4377, - "delta_percentage": 6 + "target": 4545, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 18886, + "target": 18347, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 20652, + "target": 20210, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 4381, - "delta_percentage": 6 + "target": 4548, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 17651, - "delta_percentage": 5 + "target": 17896, + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 19938, + "target": 19568, "delta_percentage": 5 } } @@ -1832,127 +1832,127 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3331, - "delta_percentage": 6 + "target": 3473, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 15359, - "delta_percentage": 6 + "target": 15754, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 18621, + "target": 18797, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3321, - "delta_percentage": 6 + "target": 3468, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 15460, - "delta_percentage": 7 + "target": 15785, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 18628, - "delta_percentage": 7 + "target": 18595, + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 2854, + "target": 3001, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 12499, + "target": 12674, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 24478, - "delta_percentage": 6 + "target": 24760, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2854, + "target": 3001, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 12707, + "target": 12868, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 23046, - "delta_percentage": 5 + "target": 23393, + "delta_percentage": 4 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 4513, - "delta_percentage": 13 + "target": 4839, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { - "target": 17417, - "delta_percentage": 7 + "target": 17281, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 18817, - "delta_percentage": 5 + "target": 18799, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 4517, - "delta_percentage": 13 + "target": 4815, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17120, - "delta_percentage": 7 + "target": 17285, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 18548, - "delta_percentage": 5 + "target": 18517, + "delta_percentage": 4 }, "tcp-p1024K-ws16K-h2g": { - "target": 4258, - "delta_percentage": 7 + "target": 4615, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { - "target": 19622, - "delta_percentage": 7 + "target": 18801, + "delta_percentage": 10 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 24315, + "target": 24306, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4255, - "delta_percentage": 7 + "target": 4622, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 18673, + "target": 18809, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 22814, + "target": 22902, "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 4019, + "target": 4568, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 18366, + "target": 19519, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 20771, + "target": 20664, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 4018, - "delta_percentage": 5 + "target": 4554, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 17856, + "target": 18406, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 20300, + "target": 20236, "delta_percentage": 5 } } @@ -1967,7 +1967,7 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 100, - "delta_percentage": 4 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { "target": 100, @@ -1979,15 +1979,15 @@ }, "tcp-pDEFAULT-ws16K-g2h": { "target": 100, - "delta_percentage": 4 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 100, "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 57, - "delta_percentage": 10 + "target": 74, + "delta_percentage": 36 }, "tcp-p1024K-ws16K-h2g": { "target": 100, @@ -2003,7 +2003,7 @@ }, "tcp-pDEFAULT-ws16K-h2g": { "target": 100, - "delta_percentage": 4 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 100, @@ -2026,8 +2026,8 @@ "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 118, - "delta_percentage": 7 + "target": 108, + "delta_percentage": 17 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 200, @@ -2038,8 +2038,8 @@ "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 111, - "delta_percentage": 8 + "target": 98, + "delta_percentage": 9 }, "tcp-p1024K-ws16K-h2g": { "target": 200, @@ -2050,8 +2050,8 @@ "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 194, - "delta_percentage": 8 + "target": 196, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 200, @@ -2062,8 +2062,8 @@ "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 200, - "delta_percentage": 4 + "target": 199, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { "target": 200, @@ -2074,8 +2074,8 @@ "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 170, - "delta_percentage": 8 + "target": 155, + "delta_percentage": 12 }, "tcp-pDEFAULT-ws16K-bd": { "target": 200, @@ -2086,7 +2086,7 @@ "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 175, + "target": 165, "delta_percentage": 8 } } @@ -2158,8 +2158,8 @@ "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 105, - "delta_percentage": 8 + "target": 103, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 200, @@ -2170,8 +2170,8 @@ "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 100, - "delta_percentage": 9 + "target": 99, + "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { "target": 200, @@ -2218,7 +2218,7 @@ "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 182, + "target": 183, "delta_percentage": 6 } } @@ -2232,51 +2232,51 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 70, + "target": 72, "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 94, - "delta_percentage": 8 + "target": 93, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 5 + "target": 96, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 70, + "target": 72, "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 95, + "target": 93, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 97, - "delta_percentage": 6 + "target": 95, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 60, - "delta_percentage": 11 + "target": 54, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-h2g": { - "target": 63, + "target": 62, "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 98, + "target": 97, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 60, - "delta_percentage": 10 + "target": 53, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 81, - "delta_percentage": 7 + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 97, + "target": 96, "delta_percentage": 6 } } @@ -2284,76 +2284,76 @@ "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 84, - "delta_percentage": 7 + "target": 76, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 95, - "delta_percentage": 7 + "target": 94, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 97, - "delta_percentage": 7 + "target": 95, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 84, - "delta_percentage": 7 + "target": 77, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 95, - "delta_percentage": 7 + "target": 94, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 98, - "delta_percentage": 6 + "target": 96, + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 69, - "delta_percentage": 11 + "target": 63, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 96, + "target": 98, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 98, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 69, - "delta_percentage": 11 + "target": 63, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 96, - "delta_percentage": 7 + "target": 98, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 98, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-p1024K-ws16K-bd": { - "target": 73, - "delta_percentage": 8 + "target": 71, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-bd": { - "target": 96, + "target": 93, "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 96, - "delta_percentage": 6 + "target": 95, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 73, - "delta_percentage": 8 + "target": 72, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 94, - "delta_percentage": 7 + "target": 93, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 96, - "delta_percentage": 7 + "target": 94, + "delta_percentage": 6 } } } @@ -2364,75 +2364,75 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 71, - "delta_percentage": 8 + "target": 64, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 89, - "delta_percentage": 7 + "target": 88, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 97, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 71, - "delta_percentage": 8 + "target": 64, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 90, + "target": 89, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 97, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 59, - "delta_percentage": 9 + "target": 52, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-h2g": { - "target": 62, - "delta_percentage": 8 + "target": 61, + "delta_percentage": 9 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 98, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 59, + "target": 52, "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 71, + "target": 69, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 97, - "delta_percentage": 7 + "target": 98, + "delta_percentage": 6 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 79, - "delta_percentage": 10 + "target": 75, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-g2h": { "target": 95, - "delta_percentage": 8 + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 97, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 78, - "delta_percentage": 9 + "target": 76, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 93, + "target": 95, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { @@ -2440,20 +2440,20 @@ "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 70, - "delta_percentage": 12 + "target": 76, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-h2g": { - "target": 93, - "delta_percentage": 10 + "target": 89, + "delta_percentage": 14 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 97, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 70, - "delta_percentage": 12 + "target": 76, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 94, @@ -2464,28 +2464,28 @@ "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 73, - "delta_percentage": 8 + "target": 78, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-bd": { - "target": 94, - "delta_percentage": 6 + "target": 98, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-bd": { "target": 96, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 73, - "delta_percentage": 7 + "target": 78, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 94, + "target": 96, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { "target": 97, - "delta_percentage": 6 + "delta_percentage": 5 } } } diff --git a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json index e5dc43872c6..b794a72ea12 100644 --- a/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json +++ b/tests/integration_tests/performance/configs/test_network_tcp_throughput_config_5.10.json @@ -1700,127 +1700,127 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 3203, + "target": 3269, "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 15532, + "target": 16416, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 19813, + "target": 19129, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 3209, + "target": 3269, "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 15556, + "target": 16493, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 18887, - "delta_percentage": 4 + "target": 18932, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 3124, - "delta_percentage": 7 + "target": 3157, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 12862, - "delta_percentage": 6 + "target": 12819, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 24334, - "delta_percentage": 6 + "target": 24152, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 3120, - "delta_percentage": 6 + "target": 3155, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 15680, - "delta_percentage": 6 + "target": 15280, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 22841, - "delta_percentage": 5 + "target": 23117, + "delta_percentage": 4 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 4590, - "delta_percentage": 7 + "target": 4644, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 18456, + "target": 17703, "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 19306, + "target": 18602, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 4564, - "delta_percentage": 7 + "target": 4610, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 18480, + "target": 17719, "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 19183, + "target": 18391, "delta_percentage": 4 }, "tcp-p1024K-ws16K-h2g": { - "target": 4772, - "delta_percentage": 6 + "target": 4484, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 20067, - "delta_percentage": 6 + "target": 20609, + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 23323, + "target": 23450, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4771, + "target": 4481, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 19248, - "delta_percentage": 5 + "target": 19111, + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 21635, + "target": 21979, "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 4893, - "delta_percentage": 6 + "target": 4220, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 19526, - "delta_percentage": 5 + "target": 17837, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 20750, + "target": 20159, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 4896, - "delta_percentage": 6 + "target": 4220, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 17435, - "delta_percentage": 5 + "target": 17310, + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 20009, + "target": 19439, "delta_percentage": 4 } } @@ -1832,127 +1832,127 @@ "1vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 2749, - "delta_percentage": 6 + "target": 3016, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 14305, - "delta_percentage": 8 + "target": 15407, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 19683, + "target": 19733, "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 2756, - "delta_percentage": 7 + "target": 3016, + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 14368, - "delta_percentage": 7 + "target": 15379, + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 19281, + "target": 19347, "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 2754, + "target": 2919, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 12305, - "delta_percentage": 8 + "target": 12378, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 23948, - "delta_percentage": 6 + "target": 24174, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 2757, - "delta_percentage": 6 + "target": 2916, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 12286, + "target": 12410, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 22744, - "delta_percentage": 5 + "target": 22882, + "delta_percentage": 4 } } }, "2vcpu_1024mb.json": { "total": { "tcp-p1024K-ws16K-g2h": { - "target": 4105, - "delta_percentage": 5 + "target": 4313, + "delta_percentage": 6 }, "tcp-p1024K-ws256K-g2h": { - "target": 17107, - "delta_percentage": 5 + "target": 17261, + "delta_percentage": 4 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 19424, + "target": 19291, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 4088, + "target": 4299, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 17129, - "delta_percentage": 4 + "target": 17250, + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 19078, + "target": 18982, "delta_percentage": 4 }, "tcp-p1024K-ws16K-h2g": { - "target": 4106, - "delta_percentage": 6 + "target": 4839, + "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { - "target": 17165, - "delta_percentage": 31 + "target": 16726, + "delta_percentage": 16 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 23681, - "delta_percentage": 5 + "target": 23727, + "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 4107, - "delta_percentage": 6 + "target": 4831, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 18329, + "target": 18418, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 22315, + "target": 22407, "delta_percentage": 4 }, "tcp-p1024K-ws16K-bd": { - "target": 3888, + "target": 4122, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 18830, + "target": 19057, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 20906, + "target": 20882, "delta_percentage": 4 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 3886, + "target": 4119, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 17670, - "delta_percentage": 5 + "target": 17874, + "delta_percentage": 4 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 20404, + "target": 20405, "delta_percentage": 4 } } @@ -1967,11 +1967,11 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-ws256K-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 99, @@ -1979,27 +1979,27 @@ }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 47, - "delta_percentage": 11 + "target": 43, + "delta_percentage": 19 }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, @@ -2026,11 +2026,11 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 117, + "target": 118, "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-g2h": { @@ -2038,7 +2038,7 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 111, + "target": 103, "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { @@ -2050,7 +2050,7 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 189, + "target": 192, "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { @@ -2058,24 +2058,24 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 176, - "delta_percentage": 8 + "target": 163, + "delta_percentage": 9 }, "tcp-pDEFAULT-ws16K-bd": { "target": 198, @@ -2086,8 +2086,8 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 178, - "delta_percentage": 6 + "target": 169, + "delta_percentage": 8 } } } @@ -2107,15 +2107,15 @@ }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws256K-g2h": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 99, @@ -2123,15 +2123,15 @@ }, "tcp-p1024K-ws16K-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws256K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-h2g": { "target": 99, @@ -2139,11 +2139,11 @@ }, "tcp-pDEFAULT-ws256K-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 6 + "delta_percentage": 5 } } }, @@ -2151,15 +2151,15 @@ "Avg": { "tcp-p1024K-ws16K-g2h": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-p1024K-ws256K-g2h": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 110, - "delta_percentage": 7 + "target": 105, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws16K-g2h": { "target": 198, @@ -2170,11 +2170,11 @@ "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 106, + "target": 104, "delta_percentage": 8 }, "tcp-p1024K-ws16K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-p1024K-ws256K-h2g": { @@ -2182,11 +2182,11 @@ "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 173, - "delta_percentage": 9 + "target": 172, + "delta_percentage": 10 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 197, + "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-ws256K-h2g": { @@ -2198,28 +2198,28 @@ "delta_percentage": 5 }, "tcp-p1024K-ws16K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-ws256K-bd": { - "target": 198, + "target": 197, "delta_percentage": 5 }, "tcp-p1024K-wsDEFAULT-bd": { "target": 176, - "delta_percentage": 7 + "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { "target": 198, - "delta_percentage": 5 + "delta_percentage": 4 }, "tcp-pDEFAULT-ws256K-bd": { "target": 198, "delta_percentage": 5 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 184, - "delta_percentage": 6 + "target": 185, + "delta_percentage": 5 } } } @@ -2232,127 +2232,127 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 69, - "delta_percentage": 8 + "target": 66, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-g2h": { - "target": 91, - "delta_percentage": 7 + "target": 93, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 99, - "delta_percentage": 6 + "target": 96, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 69, - "delta_percentage": 8 + "target": 66, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 91, + "target": 93, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 96, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 60, + "target": 55, "delta_percentage": 9 }, "tcp-p1024K-ws256K-h2g": { - "target": 65, + "target": 63, "delta_percentage": 8 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 99, - "delta_percentage": 6 + "target": 98, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 60, - "delta_percentage": 9 + "target": 55, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 84, + "target": 81, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { - "target": 98, - "delta_percentage": 6 + "target": 99, + "delta_percentage": 5 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 81, - "delta_percentage": 8 + "target": 75, + "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 98, + "target": 95, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { - "target": 98, - "delta_percentage": 6 + "target": 95, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 81, + "target": 75, "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 98, + "target": 95, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 98, + "target": 95, "delta_percentage": 6 }, "tcp-p1024K-ws16K-h2g": { - "target": 82, - "delta_percentage": 8 + "target": 65, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-h2g": { "target": 99, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-h2g": { - "target": 99, - "delta_percentage": 6 + "target": 98, + "delta_percentage": 5 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 82, - "delta_percentage": 9 + "target": 65, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 98, + "target": 96, "delta_percentage": 6 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 99, - "delta_percentage": 5 + "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 87, - "delta_percentage": 7 + "target": 72, + "delta_percentage": 8 }, "tcp-p1024K-ws256K-bd": { - "target": 99, - "delta_percentage": 5 + "target": 93, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-bd": { - "target": 97, + "target": 95, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 87, + "target": 72, "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { - "target": 95, - "delta_percentage": 6 + "target": 93, + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { - "target": 98, + "target": 96, "delta_percentage": 6 } } @@ -2364,88 +2364,88 @@ "1vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 70, - "delta_percentage": 8 + "target": 63, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-g2h": { - "target": 87, - "delta_percentage": 8 + "target": 90, + "delta_percentage": 7 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 98, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 70, + "target": 63, "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 87, - "delta_percentage": 7 + "target": 89, + "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { - "target": 97, - "delta_percentage": 6 + "target": 96, + "delta_percentage": 5 }, "tcp-p1024K-ws16K-h2g": { - "target": 62, - "delta_percentage": 8 + "target": 56, + "delta_percentage": 10 }, "tcp-p1024K-ws256K-h2g": { - "target": 65, - "delta_percentage": 8 + "target": 63, + "delta_percentage": 11 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 98, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-h2g": { - "target": 62, + "target": 55, "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-h2g": { - "target": 72, + "target": 71, "delta_percentage": 8 }, "tcp-pDEFAULT-wsDEFAULT-h2g": { "target": 98, - "delta_percentage": 6 + "delta_percentage": 5 } } }, "2vcpu_1024mb.json": { "Avg": { "tcp-p1024K-ws16K-g2h": { - "target": 79, + "target": 73, "delta_percentage": 7 }, "tcp-p1024K-ws256K-g2h": { - "target": 94, - "delta_percentage": 7 + "target": 93, + "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-g2h": { "target": 98, "delta_percentage": 6 }, "tcp-pDEFAULT-ws16K-g2h": { - "target": 79, - "delta_percentage": 7 + "target": 73, + "delta_percentage": 8 }, "tcp-pDEFAULT-ws256K-g2h": { - "target": 94, + "target": 93, "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-g2h": { "target": 98, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-p1024K-ws16K-h2g": { - "target": 78, - "delta_percentage": 8 + "target": 79, + "delta_percentage": 9 }, "tcp-p1024K-ws256K-h2g": { - "target": 85, - "delta_percentage": 30 + "target": 81, + "delta_percentage": 19 }, "tcp-p1024K-wsDEFAULT-h2g": { "target": 98, @@ -2453,7 +2453,7 @@ }, "tcp-pDEFAULT-ws16K-h2g": { "target": 78, - "delta_percentage": 8 + "delta_percentage": 9 }, "tcp-pDEFAULT-ws256K-h2g": { "target": 97, @@ -2464,28 +2464,28 @@ "delta_percentage": 6 }, "tcp-p1024K-ws16K-bd": { - "target": 79, + "target": 76, "delta_percentage": 7 }, "tcp-p1024K-ws256K-bd": { - "target": 99, + "target": 98, "delta_percentage": 6 }, "tcp-p1024K-wsDEFAULT-bd": { "target": 97, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-ws16K-bd": { - "target": 79, - "delta_percentage": 8 + "target": 76, + "delta_percentage": 7 }, "tcp-pDEFAULT-ws256K-bd": { "target": 96, - "delta_percentage": 6 + "delta_percentage": 7 }, "tcp-pDEFAULT-wsDEFAULT-bd": { "target": 98, - "delta_percentage": 6 + "delta_percentage": 5 } } } From d324ea94678cc72b08240133a4417cd0d5560658 Mon Sep 17 00:00:00 2001 From: Matthew Schlebusch Date: Fri, 27 May 2022 12:49:24 +0100 Subject: [PATCH 11/32] Upgrade devtool contain to use Python 3.10 Signed-off-by: Matthew Schlebusch --- Cargo.lock | 8 +- tests/framework/utils.py | 27 ++ .../integration_tests/functional/test_api.py | 23 +- tests/integration_tests/style/test_gitlint.py | 2 + tools/devctr/Dockerfile.aarch64 | 19 + tools/devctr/Dockerfile.x86_64 | 20 + tools/devctr/poetry.lock | 374 ++++++++---------- tools/devctr/pyproject.toml | 2 +- tools/devtool | 2 +- 9 files changed, 260 insertions(+), 217 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 121a99469dc..2543930f8ae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -588,7 +588,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a5e77493808403a6bd56a301a64ea6b9342e36ea845044bf0dfdf56fe52fa08" dependencies = [ - "vm-memory 0.7.0", + "vm-memory 0.8.0", ] [[package]] @@ -1207,14 +1207,14 @@ version = "0.1.0" dependencies = [ "libc", "utils", - "vm-memory 0.7.0", + "vm-memory 0.8.0", ] [[package]] name = "vm-memory" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339d4349c126fdcd87e034631d7274370cf19eb0e87b33166bcd956589fc72c5" +checksum = "767ed8aaebbff902e02e6d3749dc2baef55e46565f8a6414a065e5baee4b4a81" dependencies = [ "libc", "winapi", diff --git a/tests/framework/utils.py b/tests/framework/utils.py index 158e5c97ed1..ddd200378ba 100644 --- a/tests/framework/utils.py +++ b/tests/framework/utils.py @@ -14,9 +14,11 @@ import platform from collections import namedtuple, defaultdict +from pathlib import Path import psutil from retry import retry from retry.api import retry_call +from framework import utils from framework.defs import MIN_KERNEL_VERSION_FOR_IO_URING CommandReturn = namedtuple("CommandReturn", "returncode stdout stderr") @@ -528,6 +530,31 @@ def run_cmd_list_async(cmd_list): ) +def configure_git_safe_directory(): + """ + Add the root firecracker git folder to safe.directory config. + + Firecracker root git folder in the container is + bind-mounted to a folder on the host which is mapped to a + user that is different from the user which runs the integ tests. + This difference in ownership is validated against by git. + https://github.blog/2022-04-12-git-security-vulnerability-announced/ + + :return: none + """ + # devtool script will set the working directory to FC_ROOT/tests. + # We will need the parent for safe.directory configuration + working_dir = Path(os.getcwd()) + + try: + utils.run_cmd('git config --global ' + '--add safe.directory {}'.format(working_dir.parent)) + except ChildProcessError as error: + assert False, "Failure to set the safe.directory " \ + "git config to [{}] required for gitlint tests: " \ + "{}".format(working_dir.parent, error) + + def run_cmd(cmd, ignore_return_code=False, no_shell=False, cwd=None): """ Run a command using the sync function that logs the output. diff --git a/tests/integration_tests/functional/test_api.py b/tests/integration_tests/functional/test_api.py index 6a7f89cb597..31cc0d5a4ca 100644 --- a/tests/integration_tests/functional/test_api.py +++ b/tests/integration_tests/functional/test_api.py @@ -18,6 +18,7 @@ from conftest import _test_images_s3_bucket, init_microvm +from framework import utils as test_utils from framework.utils import is_io_uring_supported from framework.artifacts import ArtifactCollection, NetIfaceConfig, \ DEFAULT_DEV_NAME, DEFAULT_TAP_NAME, SnapshotType @@ -1184,10 +1185,26 @@ def test_api_version(test_microvm_with_api): assert 'firecracker_version' in postboot_response.json() # Validate VM version post-boot is the same as pre-boot. assert preboot_response.json() == postboot_response.json() + + test_utils.configure_git_safe_directory() # Check that the version is the same as `git describe --dirty`. - out = subprocess.check_output(['git', 'describe', '--dirty']).decode() - # Skip the "v" at the start and the newline at the end. - assert out.strip()[1:] == preboot_response.json()['firecracker_version'] + # Abbreviated to post-tag commit metadata + out = subprocess.check_output(['git', 'describe', + '--dirty', '--abbrev=0']).decode() + + # Skip the "v" at the start + tag_version = out[1:] + # Strip the metadata appended to the tag + if out.find('-') > -1: + tag_version = tag_version[:tag_version.index('-')] + else: + # Just strip potential newlines + tag_version = tag_version.strip() + + # Git tag should match FC API version + assert tag_version == preboot_response.json()['firecracker_version'], \ + "Expected [{}], Actual [{}]".format( + preboot_response.json()['firecracker_version'], tag_version) def test_api_vsock(bin_cloner_path): diff --git a/tests/integration_tests/style/test_gitlint.py b/tests/integration_tests/style/test_gitlint.py index 35e218f2282..5cebed24297 100644 --- a/tests/integration_tests/style/test_gitlint.py +++ b/tests/integration_tests/style/test_gitlint.py @@ -14,6 +14,8 @@ def test_gitlint(): """ os.environ['LC_ALL'] = 'C.UTF-8' os.environ['LANG'] = 'C.UTF-8' + + utils.configure_git_safe_directory() try: utils.run_cmd('gitlint --commits origin/main..HEAD' ' -C ../.gitlint' diff --git a/tools/devctr/Dockerfile.aarch64 b/tools/devctr/Dockerfile.aarch64 index 80b8256fc70..a0c8748714e 100644 --- a/tools/devctr/Dockerfile.aarch64 +++ b/tools/devctr/Dockerfile.aarch64 @@ -61,6 +61,15 @@ RUN apt-get update \ bc \ flex \ bison \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libgdbm-dev \ + libnss3-dev \ + libssl-dev \ + libreadline-dev \ + libffi-dev \ + wget \ && python3 -m pip install \ setuptools \ setuptools_rust \ @@ -68,6 +77,16 @@ RUN apt-get update \ && python3 -m pip install --upgrade pip \ && rm -rf /var/lib/apt/lists/* +# Update Python to 3.10 +# This method isn't ideal, compiling from source can be dropped +# once the container definition is based on ubuntu:22.04 +RUN wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz \ + && tar -xf Python-3.10.4.tgz \ + && cd ./Python-3.10.4 \ + && ./configure --enable-optimizations \ + && make -j 8 \ + && make install + RUN python3 -m pip install poetry RUN mkdir "$TMP_POETRY_DIR" COPY tools/devctr/pyproject.toml $POETRY_LOCK_PATH "$TMP_POETRY_DIR/" diff --git a/tools/devctr/Dockerfile.x86_64 b/tools/devctr/Dockerfile.x86_64 index 74240787c4c..d843e10e901 100644 --- a/tools/devctr/Dockerfile.x86_64 +++ b/tools/devctr/Dockerfile.x86_64 @@ -29,6 +29,16 @@ RUN apt-get update \ # Needed in order to be able to compile `userfaultfd-sys`. clang \ cmake \ + build-essential \ + zlib1g-dev \ + libncurses5-dev \ + libgdbm-dev \ + libnss3-dev \ + libreadline-dev \ + libffi-dev \ + libsqlite3-dev \ + wget \ + libbz2-dev \ curl \ file \ g++ \ @@ -67,6 +77,16 @@ RUN apt-get update \ && python3 -m pip install --upgrade pip \ && gem install chef-utils:16.6.14 mdl +# Update Python to 3.10 +# This method isn't ideal, compiling from source can be dropped +# once the container definition is based on ubuntu:22.04 +RUN wget https://www.python.org/ftp/python/3.10.4/Python-3.10.4.tgz \ + && tar -xf Python-3.10.4.tgz \ + && cd ./Python-3.10.4 \ + && ./configure --enable-optimizations \ + && make -j 8 \ + && make install + RUN python3 -m pip install poetry RUN mkdir "$TMP_POETRY_DIR" COPY tools/devctr/pyproject.toml $POETRY_LOCK_PATH "$TMP_POETRY_DIR/" diff --git a/tools/devctr/poetry.lock b/tools/devctr/poetry.lock index 3646516cce2..f56d07889bc 100644 --- a/tools/devctr/poetry.lock +++ b/tools/devctr/poetry.lock @@ -16,11 +16,10 @@ python-versions = ">=3.6" [package.dependencies] python-dateutil = ">=2.7.0" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "astroid" -version = "2.9.3" +version = "2.11.5" description = "An abstract syntax tree for Python with inference support." category = "main" optional = false @@ -28,9 +27,7 @@ python-versions = ">=3.6.2" [package.dependencies] lazy-object-proxy = ">=1.4.0" -typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} -typing-extensions = {version = ">=3.10", markers = "python_version < \"3.10\""} -wrapt = ">=1.11,<1.14" +wrapt = ">=1.11,<2" [[package]] name = "atomicwrites" @@ -56,15 +53,15 @@ tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (> [[package]] name = "boto3" -version = "1.20.35" +version = "1.23.9" description = "The AWS SDK for Python" category = "main" optional = false python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.23.35,<1.24.0" -jmespath = ">=0.7.1,<1.0.0" +botocore = ">=1.26.9,<1.27.0" +jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.5.0,<0.6.0" [package.extras] @@ -72,31 +69,31 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.23.35" +version = "1.26.9" description = "Low-level, data-driven core of boto 3." category = "main" optional = false python-versions = ">= 3.6" [package.dependencies] -jmespath = ">=0.7.1,<1.0.0" +jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.12.5)"] +crt = ["awscrt (==0.13.8)"] [[package]] name = "certifi" -version = "2021.10.8" +version = "2022.5.18.1" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "charset-normalizer" -version = "2.0.10" +version = "2.0.12" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -115,7 +112,6 @@ python-versions = ">=3.6" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" @@ -135,11 +131,11 @@ python-versions = ">=3.6" [[package]] name = "dataclasses" -version = "0.8" +version = "0.6" description = "A backport of the dataclasses module for Python 3.6" category = "main" optional = false -python-versions = ">=3.6, <3.7" +python-versions = "*" [[package]] name = "decorator" @@ -149,6 +145,17 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "dill" +version = "0.3.5.1" +description = "serialize all of python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + [[package]] name = "gitlint" version = "0.16.0" @@ -170,23 +177,6 @@ category = "main" optional = false python-versions = ">=3.5" -[[package]] -name = "importlib-metadata" -version = "4.8.3" -description = "Read metadata from Python packages" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] - [[package]] name = "iniconfig" version = "1.1.1" @@ -211,11 +201,11 @@ plugins = ["setuptools"] [[package]] name = "jmespath" -version = "0.10.0" +version = "1.0.0" description = "JSON Matching Expressions" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.7" [[package]] name = "lazy-object-proxy" @@ -227,11 +217,11 @@ python-versions = ">=3.6" [[package]] name = "mccabe" -version = "0.6.1" +version = "0.7.0" description = "McCabe checker, plugin for flake8" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "nsenter" @@ -267,15 +257,15 @@ python-versions = "*" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pluggy" @@ -285,9 +275,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - [package.extras] dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] @@ -335,57 +322,59 @@ toml = ["toml"] [[package]] name = "pylint" -version = "2.12.2" +version = "2.13.9" description = "python code static checker" category = "main" optional = false python-versions = ">=3.6.2" [package.dependencies] -astroid = ">=2.9.0,<2.10" +astroid = ">=2.11.5,<=2.12.0-dev0" colorama = {version = "*", markers = "sys_platform == \"win32\""} +dill = ">=0.2" isort = ">=4.2.5,<6" -mccabe = ">=0.6,<0.7" +mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" -toml = ">=0.9.2" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +testutil = ["gitpython (>3)"] [[package]] name = "pyparsing" -version = "3.0.6" -description = "Python parsing module" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pytest" -version = "6.2.5" +version = "7.1.2" description = "pytest: simple powerful testing with Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} iniconfig = "*" packaging = "*" pluggy = ">=0.12,<2.0" py = ">=1.8.2" -toml = "*" +tomli = ">=1.0.0" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] [[package]] name = "pytest-timeout" -version = "2.0.2" +version = "2.1.0" description = "pytest plugin to abort hanging tests" category = "main" optional = false @@ -456,7 +445,7 @@ py = ">=1.4.26,<2.0.0" [[package]] name = "s3transfer" -version = "0.5.0" +version = "0.5.2" description = "An Amazon S3 Transfer Manager" category = "main" optional = false @@ -493,66 +482,46 @@ optional = false python-versions = "*" [[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" - -[[package]] -name = "typed-ast" -version = "1.5.1" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "main" -optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "typing-extensions" -version = "4.0.1" -description = "Backported and Experimental Type Hints for Python 3.6+" +version = "4.2.0" +description = "Backported and Experimental Type Hints for Python 3.7+" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.8" +version = "1.26.9" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" [package.extras] -brotli = ["brotlipy (>=0.6.0)"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "wrapt" -version = "1.13.3" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -[[package]] -name = "zipp" -version = "3.6.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" -optional = false -python-versions = ">=3.6" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] - [metadata] lock-version = "1.1" -python-versions = "3.6.9" -content-hash = "3989ffe821c2f8699dee04000594ad5ae0e9bd3b936b3f046a41d4ca41ef3a58" +python-versions = "3.10.4" +content-hash = "4886f50129ceb5f62edc7c54a9d2fab14876dc34ab1339cd7211cae61f2352ae" [metadata.files] argparse = [ @@ -564,8 +533,8 @@ arrow = [ {file = "arrow-1.2.0.tar.gz", hash = "sha256:16fc29bbd9e425e3eb0fef3018297910a0f4568f21116fc31771e2760a50e074"}, ] astroid = [ - {file = "astroid-2.9.3-py3-none-any.whl", hash = "sha256:506daabe5edffb7e696ad82483ad0228245a9742ed7d2d8c9cdb31537decf9f6"}, - {file = "astroid-2.9.3.tar.gz", hash = "sha256:1efdf4e867d4d8ba4a9f6cf9ce07cd182c4c41de77f23814feb27ca93ca9d877"}, + {file = "astroid-2.11.5-py3-none-any.whl", hash = "sha256:14ffbb4f6aa2cf474a0834014005487f7ecd8924996083ab411e7fa0b508ce0b"}, + {file = "astroid-2.11.5.tar.gz", hash = "sha256:f4e4ec5294c4b07ac38bab9ca5ddd3914d4bf46f9006eb5c0ae755755061044e"}, ] atomicwrites = [ {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, @@ -576,20 +545,20 @@ attrs = [ {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] boto3 = [ - {file = "boto3-1.20.35-py3-none-any.whl", hash = "sha256:e0247a901ba3b7ec51f232921764b7ad14f458ed91038a71df9da732e12bbbe1"}, - {file = "boto3-1.20.35.tar.gz", hash = "sha256:42dd9fcb9e033ab19c9dfaeaba745ef9d2db6efe4e9f1e1f547b3e3e0b1f4a82"}, + {file = "boto3-1.23.9-py3-none-any.whl", hash = "sha256:9e44d22a9cfb72e84add3ce1580e6dfef6a67321da0b958f7f33411de468a7ea"}, + {file = "boto3-1.23.9.tar.gz", hash = "sha256:5b05d219db06cca7d372cef2cdbbee5acfec23cb1f8dcbbfa95c5fa098269c7f"}, ] botocore = [ - {file = "botocore-1.23.35-py3-none-any.whl", hash = "sha256:4cbd668a28e489c8d1909f621684f070309b3ae990667094b344e6ea72337795"}, - {file = "botocore-1.23.35.tar.gz", hash = "sha256:5be6ba6c5ea71c256da8a5023bf9c278847c4b90fdb40f2c4c3bdb21ca11ff28"}, + {file = "botocore-1.26.9-py3-none-any.whl", hash = "sha256:c5f33c814f8c5e1a0bec2084760fe00ea4d43cbfbb868b05fbb83bbeb6303844"}, + {file = "botocore-1.26.9.tar.gz", hash = "sha256:fef3ae1aa9e214d9da7b44035f13afe1f7239a5b2724ed76c6ec9a0628102307"}, ] certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, + {file = "certifi-2022.5.18.1-py3-none-any.whl", hash = "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a"}, + {file = "certifi-2022.5.18.1.tar.gz", hash = "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] click = [ {file = "click-8.0.1-py3-none-any.whl", hash = "sha256:fba402a4a47334742d782209a7c79bc448911afe1149d07bdabdf480b3e2f4b6"}, @@ -604,13 +573,17 @@ contextlib2 = [ {file = "contextlib2-21.6.0.tar.gz", hash = "sha256:ab1e2bfe1d01d968e1b7e8d9023bc51ef3509bba217bb730cee3827e1ee82869"}, ] dataclasses = [ - {file = "dataclasses-0.8-py3-none-any.whl", hash = "sha256:0201d89fa866f68c8ebd9d08ee6ff50c0b255f8ec63a71c16fda7af82bb887bf"}, - {file = "dataclasses-0.8.tar.gz", hash = "sha256:8479067f342acf957dc82ec415d355ab5edb7e7646b90dc6e2fd1d96ad084c97"}, + {file = "dataclasses-0.6-py3-none-any.whl", hash = "sha256:454a69d788c7fda44efd71e259be79577822f5e3f53f029a22d08004e951dc9f"}, + {file = "dataclasses-0.6.tar.gz", hash = "sha256:6988bd2b895eef432d562370bb707d540f32f7360ab13da45340101bc2307d84"}, ] decorator = [ {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] +dill = [ + {file = "dill-0.3.5.1-py2.py3-none-any.whl", hash = "sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302"}, + {file = "dill-0.3.5.1.tar.gz", hash = "sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86"}, +] gitlint = [ {file = "gitlint-0.16.0-py2.py3-none-any.whl", hash = "sha256:ebe01da89571b027452c06349ea7b8eee06b412a9c768a250b64dfe31cb5a484"}, {file = "gitlint-0.16.0.tar.gz", hash = "sha256:30ee2bdae611bbf66df6326b5da1afc14bf0be337e1d3021fafeb7f13b37f55b"}, @@ -619,10 +592,6 @@ idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] -importlib-metadata = [ - {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, - {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, -] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, @@ -632,8 +601,8 @@ isort = [ {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] jmespath = [ - {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, - {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, + {file = "jmespath-1.0.0-py3-none-any.whl", hash = "sha256:e8dcd576ed616f14ec02eed0005c85973b5890083313860136657e24784e4c04"}, + {file = "jmespath-1.0.0.tar.gz", hash = "sha256:a490e280edd1f57d6de88636992d05b71e97d69a26a19f058ecf7d304474bf5e"}, ] lazy-object-proxy = [ {file = "lazy-object-proxy-1.7.1.tar.gz", hash = "sha256:d609c75b986def706743cdebe5e47553f4a5a1da9c5ff66d76013ef396b5a8a4"}, @@ -675,8 +644,8 @@ lazy-object-proxy = [ {file = "lazy_object_proxy-1.7.1-pp37.pp38-none-any.whl", hash = "sha256:d66906d5785da8e0be7360912e99c9188b70f52c422f9fc18223347235691a84"}, ] mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, ] nsenter = [ {file = "nsenter-0.2-py3-none-any.whl", hash = "sha256:d44ba70199f9b454139f2093141e63218bca5b1285c65fcf6e4b139116088867"}, @@ -687,11 +656,12 @@ packaging = [ {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pathlib = [ + {file = "pathlib-1.0.1-py3-none-any.whl", hash = "sha256:f35f95ab8b0f59e6d354090350b44a80a80635d22efdedfa84c7ad1cf0a74147"}, {file = "pathlib-1.0.1.tar.gz", hash = "sha256:6940718dfc3eff4258203ad5021090933e5c04707d5ca8cc9e73c94a7894ea9f"}, ] platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -723,20 +693,20 @@ pydocstyle = [ {file = "pydocstyle-6.1.1.tar.gz", hash = "sha256:1d41b7c459ba0ee6c345f2eb9ae827cab14a7533a88c5c6f7e94923f72df92dc"}, ] pylint = [ - {file = "pylint-2.12.2-py3-none-any.whl", hash = "sha256:daabda3f7ed9d1c60f52d563b1b854632fd90035bcf01443e234d3dc794e3b74"}, - {file = "pylint-2.12.2.tar.gz", hash = "sha256:9d945a73640e1fec07ee34b42f5669b770c759acd536ec7b16d7e4b87a9c9ff9"}, + {file = "pylint-2.13.9-py3-none-any.whl", hash = "sha256:705c620d388035bdd9ff8b44c5bcdd235bfb49d276d488dd2c8ff1736aa42526"}, + {file = "pylint-2.13.9.tar.gz", hash = "sha256:095567c96e19e6f57b5b907e67d265ff535e588fe26b12b5ebe1fc5645b2c731"}, ] pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pytest-7.1.2-py3-none-any.whl", hash = "sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"}, + {file = "pytest-7.1.2.tar.gz", hash = "sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"}, ] pytest-timeout = [ - {file = "pytest-timeout-2.0.2.tar.gz", hash = "sha256:e6f98b54dafde8d70e4088467ff621260b641eb64895c4195b6e5c8f45638112"}, - {file = "pytest_timeout-2.0.2-py3-none-any.whl", hash = "sha256:fe9c3d5006c053bb9e062d60f641e6a76d6707aedb645350af9593e376fcc717"}, + {file = "pytest-timeout-2.1.0.tar.gz", hash = "sha256:c07ca07404c612f8abbe22294b23c368e2e5104b521c1790195561f37e1ac3d9"}, + {file = "pytest_timeout-2.1.0-py3-none-any.whl", hash = "sha256:f6f50101443ce70ad325ceb4473c4255e9d74e3c7cd0ef827309dfa4c0d975c6"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -790,8 +760,8 @@ retry = [ {file = "retry-0.9.2.tar.gz", hash = "sha256:f8bfa8b99b69c4506d6f5bd3b0aabf77f98cdb17f3c9fc3f5ca820033336fba4"}, ] s3transfer = [ - {file = "s3transfer-0.5.0-py3-none-any.whl", hash = "sha256:9c1dc369814391a6bda20ebbf4b70a0f34630592c9aa520856bf384916af2803"}, - {file = "s3transfer-0.5.0.tar.gz", hash = "sha256:50ed823e1dc5868ad40c8dc92072f757aa0e653a192845c94a3b676f4a62da4c"}, + {file = "s3transfer-0.5.2-py3-none-any.whl", hash = "sha256:7a6f4c4d1fdb9a2b640244008e142cbc2cd3ae34b386584ef044dd0f27101971"}, + {file = "s3transfer-0.5.2.tar.gz", hash = "sha256:95c58c194ce657a5f4fb0b9e60a84968c808888aed628cd98ab8771fe1db98ed"}, ] sh = [ {file = "sh-1.14.2-py2.py3-none-any.whl", hash = "sha256:4921ac9c1a77ec8084bdfaf152fe14138e2b3557cc740002c1a97076321fce8a"}, @@ -805,93 +775,81 @@ snowballstemmer = [ {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -typed-ast = [ - {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"}, - {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"}, - {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"}, - {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"}, - {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"}, - {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"}, - {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"}, - {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"}, - {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"}, - {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"}, - {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"}, - {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"}, - {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"}, - {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"}, - {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"}, +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, + {file = "typing_extensions-4.2.0-py3-none-any.whl", hash = "sha256:6657594ee297170d19f67d55c05852a874e7eb634f4f753dbd667855e07c1708"}, + {file = "typing_extensions-4.2.0.tar.gz", hash = "sha256:f1c24655a0da0d1b67f07e17a5e6b2a105894e6824b92096378bb3668ef02376"}, ] urllib3 = [ - {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, - {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, + {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, + {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] wrapt = [ - {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"}, - {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"}, - {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"}, - {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"}, - {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"}, - {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"}, - {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"}, - {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"}, - {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"}, - {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"}, - {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"}, - {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"}, - {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"}, - {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"}, - {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"}, - {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"}, - {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"}, - {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"}, - {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"}, -] -zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, + {file = "wrapt-1.14.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59"}, + {file = "wrapt-1.14.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462"}, + {file = "wrapt-1.14.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320"}, + {file = "wrapt-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069"}, + {file = "wrapt-1.14.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656"}, + {file = "wrapt-1.14.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c"}, + {file = "wrapt-1.14.1-cp310-cp310-win32.whl", hash = "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8"}, + {file = "wrapt-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3"}, + {file = "wrapt-1.14.1-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d"}, + {file = "wrapt-1.14.1-cp35-cp35m-win32.whl", hash = "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7"}, + {file = "wrapt-1.14.1-cp35-cp35m-win_amd64.whl", hash = "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00"}, + {file = "wrapt-1.14.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1"}, + {file = "wrapt-1.14.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1"}, + {file = "wrapt-1.14.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569"}, + {file = "wrapt-1.14.1-cp36-cp36m-win32.whl", hash = "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed"}, + {file = "wrapt-1.14.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471"}, + {file = "wrapt-1.14.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d"}, + {file = "wrapt-1.14.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015"}, + {file = "wrapt-1.14.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a"}, + {file = "wrapt-1.14.1-cp37-cp37m-win32.whl", hash = "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853"}, + {file = "wrapt-1.14.1-cp37-cp37m-win_amd64.whl", hash = "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456"}, + {file = "wrapt-1.14.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1"}, + {file = "wrapt-1.14.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0"}, + {file = "wrapt-1.14.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57"}, + {file = "wrapt-1.14.1-cp38-cp38-win32.whl", hash = "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5"}, + {file = "wrapt-1.14.1-cp38-cp38-win_amd64.whl", hash = "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383"}, + {file = "wrapt-1.14.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735"}, + {file = "wrapt-1.14.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3"}, + {file = "wrapt-1.14.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe"}, + {file = "wrapt-1.14.1-cp39-cp39-win32.whl", hash = "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5"}, + {file = "wrapt-1.14.1-cp39-cp39-win_amd64.whl", hash = "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb"}, + {file = "wrapt-1.14.1.tar.gz", hash = "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d"}, ] diff --git a/tools/devctr/pyproject.toml b/tools/devctr/pyproject.toml index 2265c45d6de..dd52a0399ff 100644 --- a/tools/devctr/pyproject.toml +++ b/tools/devctr/pyproject.toml @@ -5,7 +5,7 @@ description = "Firecracker python dependencies" authors = ["Your Name "] [tool.poetry.dependencies] -python = "3.6.9" +python = "3.10.4" boto3 = "*" botocore = "*" dataclasses = "*" diff --git a/tools/devtool b/tools/devtool index 6e5269d022a..b3da55ac520 100755 --- a/tools/devtool +++ b/tools/devtool @@ -72,7 +72,7 @@ DEVCTR_IMAGE_NO_TAG="public.ecr.aws/firecracker/fcuvm" # Development container tag -DEVCTR_IMAGE_TAG="v35" +DEVCTR_IMAGE_TAG="v36" # Development container image (name:tag) # This should be updated whenever we upgrade the development container. From e97bf9f9628b1ccf96dca182a64971d0ea092fec Mon Sep 17 00:00:00 2001 From: Matthew Schlebusch Date: Tue, 31 May 2022 10:36:31 +0100 Subject: [PATCH 12/32] Bump internal crate vm-memory version to 0.3.0 See https://rustsec.org/advisories/RUSTSEC-2020-0157 Signed-off-by: Matthew Schlebusch --- Cargo.lock | 10 +++++----- src/vm-memory/Cargo.toml | 2 +- tests/framework/utils.py | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2543930f8ae..7cccea5ddae 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -68,7 +68,7 @@ dependencies = [ "versionize", "versionize_derive", "vm-fdt", - "vm-memory 0.1.0", + "vm-memory 0.3.0", ] [[package]] @@ -384,7 +384,7 @@ dependencies = [ "versionize", "versionize_derive", "virtio_gen", - "vm-memory 0.1.0", + "vm-memory 0.3.0", "vm-superio", ] @@ -491,7 +491,7 @@ dependencies = [ "libc", "proptest", "utils", - "vm-memory 0.1.0", + "vm-memory 0.3.0", ] [[package]] @@ -1203,7 +1203,7 @@ checksum = "bd986f4fdf949ab2181c7b4fedb03fb0e9de6b0aa788fff247b2608701ce3457" [[package]] name = "vm-memory" -version = "0.1.0" +version = "0.3.0" dependencies = [ "libc", "utils", @@ -1252,7 +1252,7 @@ dependencies = [ "versionize", "versionize_derive", "virtio_gen", - "vm-memory 0.1.0", + "vm-memory 0.3.0", "vm-superio", ] diff --git a/src/vm-memory/Cargo.toml b/src/vm-memory/Cargo.toml index c9820faf536..6b753aab5a8 100644 --- a/src/vm-memory/Cargo.toml +++ b/src/vm-memory/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "vm-memory" -version = "0.1.0" +version = "0.3.0" authors = ["Amazon Firecracker team "] edition = "2018" license = "Apache-2.0" diff --git a/tests/framework/utils.py b/tests/framework/utils.py index ddd200378ba..3808657697a 100644 --- a/tests/framework/utils.py +++ b/tests/framework/utils.py @@ -550,9 +550,9 @@ def configure_git_safe_directory(): utils.run_cmd('git config --global ' '--add safe.directory {}'.format(working_dir.parent)) except ChildProcessError as error: - assert False, "Failure to set the safe.directory " \ - "git config to [{}] required for gitlint tests: " \ - "{}".format(working_dir.parent, error) + raise Exception("Failure to set the safe.directory " + "git config to [{}] required for gitlint tests" + .format(working_dir.parent)) from error def run_cmd(cmd, ignore_return_code=False, no_shell=False, cwd=None): From 5b6d29a7a9acc74ee56c46c0e9b81ad079f3aa08 Mon Sep 17 00:00:00 2001 From: Alexandru-Cezar Sardan Date: Thu, 2 Jun 2022 12:43:56 +0000 Subject: [PATCH 13/32] tests/perf/net: update network latency baselines Signed-off-by: Alexandru-Cezar Sardan --- tests/integration_tests/performance/test_network_latency.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration_tests/performance/test_network_latency.py b/tests/integration_tests/performance/test_network_latency.py index 58db68ab62f..a97644e8215 100644 --- a/tests/integration_tests/performance/test_network_latency.py +++ b/tests/integration_tests/performance/test_network_latency.py @@ -26,7 +26,7 @@ "delta": 0.040 # milliseconds }, "5.10": { - "target": 0.250, # milliseconds + "target": 0.230, # milliseconds "delta": 0.020 # milliseconds } }, From 7d1ba5661dfbc04c9f7c27da1c0144090109b17a Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Mon, 6 Jun 2022 09:41:40 +0100 Subject: [PATCH 14/32] Enhanced code coverage error message Signed-off-by: Jonathan Woollett-Light shorter --- .../integration_tests/build/test_coverage.py | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/tests/integration_tests/build/test_coverage.py b/tests/integration_tests/build/test_coverage.py index 7cc3e400098..883192e7f9b 100644 --- a/tests/integration_tests/build/test_coverage.py +++ b/tests/integration_tests/build/test_coverage.py @@ -116,26 +116,29 @@ def test_coverage(test_fc_session_root_path, test_session_tmp_path): print("Thus, coverage is: {:.2f}%".format(coverage)) coverage_low_msg = ( - 'Current code coverage ({:.2f}%) is below the target ({}%).' - .format(coverage, coverage_target_pct) + 'Current code coverage ({:.2f}%) is >{:.2f}% below the target ({}%).' + .format(coverage, COVERAGE_MAX_DELTA, coverage_target_pct) ) - min_coverage = coverage_target_pct - COVERAGE_MAX_DELTA - assert coverage >= min_coverage, coverage_low_msg + assert coverage >= coverage_target_pct - COVERAGE_MAX_DELTA, \ + coverage_low_msg # Get the name of the variable that needs updating. namespace = globals() - cov_target_name = [name for name in namespace if namespace[name] - is COVERAGE_DICT][0] + cov_target_name = \ + [name for name in namespace if namespace[name] is COVERAGE_DICT][0] coverage_high_msg = ( - 'Current code coverage ({:.2f}%) is above the target ({}%).\n' - 'Please update the value of {}.' - .format(coverage, coverage_target_pct, cov_target_name) + 'Current code coverage ({:.2f}%) is >{:.2f}% above the target ({}%).\n' + 'Please update the value of {}.'.format( + coverage, COVERAGE_MAX_DELTA, coverage_target_pct, cov_target_name + ) ) - assert coverage - coverage_target_pct <= COVERAGE_MAX_DELTA,\ - coverage_high_msg + assert \ + coverage <= coverage_target_pct + COVERAGE_MAX_DELTA, coverage_high_msg - return f"{coverage}%", \ + return ( + f"{coverage}%", f"{coverage_target_pct}% +/- {COVERAGE_MAX_DELTA * 100}%" + ) From 3d2156082281c3d03ebeba6c9972c8f65a725bda Mon Sep 17 00:00:00 2001 From: Arjun Ramachandrula Date: Wed, 22 Dec 2021 13:26:50 -0500 Subject: [PATCH 15/32] devices: import only required virtio_gen bindings Signed-off-by: Arjun Ramachandrula --- src/devices/src/virtio/balloon/device.rs | 2 +- src/devices/src/virtio/block/device.rs | 8 +++++--- src/devices/src/virtio/block/event_handler.rs | 7 ++++--- src/devices/src/virtio/block/request.rs | 5 ++++- src/devices/src/virtio/persist.rs | 15 ++++++++------- 5 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/devices/src/virtio/balloon/device.rs b/src/devices/src/virtio/balloon/device.rs index 7f9f24e6e68..bbc64fe2521 100644 --- a/src/devices/src/virtio/balloon/device.rs +++ b/src/devices/src/virtio/balloon/device.rs @@ -13,7 +13,7 @@ use ::timerfd::{ClockId, SetTimeFlags, TimerFd, TimerState}; use ::logger::{error, IncMetric, METRICS}; use ::utils::eventfd::EventFd; -use ::virtio_gen::virtio_blk::*; +use ::virtio_gen::virtio_blk::VIRTIO_F_VERSION_1; use ::vm_memory::{Address, ByteValued, Bytes, GuestAddress, GuestMemoryMmap}; use super::*; diff --git a/src/devices/src/virtio/block/device.rs b/src/devices/src/virtio/block/device.rs index b897f82dad3..63b9a7b7393 100644 --- a/src/devices/src/virtio/block/device.rs +++ b/src/devices/src/virtio/block/device.rs @@ -17,9 +17,13 @@ use std::sync::Arc; use logger::{error, warn, IncMetric, METRICS}; use rate_limiter::{BucketUpdate, RateLimiter}; +use serde::{Deserialize, Serialize}; use utils::eventfd::EventFd; use utils::kernel_version::{min_kernel_version_for_io_uring, KernelVersion}; -use virtio_gen::virtio_blk::*; +use virtio_gen::virtio_blk::{ + VIRTIO_BLK_F_FLUSH, VIRTIO_BLK_F_RO, VIRTIO_BLK_ID_BYTES, VIRTIO_F_VERSION_1, +}; +use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; use vm_memory::GuestMemoryMmap; use super::io as block_io; @@ -31,8 +35,6 @@ use super::{ }; use crate::virtio::{IrqTrigger, IrqType}; use block_io::FileEngine; -use serde::{Deserialize, Serialize}; -use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; /// Configuration options for disk caching. #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] diff --git a/src/devices/src/virtio/block/event_handler.rs b/src/devices/src/virtio/block/event_handler.rs index 7015de03e52..36272b080cb 100644 --- a/src/devices/src/virtio/block/event_handler.rs +++ b/src/devices/src/virtio/block/event_handler.rs @@ -102,6 +102,10 @@ impl MutEventSubscriber for Block { pub mod tests { use std::sync::{Arc, Mutex}; + use event_manager::{EventManager, SubscriberOps}; + use virtio_gen::virtio_blk::{VIRTIO_BLK_S_OK, VIRTIO_BLK_T_OUT}; + use vm_memory::{Bytes, GuestAddress}; + use super::*; use crate::virtio::block::device::FileEngineType; use crate::virtio::block::test_utils::{ @@ -109,9 +113,6 @@ pub mod tests { }; use crate::virtio::queue::tests::*; use crate::virtio::test_utils::{default_mem, initialize_virtqueue, VirtQueue}; - use event_manager::{EventManager, SubscriberOps}; - use virtio_gen::virtio_blk::*; - use vm_memory::{Bytes, GuestAddress}; #[test] fn test_event_handler() { diff --git a/src/devices/src/virtio/block/request.rs b/src/devices/src/virtio/block/request.rs index 1d96a0cb210..010dbf0756d 100644 --- a/src/devices/src/virtio/block/request.rs +++ b/src/devices/src/virtio/block/request.rs @@ -9,7 +9,10 @@ use std::convert::From; use std::result; use logger::{error, IncMetric, METRICS}; -use virtio_gen::virtio_blk::*; +pub use virtio_gen::virtio_blk::{ + VIRTIO_BLK_ID_BYTES, VIRTIO_BLK_S_IOERR, VIRTIO_BLK_S_OK, VIRTIO_BLK_S_UNSUPP, + VIRTIO_BLK_T_FLUSH, VIRTIO_BLK_T_GET_ID, VIRTIO_BLK_T_IN, VIRTIO_BLK_T_OUT, +}; use vm_memory::{ByteValued, Bytes, GuestAddress, GuestMemoryError, GuestMemoryMmap}; use super::super::DescriptorChain; diff --git a/src/devices/src/virtio/persist.rs b/src/devices/src/virtio/persist.rs index 92ad666b0eb..7b0b8a2b190 100644 --- a/src/devices/src/virtio/persist.rs +++ b/src/devices/src/virtio/persist.rs @@ -3,18 +3,19 @@ //! Defines the structures needed for saving/restoring Virtio primitives. -use super::device::*; -use super::queue::*; -use crate::virtio::MmioTransport; +use std::num::Wrapping; +use std::sync::atomic::Ordering; +use std::sync::{Arc, Mutex}; + use snapshot::Persist; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; +use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; use vm_memory::{address::Address, GuestAddress, GuestMemoryMmap}; -use std::num::Wrapping; -use std::sync::atomic::Ordering; -use std::sync::{Arc, Mutex}; -use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; +use super::device::*; +use super::queue::*; +use crate::virtio::MmioTransport; #[derive(Debug)] pub enum Error { From f96f67a589b675dca1e16de90cb551ba73c09b47 Mon Sep 17 00:00:00 2001 From: Diana Popa Date: Fri, 22 Apr 2022 12:49:23 +0300 Subject: [PATCH 16/32] virtio_gen: regenerate only necessary bindings Signed-off-by: Arjun Ramachandrula --- src/virtio_gen/src/virtio_blk.rs | 476 +------------------- src/virtio_gen/src/virtio_net.rs | 718 +++++++----------------------- src/virtio_gen/src/virtio_ring.rs | 458 +------------------ 3 files changed, 192 insertions(+), 1460 deletions(-) diff --git a/src/virtio_gen/src/virtio_blk.rs b/src/virtio_gen/src/virtio_blk.rs index fcd5a5d7254..b6a0cc8b8a4 100644 --- a/src/virtio_gen/src/virtio_blk.rs +++ b/src/virtio_gen/src/virtio_blk.rs @@ -1,32 +1,24 @@ // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -/* automatically generated by rust-bindgen */ +/* + * automatically generated by rust-bindgen 0.59.2 + * From upstream linux v5.10 include/uapi/linux/virtio_blk.h at commit: + * 856f88f27bbc4d3b4b88ce6fe23964ffe60ea649 + * using + * ``` + * --with-derive-default --with-derive-partialeq + * --allowlist-var "VIRTIO_BLK_.*" --allowlist-var "VIRTIO_F_.*" + * ``` + */ -pub const __BITS_PER_LONG: u32 = 64; -pub const __FD_SETSIZE: u32 = 1024; -pub const VIRTIO_ID_NET: u32 = 1; -pub const VIRTIO_ID_BLOCK: u32 = 2; -pub const VIRTIO_ID_CONSOLE: u32 = 3; -pub const VIRTIO_ID_RNG: u32 = 4; -pub const VIRTIO_ID_BALLOON: u32 = 5; -pub const VIRTIO_ID_RPMSG: u32 = 7; -pub const VIRTIO_ID_SCSI: u32 = 8; -pub const VIRTIO_ID_9P: u32 = 9; -pub const VIRTIO_ID_RPROC_SERIAL: u32 = 11; -pub const VIRTIO_ID_CAIF: u32 = 12; -pub const VIRTIO_ID_GPU: u32 = 16; -pub const VIRTIO_ID_INPUT: u32 = 18; -pub const VIRTIO_CONFIG_S_ACKNOWLEDGE: u32 = 1; -pub const VIRTIO_CONFIG_S_DRIVER: u32 = 2; -pub const VIRTIO_CONFIG_S_DRIVER_OK: u32 = 4; -pub const VIRTIO_CONFIG_S_FEATURES_OK: u32 = 8; -pub const VIRTIO_CONFIG_S_FAILED: u32 = 128; -pub const VIRTIO_TRANSPORT_F_START: u32 = 28; -pub const VIRTIO_TRANSPORT_F_END: u32 = 33; pub const VIRTIO_F_NOTIFY_ON_EMPTY: u32 = 24; pub const VIRTIO_F_ANY_LAYOUT: u32 = 27; pub const VIRTIO_F_VERSION_1: u32 = 32; +pub const VIRTIO_F_IOMMU_PLATFORM: u32 = 33; +pub const VIRTIO_F_RING_PACKED: u32 = 34; +pub const VIRTIO_F_ORDER_PLATFORM: u32 = 36; +pub const VIRTIO_F_SR_IOV: u32 = 37; pub const VIRTIO_BLK_F_SIZE_MAX: u32 = 1; pub const VIRTIO_BLK_F_SEG_MAX: u32 = 2; pub const VIRTIO_BLK_F_GEOMETRY: u32 = 4; @@ -34,6 +26,8 @@ pub const VIRTIO_BLK_F_RO: u32 = 5; pub const VIRTIO_BLK_F_BLK_SIZE: u32 = 6; pub const VIRTIO_BLK_F_TOPOLOGY: u32 = 10; pub const VIRTIO_BLK_F_MQ: u32 = 12; +pub const VIRTIO_BLK_F_DISCARD: u32 = 13; +pub const VIRTIO_BLK_F_WRITE_ZEROES: u32 = 14; pub const VIRTIO_BLK_F_BARRIER: u32 = 0; pub const VIRTIO_BLK_F_SCSI: u32 = 7; pub const VIRTIO_BLK_F_FLUSH: u32 = 9; @@ -45,442 +39,10 @@ pub const VIRTIO_BLK_T_OUT: u32 = 1; pub const VIRTIO_BLK_T_SCSI_CMD: u32 = 2; pub const VIRTIO_BLK_T_FLUSH: u32 = 4; pub const VIRTIO_BLK_T_GET_ID: u32 = 8; +pub const VIRTIO_BLK_T_DISCARD: u32 = 11; +pub const VIRTIO_BLK_T_WRITE_ZEROES: u32 = 13; pub const VIRTIO_BLK_T_BARRIER: u32 = 2147483648; +pub const VIRTIO_BLK_WRITE_ZEROES_FLAG_UNMAP: u32 = 1; pub const VIRTIO_BLK_S_OK: u32 = 0; pub const VIRTIO_BLK_S_IOERR: u32 = 1; pub const VIRTIO_BLK_S_UNSUPP: u32 = 2; -pub type __s8 = ::std::os::raw::c_schar; -pub type __u8 = ::std::os::raw::c_uchar; -pub type __s16 = ::std::os::raw::c_short; -pub type __u16 = ::std::os::raw::c_ushort; -pub type __s32 = ::std::os::raw::c_int; -pub type __u32 = ::std::os::raw::c_uint; -pub type __s64 = ::std::os::raw::c_longlong; -pub type __u64 = ::std::os::raw::c_ulonglong; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fd_set { - pub fds_bits: [::std::os::raw::c_ulong; 16usize], -} -#[test] -fn bindgen_test_layout___kernel_fd_set() { - assert_eq!( - ::std::mem::size_of::<__kernel_fd_set>(), - 128usize, - concat!("Size of: ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fd_set>(), - 8usize, - concat!("Alignment of ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fd_set>())).fds_bits as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fd_set), - "::", - stringify!(fds_bits) - ) - ); -} -pub type __kernel_sighandler_t = - ::std::option::Option; -pub type __kernel_key_t = ::std::os::raw::c_int; -pub type __kernel_mqd_t = ::std::os::raw::c_int; -pub type __kernel_old_uid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_gid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_dev_t = ::std::os::raw::c_ulong; -pub type __kernel_long_t = ::std::os::raw::c_long; -pub type __kernel_ulong_t = ::std::os::raw::c_ulong; -pub type __kernel_ino_t = __kernel_ulong_t; -pub type __kernel_mode_t = ::std::os::raw::c_uint; -pub type __kernel_pid_t = ::std::os::raw::c_int; -pub type __kernel_ipc_pid_t = ::std::os::raw::c_int; -pub type __kernel_uid_t = ::std::os::raw::c_uint; -pub type __kernel_gid_t = ::std::os::raw::c_uint; -pub type __kernel_suseconds_t = __kernel_long_t; -pub type __kernel_daddr_t = ::std::os::raw::c_int; -pub type __kernel_uid32_t = ::std::os::raw::c_uint; -pub type __kernel_gid32_t = ::std::os::raw::c_uint; -pub type __kernel_size_t = __kernel_ulong_t; -pub type __kernel_ssize_t = __kernel_long_t; -pub type __kernel_ptrdiff_t = __kernel_long_t; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fsid_t { - pub val: [::std::os::raw::c_int; 2usize], -} -#[test] -fn bindgen_test_layout___kernel_fsid_t() { - assert_eq!( - ::std::mem::size_of::<__kernel_fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fsid_t>(), - 4usize, - concat!("Alignment of ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fsid_t>())).val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fsid_t), - "::", - stringify!(val) - ) - ); -} -pub type __kernel_off_t = __kernel_long_t; -pub type __kernel_loff_t = ::std::os::raw::c_longlong; -pub type __kernel_time_t = __kernel_long_t; -pub type __kernel_clock_t = __kernel_long_t; -pub type __kernel_timer_t = ::std::os::raw::c_int; -pub type __kernel_clockid_t = ::std::os::raw::c_int; -pub type __kernel_caddr_t = *mut ::std::os::raw::c_char; -pub type __kernel_uid16_t = ::std::os::raw::c_ushort; -pub type __kernel_gid16_t = ::std::os::raw::c_ushort; -pub type __le16 = __u16; -pub type __be16 = __u16; -pub type __le32 = __u32; -pub type __be32 = __u32; -pub type __le64 = __u64; -pub type __be64 = __u64; -pub type __sum16 = __u16; -pub type __wsum = __u32; -pub type __virtio16 = __u16; -pub type __virtio32 = __u32; -pub type __virtio64 = __u64; -#[repr(C, packed)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_blk_config { - pub capacity: __u64, - pub size_max: __u32, - pub seg_max: __u32, - pub geometry: virtio_blk_config_virtio_blk_geometry, - pub blk_size: __u32, - pub physical_block_exp: __u8, - pub alignment_offset: __u8, - pub min_io_size: __u16, - pub opt_io_size: __u32, - pub wce: __u8, - pub unused: __u8, - pub num_queues: __u16, -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_blk_config_virtio_blk_geometry { - pub cylinders: __u16, - pub heads: __u8, - pub sectors: __u8, -} -#[test] -fn bindgen_test_layout_virtio_blk_config_virtio_blk_geometry() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!( - "Size of: ", - stringify!(virtio_blk_config_virtio_blk_geometry) - ) - ); - assert_eq!( - ::std::mem::align_of::(), - 2usize, - concat!( - "Alignment of ", - stringify!(virtio_blk_config_virtio_blk_geometry) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).cylinders as *const _ - as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config_virtio_blk_geometry), - "::", - stringify!(cylinders) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).heads as *const _ - as usize - }, - 2usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config_virtio_blk_geometry), - "::", - stringify!(heads) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).sectors as *const _ - as usize - }, - 3usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config_virtio_blk_geometry), - "::", - stringify!(sectors) - ) - ); -} -#[test] -fn bindgen_test_layout_virtio_blk_config() { - assert_eq!( - ::std::mem::size_of::(), - 36usize, - concat!("Size of: ", stringify!(virtio_blk_config)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(virtio_blk_config)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).capacity as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(capacity) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).size_max as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(size_max) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).seg_max as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(seg_max) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).geometry as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(geometry) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).blk_size as *const _ as usize }, - 20usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(blk_size) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).physical_block_exp as *const _ as usize - }, - 24usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(physical_block_exp) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).alignment_offset as *const _ as usize - }, - 25usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(alignment_offset) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).min_io_size as *const _ as usize }, - 26usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(min_io_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).opt_io_size as *const _ as usize }, - 28usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(opt_io_size) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).wce as *const _ as usize }, - 32usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(wce) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).unused as *const _ as usize }, - 33usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(unused) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).num_queues as *const _ as usize }, - 34usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_config), - "::", - stringify!(num_queues) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_blk_outhdr { - pub type_: __virtio32, - pub ioprio: __virtio32, - pub sector: __virtio64, -} -#[test] -fn bindgen_test_layout_virtio_blk_outhdr() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(virtio_blk_outhdr)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(virtio_blk_outhdr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).type_ as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_outhdr), - "::", - stringify!(type_) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).ioprio as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_outhdr), - "::", - stringify!(ioprio) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sector as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(virtio_blk_outhdr), - "::", - stringify!(sector) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_scsi_inhdr { - pub errors: __virtio32, - pub data_len: __virtio32, - pub sense_len: __virtio32, - pub residual: __virtio32, -} -#[test] -fn bindgen_test_layout_virtio_scsi_inhdr() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(virtio_scsi_inhdr)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(virtio_scsi_inhdr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).errors as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_scsi_inhdr), - "::", - stringify!(errors) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).data_len as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(virtio_scsi_inhdr), - "::", - stringify!(data_len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).sense_len as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(virtio_scsi_inhdr), - "::", - stringify!(sense_len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).residual as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(virtio_scsi_inhdr), - "::", - stringify!(residual) - ) - ); -} diff --git a/src/virtio_gen/src/virtio_net.rs b/src/virtio_gen/src/virtio_net.rs index ebcfe54ad85..ab769a52fbd 100644 --- a/src/virtio_gen/src/virtio_net.rs +++ b/src/virtio_gen/src/virtio_net.rs @@ -1,156 +1,25 @@ // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -/* automatically generated by rust-bindgen */ +/* + * automatically generated by rust-bindgen 0.59.2 + * From upstream linux v5.10 include/uapi/linux/virtio_net.h at commit: + * 856f88f27bbc4d3b4b88ce6fe23964ffe60ea649 + * using + * ``` + * --with-derive-default --with-derive-partialeq + * --allowlist-var "VIRTIO_F_.*" --allowlist-var "VIRTIO_NET_F_.*" + * --allowlist-type "virtio_net_hdr_v1" + * ``` + */ -#[repr(C)] -#[derive(Default)] -pub struct __IncompleteArrayField(::std::marker::PhantomData, [T; 0]); -impl __IncompleteArrayField { - #[inline] - pub fn new() -> Self { - __IncompleteArrayField(::std::marker::PhantomData, []) - } - #[inline] - pub unsafe fn as_ptr(&self) -> *const T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_mut_ptr(&mut self) -> *mut T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_slice(&self, len: usize) -> &[T] { - ::std::slice::from_raw_parts(self.as_ptr(), len) - } - #[inline] - pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] { - ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len) - } -} -impl ::std::fmt::Debug for __IncompleteArrayField { - fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - fmt.write_str("__IncompleteArrayField") - } -} -impl ::std::clone::Clone for __IncompleteArrayField { - #[inline] - fn clone(&self) -> Self { - Self::new() - } -} -pub const __BITS_PER_LONG: u32 = 64; -pub const __FD_SETSIZE: u32 = 1024; -pub const VIRTIO_ID_NET: u32 = 1; -pub const VIRTIO_ID_BLOCK: u32 = 2; -pub const VIRTIO_ID_CONSOLE: u32 = 3; -pub const VIRTIO_ID_RNG: u32 = 4; -pub const VIRTIO_ID_BALLOON: u32 = 5; -pub const VIRTIO_ID_RPMSG: u32 = 7; -pub const VIRTIO_ID_SCSI: u32 = 8; -pub const VIRTIO_ID_9P: u32 = 9; -pub const VIRTIO_ID_RPROC_SERIAL: u32 = 11; -pub const VIRTIO_ID_CAIF: u32 = 12; -pub const VIRTIO_ID_GPU: u32 = 16; -pub const VIRTIO_ID_INPUT: u32 = 18; -pub const VIRTIO_CONFIG_S_ACKNOWLEDGE: u32 = 1; -pub const VIRTIO_CONFIG_S_DRIVER: u32 = 2; -pub const VIRTIO_CONFIG_S_DRIVER_OK: u32 = 4; -pub const VIRTIO_CONFIG_S_FEATURES_OK: u32 = 8; -pub const VIRTIO_CONFIG_S_FAILED: u32 = 128; -pub const VIRTIO_TRANSPORT_F_START: u32 = 28; -pub const VIRTIO_TRANSPORT_F_END: u32 = 33; pub const VIRTIO_F_NOTIFY_ON_EMPTY: u32 = 24; pub const VIRTIO_F_ANY_LAYOUT: u32 = 27; pub const VIRTIO_F_VERSION_1: u32 = 32; -pub const ETH_ALEN: u32 = 6; -pub const ETH_TLEN: u32 = 2; -pub const ETH_HLEN: u32 = 14; -pub const ETH_ZLEN: u32 = 60; -pub const ETH_DATA_LEN: u32 = 1500; -pub const ETH_FRAME_LEN: u32 = 1514; -pub const ETH_FCS_LEN: u32 = 4; -pub const ETH_P_LOOP: u32 = 96; -pub const ETH_P_PUP: u32 = 512; -pub const ETH_P_PUPAT: u32 = 513; -pub const ETH_P_TSN: u32 = 8944; -pub const ETH_P_IP: u32 = 2048; -pub const ETH_P_X25: u32 = 2053; -pub const ETH_P_ARP: u32 = 2054; -pub const ETH_P_BPQ: u32 = 2303; -pub const ETH_P_IEEEPUP: u32 = 2560; -pub const ETH_P_IEEEPUPAT: u32 = 2561; -pub const ETH_P_BATMAN: u32 = 17157; -pub const ETH_P_DEC: u32 = 24576; -pub const ETH_P_DNA_DL: u32 = 24577; -pub const ETH_P_DNA_RC: u32 = 24578; -pub const ETH_P_DNA_RT: u32 = 24579; -pub const ETH_P_LAT: u32 = 24580; -pub const ETH_P_DIAG: u32 = 24581; -pub const ETH_P_CUST: u32 = 24582; -pub const ETH_P_SCA: u32 = 24583; -pub const ETH_P_TEB: u32 = 25944; -pub const ETH_P_RARP: u32 = 32821; -pub const ETH_P_ATALK: u32 = 32923; -pub const ETH_P_AARP: u32 = 33011; -pub const ETH_P_8021Q: u32 = 33024; -pub const ETH_P_IPX: u32 = 33079; -pub const ETH_P_IPV6: u32 = 34525; -pub const ETH_P_PAUSE: u32 = 34824; -pub const ETH_P_SLOW: u32 = 34825; -pub const ETH_P_WCCP: u32 = 34878; -pub const ETH_P_MPLS_UC: u32 = 34887; -pub const ETH_P_MPLS_MC: u32 = 34888; -pub const ETH_P_ATMMPOA: u32 = 34892; -pub const ETH_P_PPP_DISC: u32 = 34915; -pub const ETH_P_PPP_SES: u32 = 34916; -pub const ETH_P_LINK_CTL: u32 = 34924; -pub const ETH_P_ATMFATE: u32 = 34948; -pub const ETH_P_PAE: u32 = 34958; -pub const ETH_P_AOE: u32 = 34978; -pub const ETH_P_8021AD: u32 = 34984; -pub const ETH_P_802_EX1: u32 = 34997; -pub const ETH_P_TIPC: u32 = 35018; -pub const ETH_P_8021AH: u32 = 35047; -pub const ETH_P_MVRP: u32 = 35061; -pub const ETH_P_1588: u32 = 35063; -pub const ETH_P_PRP: u32 = 35067; -pub const ETH_P_FCOE: u32 = 35078; -pub const ETH_P_TDLS: u32 = 35085; -pub const ETH_P_FIP: u32 = 35092; -pub const ETH_P_80221: u32 = 35095; -pub const ETH_P_LOOPBACK: u32 = 36864; -pub const ETH_P_QINQ1: u32 = 37120; -pub const ETH_P_QINQ2: u32 = 37376; -pub const ETH_P_QINQ3: u32 = 37632; -pub const ETH_P_EDSA: u32 = 56026; -pub const ETH_P_AF_IUCV: u32 = 64507; -pub const ETH_P_802_3_MIN: u32 = 1536; -pub const ETH_P_802_3: u32 = 1; -pub const ETH_P_AX25: u32 = 2; -pub const ETH_P_ALL: u32 = 3; -pub const ETH_P_802_2: u32 = 4; -pub const ETH_P_SNAP: u32 = 5; -pub const ETH_P_DDCMP: u32 = 6; -pub const ETH_P_WAN_PPP: u32 = 7; -pub const ETH_P_PPP_MP: u32 = 8; -pub const ETH_P_LOCALTALK: u32 = 9; -pub const ETH_P_CAN: u32 = 12; -pub const ETH_P_CANFD: u32 = 13; -pub const ETH_P_PPPTALK: u32 = 16; -pub const ETH_P_TR_802_2: u32 = 17; -pub const ETH_P_MOBITEX: u32 = 21; -pub const ETH_P_CONTROL: u32 = 22; -pub const ETH_P_IRDA: u32 = 23; -pub const ETH_P_ECONET: u32 = 24; -pub const ETH_P_HDLC: u32 = 25; -pub const ETH_P_ARCNET: u32 = 26; -pub const ETH_P_DSA: u32 = 27; -pub const ETH_P_TRAILER: u32 = 28; -pub const ETH_P_PHONET: u32 = 245; -pub const ETH_P_IEEE802154: u32 = 246; -pub const ETH_P_CAIF: u32 = 247; -pub const ETH_P_XDSA: u32 = 248; +pub const VIRTIO_F_IOMMU_PLATFORM: u32 = 33; +pub const VIRTIO_F_RING_PACKED: u32 = 34; +pub const VIRTIO_F_ORDER_PLATFORM: u32 = 36; +pub const VIRTIO_F_SR_IOV: u32 = 37; pub const VIRTIO_NET_F_CSUM: u32 = 0; pub const VIRTIO_NET_F_GUEST_CSUM: u32 = 1; pub const VIRTIO_NET_F_CTRL_GUEST_OFFLOADS: u32 = 2; @@ -173,562 +42,301 @@ pub const VIRTIO_NET_F_CTRL_RX_EXTRA: u32 = 20; pub const VIRTIO_NET_F_GUEST_ANNOUNCE: u32 = 21; pub const VIRTIO_NET_F_MQ: u32 = 22; pub const VIRTIO_NET_F_CTRL_MAC_ADDR: u32 = 23; +pub const VIRTIO_NET_F_HASH_REPORT: u32 = 57; +pub const VIRTIO_NET_F_RSS: u32 = 60; +pub const VIRTIO_NET_F_RSC_EXT: u32 = 61; +pub const VIRTIO_NET_F_STANDBY: u32 = 62; +pub const VIRTIO_NET_F_SPEED_DUPLEX: u32 = 63; pub const VIRTIO_NET_F_GSO: u32 = 6; -pub const VIRTIO_NET_S_LINK_UP: u32 = 1; -pub const VIRTIO_NET_S_ANNOUNCE: u32 = 2; -pub const VIRTIO_NET_HDR_F_NEEDS_CSUM: u32 = 1; -pub const VIRTIO_NET_HDR_F_DATA_VALID: u32 = 2; -pub const VIRTIO_NET_HDR_GSO_NONE: u32 = 0; -pub const VIRTIO_NET_HDR_GSO_TCPV4: u32 = 1; -pub const VIRTIO_NET_HDR_GSO_UDP: u32 = 3; -pub const VIRTIO_NET_HDR_GSO_TCPV6: u32 = 4; -pub const VIRTIO_NET_HDR_GSO_ECN: u32 = 128; -pub const VIRTIO_NET_OK: u32 = 0; -pub const VIRTIO_NET_ERR: u32 = 1; -pub const VIRTIO_NET_CTRL_RX: u32 = 0; -pub const VIRTIO_NET_CTRL_RX_PROMISC: u32 = 0; -pub const VIRTIO_NET_CTRL_RX_ALLMULTI: u32 = 1; -pub const VIRTIO_NET_CTRL_RX_ALLUNI: u32 = 2; -pub const VIRTIO_NET_CTRL_RX_NOMULTI: u32 = 3; -pub const VIRTIO_NET_CTRL_RX_NOUNI: u32 = 4; -pub const VIRTIO_NET_CTRL_RX_NOBCAST: u32 = 5; -pub const VIRTIO_NET_CTRL_MAC: u32 = 1; -pub const VIRTIO_NET_CTRL_MAC_TABLE_SET: u32 = 0; -pub const VIRTIO_NET_CTRL_MAC_ADDR_SET: u32 = 1; -pub const VIRTIO_NET_CTRL_VLAN: u32 = 2; -pub const VIRTIO_NET_CTRL_VLAN_ADD: u32 = 0; -pub const VIRTIO_NET_CTRL_VLAN_DEL: u32 = 1; -pub const VIRTIO_NET_CTRL_ANNOUNCE: u32 = 3; -pub const VIRTIO_NET_CTRL_ANNOUNCE_ACK: u32 = 0; -pub const VIRTIO_NET_CTRL_MQ: u32 = 4; -pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_SET: u32 = 0; -pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MIN: u32 = 1; -pub const VIRTIO_NET_CTRL_MQ_VQ_PAIRS_MAX: u32 = 32768; -pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS: u32 = 5; -pub const VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET: u32 = 0; -pub type __s8 = ::std::os::raw::c_schar; pub type __u8 = ::std::os::raw::c_uchar; -pub type __s16 = ::std::os::raw::c_short; pub type __u16 = ::std::os::raw::c_ushort; -pub type __s32 = ::std::os::raw::c_int; -pub type __u32 = ::std::os::raw::c_uint; -pub type __s64 = ::std::os::raw::c_longlong; -pub type __u64 = ::std::os::raw::c_ulonglong; +pub type __le16 = __u16; +pub type __virtio16 = __u16; #[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fd_set { - pub fds_bits: [::std::os::raw::c_ulong; 16usize], +#[derive(Copy, Clone)] +pub struct virtio_net_hdr_v1 { + pub flags: __u8, + pub gso_type: __u8, + pub hdr_len: __virtio16, + pub gso_size: __virtio16, + pub __bindgen_anon_1: virtio_net_hdr_v1__bindgen_ty_1, + pub num_buffers: __virtio16, } -#[test] -fn bindgen_test_layout___kernel_fd_set() { - assert_eq!( - ::std::mem::size_of::<__kernel_fd_set>(), - 128usize, - concat!("Size of: ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fd_set>(), - 8usize, - concat!("Alignment of ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fd_set>())).fds_bits as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fd_set), - "::", - stringify!(fds_bits) - ) - ); +#[repr(C)] +#[derive(Copy, Clone)] +pub union virtio_net_hdr_v1__bindgen_ty_1 { + pub __bindgen_anon_1: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1, + pub csum: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2, + pub rsc: virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3, } -pub type __kernel_sighandler_t = - ::std::option::Option; -pub type __kernel_key_t = ::std::os::raw::c_int; -pub type __kernel_mqd_t = ::std::os::raw::c_int; -pub type __kernel_old_uid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_gid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_dev_t = ::std::os::raw::c_ulong; -pub type __kernel_long_t = ::std::os::raw::c_long; -pub type __kernel_ulong_t = ::std::os::raw::c_ulong; -pub type __kernel_ino_t = __kernel_ulong_t; -pub type __kernel_mode_t = ::std::os::raw::c_uint; -pub type __kernel_pid_t = ::std::os::raw::c_int; -pub type __kernel_ipc_pid_t = ::std::os::raw::c_int; -pub type __kernel_uid_t = ::std::os::raw::c_uint; -pub type __kernel_gid_t = ::std::os::raw::c_uint; -pub type __kernel_suseconds_t = __kernel_long_t; -pub type __kernel_daddr_t = ::std::os::raw::c_int; -pub type __kernel_uid32_t = ::std::os::raw::c_uint; -pub type __kernel_gid32_t = ::std::os::raw::c_uint; -pub type __kernel_size_t = __kernel_ulong_t; -pub type __kernel_ssize_t = __kernel_long_t; -pub type __kernel_ptrdiff_t = __kernel_long_t; #[repr(C)] #[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fsid_t { - pub val: [::std::os::raw::c_int; 2usize], +pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1 { + pub csum_start: __virtio16, + pub csum_offset: __virtio16, } #[test] -fn bindgen_test_layout___kernel_fsid_t() { +fn bindgen_test_layout_virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1() { assert_eq!( - ::std::mem::size_of::<__kernel_fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fsid_t>(), + ::std::mem::size_of::(), 4usize, - concat!("Alignment of ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fsid_t>())).val as *const _ as usize }, - 0usize, concat!( - "Offset of field: ", - stringify!(__kernel_fsid_t), - "::", - stringify!(val) + "Size of: ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1) ) ); -} -pub type __kernel_off_t = __kernel_long_t; -pub type __kernel_loff_t = ::std::os::raw::c_longlong; -pub type __kernel_time_t = __kernel_long_t; -pub type __kernel_clock_t = __kernel_long_t; -pub type __kernel_timer_t = ::std::os::raw::c_int; -pub type __kernel_clockid_t = ::std::os::raw::c_int; -pub type __kernel_caddr_t = *mut ::std::os::raw::c_char; -pub type __kernel_uid16_t = ::std::os::raw::c_ushort; -pub type __kernel_gid16_t = ::std::os::raw::c_ushort; -pub type __le16 = __u16; -pub type __be16 = __u16; -pub type __le32 = __u32; -pub type __be32 = __u32; -pub type __le64 = __u64; -pub type __be64 = __u64; -pub type __sum16 = __u16; -pub type __wsum = __u32; -pub type __virtio16 = __u16; -pub type __virtio32 = __u32; -pub type __virtio64 = __u64; -#[repr(C, packed)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct ethhdr { - pub h_dest: [::std::os::raw::c_uchar; 6usize], - pub h_source: [::std::os::raw::c_uchar; 6usize], - pub h_proto: __be16, -} -#[test] -fn bindgen_test_layout_ethhdr() { - assert_eq!( - ::std::mem::size_of::(), - 14usize, - concat!("Size of: ", stringify!(ethhdr)) - ); assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(ethhdr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).h_dest as *const _ as usize }, - 0usize, + ::std::mem::align_of::(), + 2usize, concat!( - "Offset of field: ", - stringify!(ethhdr), - "::", - stringify!(h_dest) + "Alignment of ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).h_source as *const _ as usize }, - 6usize, + unsafe { + &(*(::std::ptr::null::())).csum_start + as *const _ as usize + }, + 0usize, concat!( "Offset of field: ", - stringify!(ethhdr), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1), "::", - stringify!(h_source) + stringify!(csum_start) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).h_proto as *const _ as usize }, - 12usize, + unsafe { + &(*(::std::ptr::null::())).csum_offset + as *const _ as usize + }, + 2usize, concat!( "Offset of field: ", - stringify!(ethhdr), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_1), "::", - stringify!(h_proto) + stringify!(csum_offset) ) ); } -#[repr(C, packed)] +#[repr(C)] #[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_config { - pub mac: [__u8; 6usize], - pub status: __u16, - pub max_virtqueue_pairs: __u16, - pub mtu: __u16, +pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2 { + pub start: __virtio16, + pub offset: __virtio16, } #[test] -fn bindgen_test_layout_virtio_net_config() { +fn bindgen_test_layout_virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2() { assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(virtio_net_config)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(virtio_net_config)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).mac as *const _ as usize }, - 0usize, + ::std::mem::size_of::(), + 4usize, concat!( - "Offset of field: ", - stringify!(virtio_net_config), - "::", - stringify!(mac) + "Size of: ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).status as *const _ as usize }, - 6usize, + ::std::mem::align_of::(), + 2usize, concat!( - "Offset of field: ", - stringify!(virtio_net_config), - "::", - stringify!(status) + "Alignment of ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2) ) ); assert_eq!( unsafe { - &(*(::std::ptr::null::())).max_virtqueue_pairs as *const _ as usize + &(*(::std::ptr::null::())).start + as *const _ as usize }, - 8usize, + 0usize, concat!( "Offset of field: ", - stringify!(virtio_net_config), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2), "::", - stringify!(max_virtqueue_pairs) + stringify!(start) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).mtu as *const _ as usize }, - 10usize, + unsafe { + &(*(::std::ptr::null::())).offset + as *const _ as usize + }, + 2usize, concat!( "Offset of field: ", - stringify!(virtio_net_config), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_2), "::", - stringify!(mtu) + stringify!(offset) ) ); } #[repr(C)] #[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_hdr_v1 { - pub flags: __u8, - pub gso_type: __u8, - pub hdr_len: __virtio16, - pub gso_size: __virtio16, - pub csum_start: __virtio16, - pub csum_offset: __virtio16, - pub num_buffers: __virtio16, +pub struct virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3 { + pub segments: __le16, + pub dup_acks: __le16, } #[test] -fn bindgen_test_layout_virtio_net_hdr_v1() { +fn bindgen_test_layout_virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3() { assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(virtio_net_hdr_v1)) + ::std::mem::size_of::(), + 4usize, + concat!( + "Size of: ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3) + ) ); assert_eq!( - ::std::mem::align_of::(), + ::std::mem::align_of::(), 2usize, - concat!("Alignment of ", stringify!(virtio_net_hdr_v1)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, - 0usize, concat!( - "Offset of field: ", - stringify!(virtio_net_hdr_v1), - "::", - stringify!(flags) + "Alignment of ", + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).gso_type as *const _ as usize }, - 1usize, + unsafe { + &(*(::std::ptr::null::())).segments + as *const _ as usize + }, + 0usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr_v1), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3), "::", - stringify!(gso_type) + stringify!(segments) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).hdr_len as *const _ as usize }, + unsafe { + &(*(::std::ptr::null::())).dup_acks + as *const _ as usize + }, 2usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr_v1), + stringify!(virtio_net_hdr_v1__bindgen_ty_1__bindgen_ty_3), "::", - stringify!(hdr_len) + stringify!(dup_acks) ) ); +} +#[test] +fn bindgen_test_layout_virtio_net_hdr_v1__bindgen_ty_1() { assert_eq!( - unsafe { &(*(::std::ptr::null::())).gso_size as *const _ as usize }, + ::std::mem::size_of::(), 4usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_hdr_v1), - "::", - stringify!(gso_size) - ) + concat!("Size of: ", stringify!(virtio_net_hdr_v1__bindgen_ty_1)) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).csum_start as *const _ as usize }, - 6usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_hdr_v1), - "::", - stringify!(csum_start) - ) + ::std::mem::align_of::(), + 2usize, + concat!("Alignment of ", stringify!(virtio_net_hdr_v1__bindgen_ty_1)) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).csum_offset as *const _ as usize }, - 8usize, + unsafe { + &(*(::std::ptr::null::())).csum as *const _ as usize + }, + 0usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr_v1), + stringify!(virtio_net_hdr_v1__bindgen_ty_1), "::", - stringify!(csum_offset) + stringify!(csum) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).num_buffers as *const _ as usize }, - 10usize, + unsafe { + &(*(::std::ptr::null::())).rsc as *const _ as usize + }, + 0usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr_v1), + stringify!(virtio_net_hdr_v1__bindgen_ty_1), "::", - stringify!(num_buffers) + stringify!(rsc) ) ); } -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_hdr { - pub flags: __u8, - pub gso_type: __u8, - pub hdr_len: __virtio16, - pub gso_size: __virtio16, - pub csum_start: __virtio16, - pub csum_offset: __virtio16, +impl Default for virtio_net_hdr_v1__bindgen_ty_1 { + fn default() -> Self { + let mut s = ::std::mem::MaybeUninit::::uninit(); + unsafe { + ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } } #[test] -fn bindgen_test_layout_virtio_net_hdr() { +fn bindgen_test_layout_virtio_net_hdr_v1() { assert_eq!( - ::std::mem::size_of::(), - 10usize, - concat!("Size of: ", stringify!(virtio_net_hdr)) + ::std::mem::size_of::(), + 12usize, + concat!("Size of: ", stringify!(virtio_net_hdr_v1)) ); assert_eq!( - ::std::mem::align_of::(), + ::std::mem::align_of::(), 2usize, - concat!("Alignment of ", stringify!(virtio_net_hdr)) + concat!("Alignment of ", stringify!(virtio_net_hdr_v1)) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, + unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, 0usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr), + stringify!(virtio_net_hdr_v1), "::", stringify!(flags) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).gso_type as *const _ as usize }, + unsafe { &(*(::std::ptr::null::())).gso_type as *const _ as usize }, 1usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr), + stringify!(virtio_net_hdr_v1), "::", stringify!(gso_type) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).hdr_len as *const _ as usize }, + unsafe { &(*(::std::ptr::null::())).hdr_len as *const _ as usize }, 2usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr), + stringify!(virtio_net_hdr_v1), "::", stringify!(hdr_len) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).gso_size as *const _ as usize }, + unsafe { &(*(::std::ptr::null::())).gso_size as *const _ as usize }, 4usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr), + stringify!(virtio_net_hdr_v1), "::", stringify!(gso_size) ) ); assert_eq!( - unsafe { &(*(::std::ptr::null::())).csum_start as *const _ as usize }, - 6usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_hdr), - "::", - stringify!(csum_start) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).csum_offset as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_hdr), - "::", - stringify!(csum_offset) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_hdr_mrg_rxbuf { - pub hdr: virtio_net_hdr, - pub num_buffers: __virtio16, -} -#[test] -fn bindgen_test_layout_virtio_net_hdr_mrg_rxbuf() { - assert_eq!( - ::std::mem::size_of::(), - 12usize, - concat!("Size of: ", stringify!(virtio_net_hdr_mrg_rxbuf)) - ); - assert_eq!( - ::std::mem::align_of::(), - 2usize, - concat!("Alignment of ", stringify!(virtio_net_hdr_mrg_rxbuf)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).hdr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_hdr_mrg_rxbuf), - "::", - stringify!(hdr) - ) - ); - assert_eq!( - unsafe { - &(*(::std::ptr::null::())).num_buffers as *const _ as usize - }, + unsafe { &(*(::std::ptr::null::())).num_buffers as *const _ as usize }, 10usize, concat!( "Offset of field: ", - stringify!(virtio_net_hdr_mrg_rxbuf), + stringify!(virtio_net_hdr_v1), "::", stringify!(num_buffers) ) ); } -#[repr(C, packed)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_ctrl_hdr { - pub class: __u8, - pub cmd: __u8, -} -#[test] -fn bindgen_test_layout_virtio_net_ctrl_hdr() { - assert_eq!( - ::std::mem::size_of::(), - 2usize, - concat!("Size of: ", stringify!(virtio_net_ctrl_hdr)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(virtio_net_ctrl_hdr)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).class as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_ctrl_hdr), - "::", - stringify!(class) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).cmd as *const _ as usize }, - 1usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_ctrl_hdr), - "::", - stringify!(cmd) - ) - ); -} -pub type virtio_net_ctrl_ack = __u8; -#[repr(C, packed)] -#[derive(Default)] -pub struct virtio_net_ctrl_mac { - pub entries: __virtio32, - pub macs: __IncompleteArrayField<[__u8; 6usize]>, -} -#[test] -fn bindgen_test_layout_virtio_net_ctrl_mac() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(virtio_net_ctrl_mac)) - ); - assert_eq!( - ::std::mem::align_of::(), - 1usize, - concat!("Alignment of ", stringify!(virtio_net_ctrl_mac)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct virtio_net_ctrl_mq { - pub virtqueue_pairs: __virtio16, -} -#[test] -fn bindgen_test_layout_virtio_net_ctrl_mq() { - assert_eq!( - ::std::mem::size_of::(), - 2usize, - concat!("Size of: ", stringify!(virtio_net_ctrl_mq)) - ); - assert_eq!( - ::std::mem::align_of::(), - 2usize, - concat!("Alignment of ", stringify!(virtio_net_ctrl_mq)) - ); - assert_eq!( +impl Default for virtio_net_hdr_v1 { + fn default() -> Self { + let mut s = ::std::mem::MaybeUninit::::uninit(); unsafe { - &(*(::std::ptr::null::())).virtqueue_pairs as *const _ as usize - }, - 0usize, - concat!( - "Offset of field: ", - stringify!(virtio_net_ctrl_mq), - "::", - stringify!(virtqueue_pairs) - ) - ); + ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } } diff --git a/src/virtio_gen/src/virtio_ring.rs b/src/virtio_gen/src/virtio_ring.rs index 001cb03c8ca..93db8cc7ac0 100644 --- a/src/virtio_gen/src/virtio_ring.rs +++ b/src/virtio_gen/src/virtio_ring.rs @@ -1,453 +1,15 @@ // Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 -/* automatically generated by rust-bindgen */ +/* + * automatically generated by rust-bindgen 0.59.2 + * From upstream linux v5.10 include/uapi/linux/virtio_ring.h at commit: + * 856f88f27bbc4d3b4b88ce6fe23964ffe60ea649 + * using + * ``` + * --with-derive-default --with-derive-partialeq + * --allowlist-var "VIRTIO_RING_F_EVENT_IDX" + * ``` + */ -#[repr(C)] -#[derive(Default)] -pub struct __IncompleteArrayField(::std::marker::PhantomData, [T; 0]); -impl __IncompleteArrayField { - #[inline] - pub fn new() -> Self { - __IncompleteArrayField(::std::marker::PhantomData, []) - } - #[inline] - pub unsafe fn as_ptr(&self) -> *const T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_mut_ptr(&mut self) -> *mut T { - ::std::mem::transmute(self) - } - #[inline] - pub unsafe fn as_slice(&self, len: usize) -> &[T] { - ::std::slice::from_raw_parts(self.as_ptr(), len) - } - #[inline] - pub unsafe fn as_mut_slice(&mut self, len: usize) -> &mut [T] { - ::std::slice::from_raw_parts_mut(self.as_mut_ptr(), len) - } -} -impl ::std::fmt::Debug for __IncompleteArrayField { - fn fmt(&self, fmt: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { - fmt.write_str("__IncompleteArrayField") - } -} -impl ::std::clone::Clone for __IncompleteArrayField { - #[inline] - fn clone(&self) -> Self { - Self::new() - } -} -pub const _STDINT_H: u32 = 1; -pub const _FEATURES_H: u32 = 1; -pub const _DEFAULT_SOURCE: u32 = 1; -pub const __USE_ISOC11: u32 = 1; -pub const __USE_ISOC99: u32 = 1; -pub const __USE_ISOC95: u32 = 1; -pub const __USE_POSIX_IMPLICITLY: u32 = 1; -pub const _POSIX_SOURCE: u32 = 1; -pub const _POSIX_C_SOURCE: u32 = 200809; -pub const __USE_POSIX: u32 = 1; -pub const __USE_POSIX2: u32 = 1; -pub const __USE_POSIX199309: u32 = 1; -pub const __USE_POSIX199506: u32 = 1; -pub const __USE_XOPEN2K: u32 = 1; -pub const __USE_XOPEN2K8: u32 = 1; -pub const _ATFILE_SOURCE: u32 = 1; -pub const __USE_MISC: u32 = 1; -pub const __USE_ATFILE: u32 = 1; -pub const __USE_FORTIFY_LEVEL: u32 = 0; -pub const _STDC_PREDEF_H: u32 = 1; -pub const __STDC_IEC_559__: u32 = 1; -pub const __STDC_IEC_559_COMPLEX__: u32 = 1; -pub const __STDC_ISO_10646__: u32 = 201505; -pub const __STDC_NO_THREADS__: u32 = 1; -pub const __GNU_LIBRARY__: u32 = 6; -pub const __GLIBC__: u32 = 2; -pub const __GLIBC_MINOR__: u32 = 23; -pub const _SYS_CDEFS_H: u32 = 1; -pub const __WORDSIZE: u32 = 64; -pub const __WORDSIZE_TIME64_COMPAT32: u32 = 1; -pub const __SYSCALL_WORDSIZE: u32 = 64; -pub const _BITS_WCHAR_H: u32 = 1; -pub const INT8_MIN: i32 = -128; -pub const INT16_MIN: i32 = -32768; -pub const INT32_MIN: i32 = -2147483648; -pub const INT8_MAX: u32 = 127; -pub const INT16_MAX: u32 = 32767; -pub const INT32_MAX: u32 = 2147483647; -pub const UINT8_MAX: u32 = 255; -pub const UINT16_MAX: u32 = 65535; -pub const UINT32_MAX: u32 = 4294967295; -pub const INT_LEAST8_MIN: i32 = -128; -pub const INT_LEAST16_MIN: i32 = -32768; -pub const INT_LEAST32_MIN: i32 = -2147483648; -pub const INT_LEAST8_MAX: u32 = 127; -pub const INT_LEAST16_MAX: u32 = 32767; -pub const INT_LEAST32_MAX: u32 = 2147483647; -pub const UINT_LEAST8_MAX: u32 = 255; -pub const UINT_LEAST16_MAX: u32 = 65535; -pub const UINT_LEAST32_MAX: u32 = 4294967295; -pub const INT_FAST8_MIN: i32 = -128; -pub const INT_FAST16_MIN: i64 = -9223372036854775808; -pub const INT_FAST32_MIN: i64 = -9223372036854775808; -pub const INT_FAST8_MAX: u32 = 127; -pub const INT_FAST16_MAX: u64 = 9223372036854775807; -pub const INT_FAST32_MAX: u64 = 9223372036854775807; -pub const UINT_FAST8_MAX: u32 = 255; -pub const UINT_FAST16_MAX: i32 = -1; -pub const UINT_FAST32_MAX: i32 = -1; -pub const INTPTR_MIN: i64 = -9223372036854775808; -pub const INTPTR_MAX: u64 = 9223372036854775807; -pub const UINTPTR_MAX: i32 = -1; -pub const PTRDIFF_MIN: i64 = -9223372036854775808; -pub const PTRDIFF_MAX: u64 = 9223372036854775807; -pub const SIG_ATOMIC_MIN: i32 = -2147483648; -pub const SIG_ATOMIC_MAX: u32 = 2147483647; -pub const SIZE_MAX: i32 = -1; -pub const WINT_MIN: u32 = 0; -pub const WINT_MAX: u32 = 4294967295; -pub const __BITS_PER_LONG: u32 = 64; -pub const __FD_SETSIZE: u32 = 1024; -pub const VRING_DESC_F_NEXT: u32 = 1; -pub const VRING_DESC_F_WRITE: u32 = 2; -pub const VRING_DESC_F_INDIRECT: u32 = 4; -pub const VRING_USED_F_NO_NOTIFY: u32 = 1; -pub const VRING_AVAIL_F_NO_INTERRUPT: u32 = 1; -pub const VIRTIO_RING_F_INDIRECT_DESC: u32 = 28; pub const VIRTIO_RING_F_EVENT_IDX: u32 = 29; -pub const VRING_AVAIL_ALIGN_SIZE: u32 = 2; -pub const VRING_USED_ALIGN_SIZE: u32 = 4; -pub const VRING_DESC_ALIGN_SIZE: u32 = 16; -pub type int_least8_t = ::std::os::raw::c_schar; -pub type int_least16_t = ::std::os::raw::c_short; -pub type int_least32_t = ::std::os::raw::c_int; -pub type int_least64_t = ::std::os::raw::c_long; -pub type uint_least8_t = ::std::os::raw::c_uchar; -pub type uint_least16_t = ::std::os::raw::c_ushort; -pub type uint_least32_t = ::std::os::raw::c_uint; -pub type uint_least64_t = ::std::os::raw::c_ulong; -pub type int_fast8_t = ::std::os::raw::c_schar; -pub type int_fast16_t = ::std::os::raw::c_long; -pub type int_fast32_t = ::std::os::raw::c_long; -pub type int_fast64_t = ::std::os::raw::c_long; -pub type uint_fast8_t = ::std::os::raw::c_uchar; -pub type uint_fast16_t = ::std::os::raw::c_ulong; -pub type uint_fast32_t = ::std::os::raw::c_ulong; -pub type uint_fast64_t = ::std::os::raw::c_ulong; -pub type intmax_t = ::std::os::raw::c_long; -pub type uintmax_t = ::std::os::raw::c_ulong; -pub type __s8 = ::std::os::raw::c_schar; -pub type __u8 = ::std::os::raw::c_uchar; -pub type __s16 = ::std::os::raw::c_short; -pub type __u16 = ::std::os::raw::c_ushort; -pub type __s32 = ::std::os::raw::c_int; -pub type __u32 = ::std::os::raw::c_uint; -pub type __s64 = ::std::os::raw::c_longlong; -pub type __u64 = ::std::os::raw::c_ulonglong; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fd_set { - pub fds_bits: [::std::os::raw::c_ulong; 16usize], -} -#[test] -fn bindgen_test_layout___kernel_fd_set() { - assert_eq!( - ::std::mem::size_of::<__kernel_fd_set>(), - 128usize, - concat!("Size of: ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fd_set>(), - 8usize, - concat!("Alignment of ", stringify!(__kernel_fd_set)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fd_set>())).fds_bits as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fd_set), - "::", - stringify!(fds_bits) - ) - ); -} -pub type __kernel_sighandler_t = - ::std::option::Option; -pub type __kernel_key_t = ::std::os::raw::c_int; -pub type __kernel_mqd_t = ::std::os::raw::c_int; -pub type __kernel_old_uid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_gid_t = ::std::os::raw::c_ushort; -pub type __kernel_old_dev_t = ::std::os::raw::c_ulong; -pub type __kernel_long_t = ::std::os::raw::c_long; -pub type __kernel_ulong_t = ::std::os::raw::c_ulong; -pub type __kernel_ino_t = __kernel_ulong_t; -pub type __kernel_mode_t = ::std::os::raw::c_uint; -pub type __kernel_pid_t = ::std::os::raw::c_int; -pub type __kernel_ipc_pid_t = ::std::os::raw::c_int; -pub type __kernel_uid_t = ::std::os::raw::c_uint; -pub type __kernel_gid_t = ::std::os::raw::c_uint; -pub type __kernel_suseconds_t = __kernel_long_t; -pub type __kernel_daddr_t = ::std::os::raw::c_int; -pub type __kernel_uid32_t = ::std::os::raw::c_uint; -pub type __kernel_gid32_t = ::std::os::raw::c_uint; -pub type __kernel_size_t = __kernel_ulong_t; -pub type __kernel_ssize_t = __kernel_long_t; -pub type __kernel_ptrdiff_t = __kernel_long_t; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct __kernel_fsid_t { - pub val: [::std::os::raw::c_int; 2usize], -} -#[test] -fn bindgen_test_layout___kernel_fsid_t() { - assert_eq!( - ::std::mem::size_of::<__kernel_fsid_t>(), - 8usize, - concat!("Size of: ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - ::std::mem::align_of::<__kernel_fsid_t>(), - 4usize, - concat!("Alignment of ", stringify!(__kernel_fsid_t)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::<__kernel_fsid_t>())).val as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(__kernel_fsid_t), - "::", - stringify!(val) - ) - ); -} -pub type __kernel_off_t = __kernel_long_t; -pub type __kernel_loff_t = ::std::os::raw::c_longlong; -pub type __kernel_time_t = __kernel_long_t; -pub type __kernel_clock_t = __kernel_long_t; -pub type __kernel_timer_t = ::std::os::raw::c_int; -pub type __kernel_clockid_t = ::std::os::raw::c_int; -pub type __kernel_caddr_t = *mut ::std::os::raw::c_char; -pub type __kernel_uid16_t = ::std::os::raw::c_ushort; -pub type __kernel_gid16_t = ::std::os::raw::c_ushort; -pub type __le16 = __u16; -pub type __be16 = __u16; -pub type __le32 = __u32; -pub type __be32 = __u32; -pub type __le64 = __u64; -pub type __be64 = __u64; -pub type __sum16 = __u16; -pub type __wsum = __u32; -pub type __virtio16 = __u16; -pub type __virtio32 = __u32; -pub type __virtio64 = __u64; -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct vring_desc { - pub addr: __virtio64, - pub len: __virtio32, - pub flags: __virtio16, - pub next: __virtio16, -} -#[test] -fn bindgen_test_layout_vring_desc() { - assert_eq!( - ::std::mem::size_of::(), - 16usize, - concat!("Size of: ", stringify!(vring_desc)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(vring_desc)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).addr as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(vring_desc), - "::", - stringify!(addr) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).len as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(vring_desc), - "::", - stringify!(len) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).flags as *const _ as usize }, - 12usize, - concat!( - "Offset of field: ", - stringify!(vring_desc), - "::", - stringify!(flags) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).next as *const _ as usize }, - 14usize, - concat!( - "Offset of field: ", - stringify!(vring_desc), - "::", - stringify!(next) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default)] -pub struct vring_avail { - pub flags: __virtio16, - pub idx: __virtio16, - pub ring: __IncompleteArrayField<__virtio16>, -} -#[test] -fn bindgen_test_layout_vring_avail() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(vring_avail)) - ); - assert_eq!( - ::std::mem::align_of::(), - 2usize, - concat!("Alignment of ", stringify!(vring_avail)) - ); -} -#[repr(C)] -#[derive(Debug, Default, Copy, Clone, PartialEq)] -pub struct vring_used_elem { - pub id: __virtio32, - pub len: __virtio32, -} -#[test] -fn bindgen_test_layout_vring_used_elem() { - assert_eq!( - ::std::mem::size_of::(), - 8usize, - concat!("Size of: ", stringify!(vring_used_elem)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(vring_used_elem)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).id as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(vring_used_elem), - "::", - stringify!(id) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).len as *const _ as usize }, - 4usize, - concat!( - "Offset of field: ", - stringify!(vring_used_elem), - "::", - stringify!(len) - ) - ); -} -#[repr(C)] -#[derive(Debug, Default)] -pub struct vring_used { - pub flags: __virtio16, - pub idx: __virtio16, - pub ring: __IncompleteArrayField, - pub __bindgen_align: [u32; 0usize], -} -#[test] -fn bindgen_test_layout_vring_used() { - assert_eq!( - ::std::mem::size_of::(), - 4usize, - concat!("Size of: ", stringify!(vring_used)) - ); - assert_eq!( - ::std::mem::align_of::(), - 4usize, - concat!("Alignment of ", stringify!(vring_used)) - ); -} -#[repr(C)] -#[derive(Debug, Copy, Clone, PartialEq)] -pub struct vring { - pub num: ::std::os::raw::c_uint, - pub desc: *mut vring_desc, - pub avail: *mut vring_avail, - pub used: *mut vring_used, -} -#[test] -fn bindgen_test_layout_vring() { - assert_eq!( - ::std::mem::size_of::(), - 32usize, - concat!("Size of: ", stringify!(vring)) - ); - assert_eq!( - ::std::mem::align_of::(), - 8usize, - concat!("Alignment of ", stringify!(vring)) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).num as *const _ as usize }, - 0usize, - concat!( - "Offset of field: ", - stringify!(vring), - "::", - stringify!(num) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).desc as *const _ as usize }, - 8usize, - concat!( - "Offset of field: ", - stringify!(vring), - "::", - stringify!(desc) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).avail as *const _ as usize }, - 16usize, - concat!( - "Offset of field: ", - stringify!(vring), - "::", - stringify!(avail) - ) - ); - assert_eq!( - unsafe { &(*(::std::ptr::null::())).used as *const _ as usize }, - 24usize, - concat!( - "Offset of field: ", - stringify!(vring), - "::", - stringify!(used) - ) - ); -} -impl Default for vring { - fn default() -> Self { - unsafe { ::std::mem::zeroed() } - } -} From 6ed1ddeeb4b7927696aeae041cd24cb5f1ec6950 Mon Sep 17 00:00:00 2001 From: alindima Date: Mon, 21 Feb 2022 12:25:40 +0000 Subject: [PATCH 17/32] test_num_deps: pretty-print and sort the keys This makes it much easier to view the dependency changes whenever introduced. Signed-off-by: alindima --- tests/framework/dependencies.txt | 68 ++++++++++++++++++- .../build/test_dependencies.py | 3 +- 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/tests/framework/dependencies.txt b/tests/framework/dependencies.txt index 64ebeda576e..53c39873da5 100644 --- a/tests/framework/dependencies.txt +++ b/tests/framework/dependencies.txt @@ -1 +1,67 @@ -{'serde v1.0.136', 'lazy_static v1.4.0', 'syn v1.0.86', 'micro_http v0.1.0 (https://github.com/firecracker-microvm/micro-http?rev=0a58eb1#0a58eb1e)', 'ghash v0.4.4', 'serde_derive v1.0.136 (proc-macro)', 'bincode v1.3.3', 'serde_json v1.0.78', 'lazycell v1.3.0', 'thiserror-impl v1.0.30 (proc-macro)', 'minimal-lexical v0.2.1', 'glob v0.3.0', 'unicode-xid v0.2.2', 'ctr v0.8.0', 'vm-memory v0.1.0 (/firecracker/src/vm-memory)', 'kvm-ioctls v0.11.0', 'itoa v1.0.1', 'libc v0.2.117', 'bitflags v1.3.2', 'vm-memory v0.7.0', 'vmm v0.1.0 (/firecracker/src/vmm)', 'virtio_gen v0.1.0 (/firecracker/src/virtio_gen)', 'proc-macro2 v1.0.36', 'ryu v1.0.9', 'generic-array v0.14.5', 'subtle v2.4.1', 'timerfd v1.2.0', 'libloading v0.7.3', 'io_uring v0.1.0 (/firecracker/src/io_uring)', 'rate_limiter v0.1.0 (/firecracker/src/rate_limiter)', 'universal-hash v0.4.1', 'peeking_take_while v0.1.2', 'shlex v1.1.0', 'memchr v2.4.1', 'regex v1.5.4', 'bindgen v0.59.2', 'vm-fdt v0.1.0', 'vm-superio v0.5.0', 'linux-loader v0.4.0', 'nix v0.23.1', 'clang-sys v1.3.1', 'version_check v0.9.4', 'thiserror v1.0.30', 'autocfg v1.0.1', 'mmds v0.1.0 (/firecracker/src/mmds)', 'api_server v0.1.0 (/firecracker/src/api_server)', 'rebase-snap v0.1.0 (/firecracker/src/rebase-snap)', 'seccompiler v1.0.0 (/firecracker/src/seccompiler)', 'cc v1.0.73', 'typenum v1.15.0', 'kvm-bindings v0.5.0 (https://github.com/firecracker-microvm/kvm-bindings?tag=v0.5.0-1#4569d3f5)', 'cfg-if v0.1.10', 'vmm-sys-util v0.9.0', 'opaque-debug v0.3.0', 'quote v1.0.15', 'dumbo v0.1.0 (/firecracker/src/dumbo)', 'versionize v0.1.6', 'event-manager v0.2.1', 'regex-syntax v0.6.25', 'userfaultfd-sys v0.4.1', 'polyval v0.5.3', 'userfaultfd v0.4.2', 'cpufeatures v0.2.1', 'logger v0.1.0 (/firecracker/src/logger)', 'cfg-if v1.0.0', 'snapshot v0.1.0 (/firecracker/src/snapshot)', 'utils v0.1.0 (/firecracker/src/utils)', 'aes-gcm v0.9.4', 'log v0.4.14', 'cpuid v0.1.0 (/firecracker/src/cpuid)', 'versionize_derive v0.1.4 (proc-macro)', 'memoffset v0.6.5', 'jailer v1.0.0 (/firecracker/src/jailer)', 'firecracker v1.0.0 (/firecracker/src/firecracker)', 'crc64 v1.0.0', 'nom v7.1.0', 'base64 v0.13.0', 'aead v0.4.3', 'devices v0.1.0 (/firecracker/src/devices)', 'cipher v0.3.0', 'arch v0.1.0 (/firecracker/src/arch)', 'rustc-hash v1.1.0', 'cexpr v0.6.0', 'net_gen v0.1.0 (/firecracker/src/net_gen)', 'arch_gen v0.1.0 (/firecracker/src/arch_gen)', 'aes v0.7.5'} \ No newline at end of file +['aead v0.4.3', + 'aes v0.7.5', + 'aes-gcm v0.9.4', + 'api_server v0.1.0 (/firecracker/src/api_server)', + 'arch v0.1.0 (/firecracker/src/arch)', + 'arch_gen v0.1.0 (/firecracker/src/arch_gen)', + 'base64 v0.13.0', + 'bincode v1.3.3', + 'bitflags v1.3.2', + 'cfg-if v1.0.0', + 'cipher v0.3.0', + 'cpufeatures v0.2.1', + 'cpuid v0.1.0 (/firecracker/src/cpuid)', + 'crc64 v1.0.0', + 'ctr v0.8.0', + 'devices v0.1.0 (/firecracker/src/devices)', + 'dumbo v0.1.0 (/firecracker/src/dumbo)', + 'event-manager v0.2.1', + 'firecracker v1.1.0 (/firecracker/src/firecracker)', + 'generic-array v0.14.5', + 'ghash v0.4.4', + 'io_uring v0.1.0 (/firecracker/src/io_uring)', + 'itoa v1.0.1', + 'jailer v1.1.0 (/firecracker/src/jailer)', + 'kvm-bindings v0.5.0 ' + '(https://github.com/firecracker-microvm/kvm-bindings?tag=v0.5.0-1#4569d3f5)', + 'kvm-ioctls v0.11.0', + 'lazy_static v1.4.0', + 'libc v0.2.117', + 'linux-loader v0.4.0', + 'log v0.4.14', + 'logger v0.1.0 (/firecracker/src/logger)', + 'micro_http v0.1.0 ' + '(https://github.com/firecracker-microvm/micro-http?rev=0a58eb1#0a58eb1e)', + 'mmds v0.1.0 (/firecracker/src/mmds)', + 'net_gen v0.1.0 (/firecracker/src/net_gen)', + 'opaque-debug v0.3.0', + 'polyval v0.5.3', + 'proc-macro2 v1.0.36', + 'quote v1.0.15', + 'rate_limiter v0.1.0 (/firecracker/src/rate_limiter)', + 'rebase-snap v1.1.0 (/firecracker/src/rebase-snap)', + 'regex v1.5.5', + 'regex-syntax v0.6.25', + 'ryu v1.0.9', + 'seccompiler v1.1.0 (/firecracker/src/seccompiler)', + 'serde v1.0.136', + 'serde_derive v1.0.136 (proc-macro)', + 'serde_json v1.0.78', + 'snapshot v0.1.0 (/firecracker/src/snapshot)', + 'subtle v2.4.1', + 'syn v1.0.86', + 'timerfd v1.2.0', + 'typenum v1.15.0', + 'unicode-xid v0.2.2', + 'universal-hash v0.4.1', + 'utils v0.1.0 (/firecracker/src/utils)', + 'version_check v0.9.4', + 'versionize v0.1.6', + 'versionize_derive v0.1.4 (proc-macro)', + 'virtio_gen v0.1.0 (/firecracker/src/virtio_gen)', + 'vm-fdt v0.1.0', + 'vm-memory v0.1.0 (/firecracker/src/vm-memory)', + 'vm-memory v0.7.0', + 'vm-superio v0.5.0', + 'vmm v0.1.0 (/firecracker/src/vmm)', + 'vmm-sys-util v0.9.0'] diff --git a/tests/integration_tests/build/test_dependencies.py b/tests/integration_tests/build/test_dependencies.py index 10b1e42f8ec..797b648644d 100644 --- a/tests/integration_tests/build/test_dependencies.py +++ b/tests/integration_tests/build/test_dependencies.py @@ -50,8 +50,9 @@ def test_num_dependencies(dep_file): current_deps.add(line) # Use the code below to update the expected dependencies. + # from pprint import pprint # with open(dep_file, "w", encoding='utf-8') as prev_deps: - # prev_deps.write(str(current_deps)) + # pprint(sorted(current_deps), stream=prev_deps) with open(dep_file, encoding='utf-8') as prev_deps: prev_deps = ast.literal_eval(prev_deps.read()) From f25b8becd45e3cf5a8106355895e235e7f35f70d Mon Sep 17 00:00:00 2001 From: AlexandruCihodaru Date: Thu, 14 Apr 2022 17:17:05 +0300 Subject: [PATCH 18/32] [deps]: Add vm-allocator dependency Signed-off-by: Jonathan Woollett-Light --- Cargo.lock | 11 +++++++++++ src/vmm/Cargo.toml | 1 + tests/framework/dependencies.txt | 26 ++++++++++++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7cccea5ddae..8dd17aa5609 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1195,6 +1195,16 @@ dependencies = [ name = "virtio_gen" version = "0.1.0" +[[package]] +name = "vm-allocator" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "565b6886b7dd1b3bf34ec9243d90a97db4f2a83c2416caa52fcc95fd255d45e4" +dependencies = [ + "libc", + "thiserror", +] + [[package]] name = "vm-fdt" version = "0.1.0" @@ -1252,6 +1262,7 @@ dependencies = [ "versionize", "versionize_derive", "virtio_gen", + "vm-memory 0.1.0", "vm-memory 0.3.0", "vm-superio", ] diff --git a/src/vmm/Cargo.toml b/src/vmm/Cargo.toml index c1dfb8ed379..00826457bd6 100644 --- a/src/vmm/Cargo.toml +++ b/src/vmm/Cargo.toml @@ -18,6 +18,7 @@ userfaultfd = ">=0.4.0" versionize = ">=0.1.6" versionize_derive = ">=0.1.3" vm-superio = ">=0.4.0" +vm-allocator = "0.1.0" arch = { path = "../arch" } devices = { path = "../devices" } diff --git a/tests/framework/dependencies.txt b/tests/framework/dependencies.txt index 53c39873da5..ccba0860b96 100644 --- a/tests/framework/dependencies.txt +++ b/tests/framework/dependencies.txt @@ -4,11 +4,17 @@ 'api_server v0.1.0 (/firecracker/src/api_server)', 'arch v0.1.0 (/firecracker/src/arch)', 'arch_gen v0.1.0 (/firecracker/src/arch_gen)', + 'autocfg v1.0.1', 'base64 v0.13.0', 'bincode v1.3.3', + 'bindgen v0.59.2', 'bitflags v1.3.2', + 'cc v1.0.73', + 'cexpr v0.6.0', + 'cfg-if v0.1.10', 'cfg-if v1.0.0', 'cipher v0.3.0', + 'clang-sys v1.3.1', 'cpufeatures v0.2.1', 'cpuid v0.1.0 (/firecracker/src/cpuid)', 'crc64 v1.0.0', @@ -19,6 +25,7 @@ 'firecracker v1.1.0 (/firecracker/src/firecracker)', 'generic-array v0.14.5', 'ghash v0.4.4', + 'glob v0.3.0', 'io_uring v0.1.0 (/firecracker/src/io_uring)', 'itoa v1.0.1', 'jailer v1.1.0 (/firecracker/src/jailer)', @@ -26,15 +33,23 @@ '(https://github.com/firecracker-microvm/kvm-bindings?tag=v0.5.0-1#4569d3f5)', 'kvm-ioctls v0.11.0', 'lazy_static v1.4.0', + 'lazycell v1.3.0', 'libc v0.2.117', + 'libloading v0.7.3', 'linux-loader v0.4.0', 'log v0.4.14', 'logger v0.1.0 (/firecracker/src/logger)', + 'memchr v2.4.1', + 'memoffset v0.6.5', 'micro_http v0.1.0 ' '(https://github.com/firecracker-microvm/micro-http?rev=0a58eb1#0a58eb1e)', + 'minimal-lexical v0.2.1', 'mmds v0.1.0 (/firecracker/src/mmds)', 'net_gen v0.1.0 (/firecracker/src/net_gen)', + 'nix v0.23.1', + 'nom v7.1.0', 'opaque-debug v0.3.0', + 'peeking_take_while v0.1.2', 'polyval v0.5.3', 'proc-macro2 v1.0.36', 'quote v1.0.15', @@ -42,26 +57,33 @@ 'rebase-snap v1.1.0 (/firecracker/src/rebase-snap)', 'regex v1.5.5', 'regex-syntax v0.6.25', + 'rustc-hash v1.1.0', 'ryu v1.0.9', 'seccompiler v1.1.0 (/firecracker/src/seccompiler)', 'serde v1.0.136', 'serde_derive v1.0.136 (proc-macro)', 'serde_json v1.0.78', + 'shlex v1.1.0', 'snapshot v0.1.0 (/firecracker/src/snapshot)', 'subtle v2.4.1', 'syn v1.0.86', + 'thiserror v1.0.30', + 'thiserror-impl v1.0.30 (proc-macro)', 'timerfd v1.2.0', 'typenum v1.15.0', 'unicode-xid v0.2.2', 'universal-hash v0.4.1', + 'userfaultfd v0.4.2', + 'userfaultfd-sys v0.4.1', 'utils v0.1.0 (/firecracker/src/utils)', 'version_check v0.9.4', 'versionize v0.1.6', 'versionize_derive v0.1.4 (proc-macro)', 'virtio_gen v0.1.0 (/firecracker/src/virtio_gen)', + 'vm-allocator v0.1.0', 'vm-fdt v0.1.0', - 'vm-memory v0.1.0 (/firecracker/src/vm-memory)', - 'vm-memory v0.7.0', + 'vm-memory v0.3.0 (/firecracker/src/vm-memory)', + 'vm-memory v0.8.0', 'vm-superio v0.5.0', 'vmm v0.1.0 (/firecracker/src/vmm)', 'vmm-sys-util v0.9.0'] From 6b3e87c4fb07b112df722af54fd95fc1904e9d42 Mon Sep 17 00:00:00 2001 From: AlexandruCihodaru Date: Thu, 14 Apr 2022 17:38:07 +0300 Subject: [PATCH 19/32] [mmio]: Use vm-allocator error Replace mmio::Error::IrqExhausted with vm-allocator error. Signed-off-by: Jonathan Woollett-Light --- src/vmm/src/device_manager/mmio.rs | 23 +++++++++++-------- .../functional/test_max_devices.py | 6 ++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index dce976520c5..21533b3f27e 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -48,14 +48,14 @@ pub enum Error { InternalDeviceError(String), /// Invalid configuration attempted. InvalidInput, - /// No more IRQs are available. - IrqsExhausted, /// Registering an IO Event failed. RegisterIoEvent(kvm_ioctls::Error), /// Registering an IRQ FD failed. RegisterIrqFd(kvm_ioctls::Error), /// Failed to update the mmio device. UpdateFailed, + /// Allocation logic error. + AllocatorError(vm_allocator::Error), } impl fmt::Display for Error { @@ -67,11 +67,11 @@ impl fmt::Display for Error { Error::IncorrectDeviceType => write!(f, "incorrect device type"), Error::InternalDeviceError(e) => write!(f, "device error: {}", e), Error::InvalidInput => write!(f, "invalid configuration"), - Error::IrqsExhausted => write!(f, "no more IRQs are available"), Error::RegisterIoEvent(e) => write!(f, "failed to register IO event: {}", e), Error::RegisterIrqFd(e) => write!(f, "failed to register irqfd: {}", e), Error::DeviceNotFound => write!(f, "the device couldn't be found"), Error::UpdateFailed => write!(f, "failed to update the mmio device"), + Error::AllocatorError(e) => write!(f, "failed to allocate requested resource: {}", e), } } } @@ -113,7 +113,9 @@ impl IrqManager { pub fn get(&mut self, count: u32) -> Result> { if self.next_avail + count > self.last + 1 { - return Err(Error::IrqsExhausted); + return Err(Error::AllocatorError( + vm_allocator::Error::ResourceNotAvailable, + )); } let mut irqs = Vec::with_capacity(count as usize); for _ in 0..count { @@ -653,7 +655,8 @@ mod tests { ) .unwrap_err() ), - "no more IRQs are available".to_string() + "failed to allocate requested resource: The requested resource is not available." + .to_string() ); } @@ -677,10 +680,10 @@ mod tests { Error::IncorrectDeviceType => format!("{}{:?}", e, e), Error::InternalDeviceError(_) => format!("{}{:?}", e, e), Error::InvalidInput => format!("{}{:?}", e, e), - Error::IrqsExhausted => format!("{}{:?}", e, e), Error::RegisterIoEvent(_) => format!("{}{:?}", e, e), Error::RegisterIrqFd(_) => format!("{}{:?}", e, e), Error::UpdateFailed => format!("{}{:?}", e, e), + Error::AllocatorError(_) => format!("{}{:?}", e, e), }; assert!(!msg.is_empty()); }; @@ -691,7 +694,7 @@ mod tests { check_fmt_err(Error::IncorrectDeviceType); check_fmt_err(Error::InternalDeviceError(String::new())); check_fmt_err(Error::InvalidInput); - check_fmt_err(Error::IrqsExhausted); + check_fmt_err(Error::AllocatorError(vm_allocator::Error::Overflow)); check_fmt_err(Error::RegisterIoEvent(errno::Error::new(0))); check_fmt_err(Error::RegisterIrqFd(errno::Error::new(0))); check_fmt_err(Error::UpdateFailed); @@ -778,14 +781,16 @@ mod tests { .allocate_new_slot(arch::IRQ_MAX - arch::IRQ_BASE + 1) .unwrap_err() ), - "no more IRQs are available".to_string() + "failed to allocate requested resource: The requested resource is not available." + .to_string() ); let _addr = device_manager.allocate_new_slot(arch::IRQ_MAX - arch::IRQ_BASE - 1); assert_eq!(device_manager.irqs.next_avail, arch::IRQ_MAX); assert_eq!( format!("{}", device_manager.allocate_new_slot(2).unwrap_err()), - "no more IRQs are available".to_string() + "failed to allocate requested resource: The requested resource is not available." + .to_string() ); let _addr = device_manager.allocate_new_slot(1); diff --git a/tests/integration_tests/functional/test_max_devices.py b/tests/integration_tests/functional/test_max_devices.py index e80a09e992a..fdab54ccfd1 100644 --- a/tests/integration_tests/functional/test_max_devices.py +++ b/tests/integration_tests/functional/test_max_devices.py @@ -78,4 +78,8 @@ def test_attach_too_many_devices(test_microvm_with_api, network_config): # `MAX_DEVICES_ATTACHED` devices should fail. response = test_microvm.actions.put(action_type='InstanceStart') assert test_microvm.api_session.is_status_bad_request(response.status_code) - assert "no more IRQs are available" in response.text + error_str = ( + "failed to allocate requested resource: The requested resource" + " is not available." + ) + assert error_str in response.text From 7a58f88b91f69ece0a374f947c02415388eb6ce8 Mon Sep 17 00:00:00 2001 From: AlexandruCihodaru Date: Thu, 14 Apr 2022 17:45:48 +0300 Subject: [PATCH 20/32] [legacy_irq]: Replace irq allocator Replace old logic for irq numbers allocation with the IdAllocator component from vm-allocator crate. Signed-off-by: Jonathan Woollett-Light --- src/vmm/src/device_manager/mmio.rs | 125 +++++--------------------- src/vmm/src/device_manager/persist.rs | 5 -- 2 files changed, 22 insertions(+), 108 deletions(-) diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index 21533b3f27e..7fa8adcc281 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -10,6 +10,7 @@ use devices::legacy::SerialDevice; use std::collections::HashMap; use std::sync::{Arc, Mutex}; use std::{fmt, io}; +use vm_allocator::IdAllocator; #[cfg(target_arch = "x86_64")] use vm_memory::GuestAddress; @@ -96,52 +97,12 @@ pub struct MMIODeviceInfo { pub irqs: Vec, } -struct IrqManager { - first: u32, - last: u32, - next_avail: u32, -} - -impl IrqManager { - pub fn new(first: u32, last: u32) -> Self { - Self { - first, - last, - next_avail: first, - } - } - - pub fn get(&mut self, count: u32) -> Result> { - if self.next_avail + count > self.last + 1 { - return Err(Error::AllocatorError( - vm_allocator::Error::ResourceNotAvailable, - )); - } - let mut irqs = Vec::with_capacity(count as usize); - for _ in 0..count { - irqs.push(self.next_avail); - self.next_avail += 1; - } - Ok(irqs) - } - - pub fn check(&self, irqs: &[u32]) -> Result<()> { - for irq in irqs { - // Check for out of range. - if self.first > *irq || *irq > self.last { - return Err(Error::InvalidInput); - } - } - Ok(()) - } -} - /// Manages the complexities of registering a MMIO device. pub struct MMIODeviceManager { pub(crate) bus: devices::Bus, mmio_base: u64, next_avail_mmio: u64, - irqs: IrqManager, + pub(crate) irq_allocator: IdAllocator, pub(crate) id_to_dev_info: HashMap<(DeviceType, String), MMIODeviceInfo>, } @@ -151,7 +112,10 @@ impl MMIODeviceManager { MMIODeviceManager { mmio_base, next_avail_mmio: mmio_base, - irqs: IrqManager::new(irq_interval.0, irq_interval.1), + // All instances of `MMIODeviceManager::new()` use constants such + // that `IdAllocator::new()` will always return `Ok()` and thus + // `unwrap` will never panic. + irq_allocator: IdAllocator::new(irq_interval.0, irq_interval.1).unwrap(), bus: devices::Bus::new(), id_to_dev_info: HashMap::new(), } @@ -159,24 +123,18 @@ impl MMIODeviceManager { /// Allocates resources for a new device to be added. fn allocate_new_slot(&mut self, irq_count: u32) -> Result { - let irqs = self.irqs.get(irq_count)?; + let irqs = (0..irq_count) + .map(|_| self.irq_allocator.allocate_id()) + .collect::>() + .map_err(Error::AllocatorError)?; let slot = MMIODeviceInfo { addr: self.next_avail_mmio, len: MMIO_LEN, irqs, }; - self.next_avail_mmio += MMIO_LEN; Ok(slot) } - /// Does a slot sanity check against expected values. - pub fn slot_sanity_check(&self, slot: &MMIODeviceInfo) -> Result<()> { - if slot.addr < self.mmio_base || slot.len != MMIO_LEN { - return Err(Error::InvalidInput); - } - self.irqs.check(&slot.irqs) - } - /// Register a device at some MMIO address. fn register_mmio_device( &mut self, @@ -770,10 +728,10 @@ mod tests { fn test_slot_irq_allocation() { let mut device_manager = MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)); - let _addr = device_manager.allocate_new_slot(0); - assert_eq!(device_manager.irqs.next_avail, arch::IRQ_BASE); - let _addr = device_manager.allocate_new_slot(1); - assert_eq!(device_manager.irqs.next_avail, arch::IRQ_BASE + 1); + let slot = device_manager.allocate_new_slot(0).unwrap(); + assert_eq!(slot.irqs.len(), 0); + let slot = device_manager.allocate_new_slot(1).unwrap(); + assert_eq!(slot.irqs[0], arch::IRQ_BASE); assert_eq!( format!( "{}", @@ -785,58 +743,19 @@ mod tests { .to_string() ); - let _addr = device_manager.allocate_new_slot(arch::IRQ_MAX - arch::IRQ_BASE - 1); - assert_eq!(device_manager.irqs.next_avail, arch::IRQ_MAX); + for i in arch::IRQ_BASE..arch::IRQ_MAX { + device_manager.irq_allocator.free_id(i).unwrap(); + } + + let slot = device_manager + .allocate_new_slot(arch::IRQ_MAX - arch::IRQ_BASE - 1) + .unwrap(); + assert_eq!(slot.irqs[16], arch::IRQ_BASE + 16); assert_eq!( format!("{}", device_manager.allocate_new_slot(2).unwrap_err()), "failed to allocate requested resource: The requested resource is not available." .to_string() ); - - let _addr = device_manager.allocate_new_slot(1); - assert_eq!(device_manager.irqs.next_avail, arch::IRQ_MAX + 1); assert!(device_manager.allocate_new_slot(0).is_ok()); } - - #[test] - fn test_slot_sanity_checks() { - let mmio_base = 0xd000_0000; - let device_manager = MMIODeviceManager::new(mmio_base, (arch::IRQ_BASE, arch::IRQ_MAX)); - - // Valid slot. - let slot = MMIODeviceInfo { - addr: mmio_base, - len: MMIO_LEN, - irqs: vec![arch::IRQ_BASE, arch::IRQ_BASE + 1], - }; - device_manager.slot_sanity_check(&slot).unwrap(); - // 'addr' below base. - let slot = MMIODeviceInfo { - addr: mmio_base - 1, - len: MMIO_LEN, - irqs: vec![arch::IRQ_BASE, arch::IRQ_BASE + 1], - }; - device_manager.slot_sanity_check(&slot).unwrap_err(); - // Invalid 'len'. - let slot = MMIODeviceInfo { - addr: mmio_base, - len: MMIO_LEN - 1, - irqs: vec![arch::IRQ_BASE, arch::IRQ_BASE + 1], - }; - device_manager.slot_sanity_check(&slot).unwrap_err(); - // 'irq' below range. - let slot = MMIODeviceInfo { - addr: mmio_base, - len: MMIO_LEN, - irqs: vec![arch::IRQ_BASE - 1, arch::IRQ_BASE + 1], - }; - device_manager.slot_sanity_check(&slot).unwrap_err(); - // 'irq' above range. - let slot = MMIODeviceInfo { - addr: mmio_base, - len: MMIO_LEN, - irqs: vec![arch::IRQ_BASE, arch::IRQ_MAX + 1], - }; - device_manager.slot_sanity_check(&slot).unwrap_err(); - } } diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 72d30d270a2..52b17de52f4 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -360,10 +360,6 @@ impl<'a> Persist<'a> for MMIODeviceManager { slot: &MMIODeviceInfo, event_manager: &mut EventManager| -> Result<(), Self::Error> { - dev_manager - .slot_sanity_check(slot) - .map_err(Error::DeviceManager)?; - let restore_args = MmioTransportConstructorArgs { mem: mem.clone(), device, @@ -506,7 +502,6 @@ impl<'a> Persist<'a> for MMIODeviceManager { constructor_args.event_manager, )?; } - Ok(dev_manager) } } From a4b25a7108778c23d86983b6416c24216ac3bc16 Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Wed, 25 May 2022 16:31:40 +0100 Subject: [PATCH 21/32] [address_allocator]: Replace address allocator Replace the old logic for mmio slots allocation with the AddressAllocator component from vm-allocator component. Also restored the AddressAllocator on restore path. Signed-off-by: Jonathan Woollett-Light Co-authored-by: Alexandru Cihodaru --- src/arch/src/x86_64/mod.rs | 3 +- src/vmm/src/device_manager/mmio.rs | 51 +++++++++++++++++++-------- src/vmm/src/device_manager/persist.rs | 34 ++++++++++++++++++ 3 files changed, 73 insertions(+), 15 deletions(-) diff --git a/src/arch/src/x86_64/mod.rs b/src/arch/src/x86_64/mod.rs index 76c63276bd3..9f2122134c6 100644 --- a/src/arch/src/x86_64/mod.rs +++ b/src/arch/src/x86_64/mod.rs @@ -42,7 +42,8 @@ pub enum Error { // Where BIOS/VGA magic would live on a real PC. const EBDA_START: u64 = 0x9fc00; const FIRST_ADDR_PAST_32BITS: u64 = 1 << 32; -const MEM_32BIT_GAP_SIZE: u64 = 768 << 20; +/// Size of MMIO gap at top of 32-bit address space. +pub const MEM_32BIT_GAP_SIZE: u64 = 768 << 20; /// The start of the memory area reserved for MMIO devices. pub const MMIO_MEM_START: u64 = FIRST_ADDR_PAST_32BITS - MEM_32BIT_GAP_SIZE; diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index 7fa8adcc281..eb2209d6ad3 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -10,7 +10,6 @@ use devices::legacy::SerialDevice; use std::collections::HashMap; use std::sync::{Arc, Mutex}; use std::{fmt, io}; -use vm_allocator::IdAllocator; #[cfg(target_arch = "x86_64")] use vm_memory::GuestAddress; @@ -31,6 +30,7 @@ use linux_loader::cmdline as kernel_cmdline; use logger::info; use versionize::{VersionMap, Versionize, VersionizeResult}; use versionize_derive::Versionize; +use vm_allocator::{AddressAllocator, AllocPolicy, IdAllocator}; /// Errors for MMIO device manager. #[derive(Debug)] @@ -83,7 +83,7 @@ type Result = ::std::result::Result; /// It has to be larger than 0x100 (the offset where the configuration space starts from /// the beginning of the memory mapped device registers) + the size of the configuration space /// Currently hardcoded to 4K. -const MMIO_LEN: u64 = 0x1000; +pub const MMIO_LEN: u64 = 0x1000; /// Stores the address range and irq allocated to this device. #[derive(Clone, Debug, PartialEq, Versionize)] @@ -100,25 +100,30 @@ pub struct MMIODeviceInfo { /// Manages the complexities of registering a MMIO device. pub struct MMIODeviceManager { pub(crate) bus: devices::Bus, - mmio_base: u64, - next_avail_mmio: u64, pub(crate) irq_allocator: IdAllocator, + pub(crate) address_allocator: AddressAllocator, pub(crate) id_to_dev_info: HashMap<(DeviceType, String), MMIODeviceInfo>, } impl MMIODeviceManager { /// Create a new DeviceManager handling mmio devices (virtio net, block). pub fn new(mmio_base: u64, irq_interval: (u32, u32)) -> MMIODeviceManager { - MMIODeviceManager { - mmio_base, - next_avail_mmio: mmio_base, + #[cfg(target_arch = "x86_64")] + let size = arch::x86_64::MEM_32BIT_GAP_SIZE; + #[cfg(target_arch = "aarch64")] + let size = arch::aarch64::layout::DRAM_MEM_START - arch::aarch64::layout::MAPPED_IO_START; //>> 1GB + Ok(MMIODeviceManager { // All instances of `MMIODeviceManager::new()` use constants such // that `IdAllocator::new()` will always return `Ok()` and thus // `unwrap` will never panic. irq_allocator: IdAllocator::new(irq_interval.0, irq_interval.1).unwrap(), + // All instances of `MMIODeviceManager::new()` use constants such + // that `AddressAllocator::new()` will always return `Ok()` and thus + // `unwrap` will never panic. + address_allocator: AddressAllocator::new(mmio_base, size).unwrap(), bus: devices::Bus::new(), id_to_dev_info: HashMap::new(), - } + }) } /// Allocates resources for a new device to be added. @@ -128,7 +133,11 @@ impl MMIODeviceManager { .collect::>() .map_err(Error::AllocatorError)?; let slot = MMIODeviceInfo { - addr: self.next_avail_mmio, + addr: self + .address_allocator + .allocate(MMIO_LEN, MMIO_LEN, AllocPolicy::FirstMatch) + .map_err(Error::AllocatorError)? + .start(), len: MMIO_LEN, irqs, }; @@ -220,7 +229,13 @@ impl MMIODeviceManager { serial: Arc>, dev_info_opt: Option, ) -> Result<()> { - let slot = dev_info_opt.unwrap_or(self.allocate_new_slot(1)?); + // Create a new MMIODeviceInfo object on boot path or unwrap the + // existing object on restore path. + let slot = if let Some(dev_info) = dev_info_opt { + dev_info + } else { + self.allocate_new_slot(1)? + }; vm.register_irqfd( &serial.lock().expect("Poisoned lock").serial.interrupt_evt(), @@ -229,6 +244,7 @@ impl MMIODeviceManager { .map_err(Error::RegisterIrqFd)?; let identifier = (DeviceType::Serial, DeviceType::Serial.to_string()); + // Register the newly created Serial object. self.register_mmio_device(identifier, slot, serial) } @@ -245,17 +261,24 @@ impl MMIODeviceManager { } #[cfg(target_arch = "aarch64")] - /// Create and register a MMIO RTC device at the specified MMIO address if given as parameter, - /// otherwise allocate a new MMIO slot for it. + /// Create and register a MMIO RTC device at the specified MMIO address if + /// given as parameter, otherwise allocate a new MMIO slot for it. pub fn register_mmio_rtc( &mut self, rtc: Arc>, dev_info_opt: Option, ) -> Result<()> { - // Create and attach a new RTC device. - let slot = dev_info_opt.unwrap_or(self.allocate_new_slot(0)?); + // Create a new MMIODeviceInfo object on boot path or unwrap the + // existing object on restore path. + let slot = if let Some(dev_info) = dev_info_opt { + dev_info + } else { + self.allocate_new_slot(0)? + }; + // Create a new identifier for the RTC device. let identifier = (DeviceType::Rtc, DeviceType::Rtc.to_string()); + // Attach the newly created RTC device. self.register_mmio_device(identifier, slot, rtc) } diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 52b17de52f4..3b0d87beb8a 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -5,6 +5,7 @@ use std::result::Result; use std::sync::{Arc, Mutex}; +use vm_allocator::AllocPolicy; use super::mmio::*; use crate::EventManager; @@ -340,12 +341,29 @@ impl<'a> Persist<'a> for MMIODeviceManager { ) .map_err(Error::Legacy)?; + dev_manager + .address_allocator + .allocate( + MMIO_LEN, + MMIO_LEN, + AllocPolicy::ExactMatch(state.mmio_slot.addr), + ) + .map_err(|e| Error::DeviceManager(super::mmio::Error::AllocatorError(e)))?; + dev_manager .register_mmio_serial(vm, serial, Some(state.mmio_slot.clone())) .map_err(Error::DeviceManager)?; } if state.type_ == DeviceType::Rtc { let rtc = crate::builder::setup_rtc_device(); + dev_manager + .address_allocator + .allocate( + MMIO_LEN, + MMIO_LEN, + AllocPolicy::ExactMatch(state.mmio_slot.addr), + ) + .map_err(|e| Error::DeviceManager(super::mmio::Error::AllocatorError(e)))?; dev_manager .register_mmio_rtc(rtc, Some(state.mmio_slot.clone())) .map_err(Error::DeviceManager)?; @@ -366,6 +384,22 @@ impl<'a> Persist<'a> for MMIODeviceManager { }; let mmio_transport = MmioTransport::restore(restore_args, state).map_err(|()| Error::MmioTransport)?; + + // We do not currently require exact re-allocation of IDs via + // `dev_manager.irq_allocator.allocate_id()` and currently cannot do + // this effectively as `IdAllocator` does not implement an exact + // match API. + // In the future we may require preserving `IdAllocator`'s state + // after snapshot restore so as to restore the exact interrupt IDs + // from the original device's state for implementing hot-plug. + // For now this is why we do not restore the state of the + // `IdAllocator` under `dev_manager`. + + dev_manager + .address_allocator + .allocate(MMIO_LEN, MMIO_LEN, AllocPolicy::ExactMatch(slot.addr)) + .map_err(|e| Error::DeviceManager(super::mmio::Error::AllocatorError(e)))?; + dev_manager .register_mmio_virtio(vm, id.clone(), mmio_transport, slot) .map_err(Error::DeviceManager)?; From da669d1791a5a7a58ec0f179266800d04f74f31a Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Wed, 25 May 2022 17:01:05 +0100 Subject: [PATCH 22/32] Propagating vm-allocator errors Signed-off-by: Jonathan Woollett-Light --- src/vmm/src/builder.rs | 5 +++-- src/vmm/src/device_manager/mmio.rs | 22 +++++++++------------- src/vmm/src/device_manager/persist.rs | 7 +++++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/vmm/src/builder.rs b/src/vmm/src/builder.rs index f7b275c4246..3c0e122b6ec 100644 --- a/src/vmm/src/builder.rs +++ b/src/vmm/src/builder.rs @@ -255,7 +255,8 @@ fn create_vmm_and_vcpus( // 'mmio_base' address has to be an address which is protected by the kernel // and is architectural specific. let mmio_device_manager = - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)) + .map_err(StartMicrovmError::RegisterMmioDevice)?; let vcpus; // For x86_64 we need to create the interrupt controller before calling `KVM_CREATE_VCPUS` @@ -1038,7 +1039,7 @@ pub mod tests { } fn default_mmio_device_manager() -> MMIODeviceManager { - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)) + MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap() } #[cfg(target_arch = "x86_64")] diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index eb2209d6ad3..eebc757067e 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -107,20 +107,16 @@ pub struct MMIODeviceManager { impl MMIODeviceManager { /// Create a new DeviceManager handling mmio devices (virtio net, block). - pub fn new(mmio_base: u64, irq_interval: (u32, u32)) -> MMIODeviceManager { + pub fn new(mmio_base: u64, irq_interval: (u32, u32)) -> Result { #[cfg(target_arch = "x86_64")] let size = arch::x86_64::MEM_32BIT_GAP_SIZE; #[cfg(target_arch = "aarch64")] let size = arch::aarch64::layout::DRAM_MEM_START - arch::aarch64::layout::MAPPED_IO_START; //>> 1GB Ok(MMIODeviceManager { - // All instances of `MMIODeviceManager::new()` use constants such - // that `IdAllocator::new()` will always return `Ok()` and thus - // `unwrap` will never panic. - irq_allocator: IdAllocator::new(irq_interval.0, irq_interval.1).unwrap(), - // All instances of `MMIODeviceManager::new()` use constants such - // that `AddressAllocator::new()` will always return `Ok()` and thus - // `unwrap` will never panic. - address_allocator: AddressAllocator::new(mmio_base, size).unwrap(), + irq_allocator: IdAllocator::new(irq_interval.0, irq_interval.1) + .map_err(Error::AllocatorError)?, + address_allocator: AddressAllocator::new(mmio_base, size) + .map_err(Error::AllocatorError)?, bus: devices::Bus::new(), id_to_dev_info: HashMap::new(), }) @@ -579,7 +575,7 @@ mod tests { .unwrap(); let mut vm = builder::setup_kvm_vm(&guest_mem, false).unwrap(); let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); let dummy = Arc::new(Mutex::new(DummyDevice::new())); @@ -604,7 +600,7 @@ mod tests { .unwrap(); let mut vm = builder::setup_kvm_vm(&guest_mem, false).unwrap(); let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); #[cfg(target_arch = "x86_64")] @@ -700,7 +696,7 @@ mod tests { assert!(builder::setup_interrupt_controller(&mut vm, 1).is_ok()); let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); let dummy = Arc::new(Mutex::new(DummyDevice::new())); @@ -750,7 +746,7 @@ mod tests { #[test] fn test_slot_irq_allocation() { let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); let slot = device_manager.allocate_new_slot(0).unwrap(); assert_eq!(slot.irqs.len(), 0); let slot = device_manager.allocate_new_slot(1).unwrap(); diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 3b0d87beb8a..48a07707370 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -326,7 +326,8 @@ impl<'a> Persist<'a> for MMIODeviceManager { state: &Self::State, ) -> Result { let mut dev_manager = - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)); + MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)) + .map_err(Self::Error::DeviceManager)?; let mem = &constructor_args.mem; let vm = constructor_args.vm; @@ -642,7 +643,9 @@ mod tests { fn soft_clone(&self) -> Self { let dummy_mmio_base = 0; let dummy_irq_range = (0, 0); - let mut clone = MMIODeviceManager::new(dummy_mmio_base, dummy_irq_range); + // We can unwrap here as we create with values directly in scope we + // know will results in `Ok` + let mut clone = MMIODeviceManager::new(dummy_mmio_base, dummy_irq_range).unwrap(); // We only care about the device hashmap. clone.id_to_dev_info = self.id_to_dev_info.clone(); clone From e1a18ca8ad1d42b7a84e137ce9fe828b3a17e122 Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Fri, 27 May 2022 14:51:46 +0100 Subject: [PATCH 23/32] MMIO Memory size constant Signed-off-by: Jonathan Woollett-Light --- src/arch/src/aarch64/mod.rs | 2 ++ src/arch/src/lib.rs | 6 ++-- src/arch/src/x86_64/mod.rs | 2 ++ src/vmm/src/builder.rs | 16 ++++++--- src/vmm/src/device_manager/mmio.rs | 47 ++++++++++++++++++--------- src/vmm/src/device_manager/persist.rs | 13 +++++--- 6 files changed, 60 insertions(+), 26 deletions(-) diff --git a/src/arch/src/aarch64/mod.rs b/src/arch/src/aarch64/mod.rs index 21126747cbc..14249171e9a 100644 --- a/src/arch/src/aarch64/mod.rs +++ b/src/arch/src/aarch64/mod.rs @@ -30,6 +30,8 @@ pub enum Error { /// The start of the memory area reserved for MMIO devices. pub const MMIO_MEM_START: u64 = layout::MAPPED_IO_START; +/// The size of the memory area reserved for MMIO devices. +pub const MMIO_MEM_SIZE: u64 = layout::DRAM_MEM_START - layout::MAPPED_IO_START; //>> 1GB /// Returns a Vec of the valid memory addresses for aarch64. /// See [`layout`](layout) module for a drawing of the specific memory model for this platform. diff --git a/src/arch/src/lib.rs b/src/arch/src/lib.rs index b3820526097..e1263e66e06 100644 --- a/src/arch/src/lib.rs +++ b/src/arch/src/lib.rs @@ -17,7 +17,8 @@ pub mod aarch64; #[cfg(target_arch = "aarch64")] pub use aarch64::{ arch_memory_regions, configure_system, get_kernel_start, initrd_load_addr, - layout::CMDLINE_MAX_SIZE, layout::IRQ_BASE, layout::IRQ_MAX, regs, Error, MMIO_MEM_START, + layout::CMDLINE_MAX_SIZE, layout::IRQ_BASE, layout::IRQ_MAX, regs, Error, MMIO_MEM_SIZE, + MMIO_MEM_START, }; /// Module for x86_64 related functionality. @@ -27,7 +28,8 @@ pub mod x86_64; #[cfg(target_arch = "x86_64")] pub use crate::x86_64::{ arch_memory_regions, configure_system, get_kernel_start, initrd_load_addr, - layout::CMDLINE_MAX_SIZE, layout::IRQ_BASE, layout::IRQ_MAX, Error, MMIO_MEM_START, + layout::CMDLINE_MAX_SIZE, layout::IRQ_BASE, layout::IRQ_MAX, Error, MMIO_MEM_SIZE, + MMIO_MEM_START, }; /// Type for returning public functions outcome. diff --git a/src/arch/src/x86_64/mod.rs b/src/arch/src/x86_64/mod.rs index 9f2122134c6..69a59ead3f7 100644 --- a/src/arch/src/x86_64/mod.rs +++ b/src/arch/src/x86_64/mod.rs @@ -46,6 +46,8 @@ const FIRST_ADDR_PAST_32BITS: u64 = 1 << 32; pub const MEM_32BIT_GAP_SIZE: u64 = 768 << 20; /// The start of the memory area reserved for MMIO devices. pub const MMIO_MEM_START: u64 = FIRST_ADDR_PAST_32BITS - MEM_32BIT_GAP_SIZE; +/// The size of the memory area reserved for MMIO devices. +pub const MMIO_MEM_SIZE: u64 = MEM_32BIT_GAP_SIZE; /// Returns a Vec of the valid memory addresses. /// These should be used to configure the GuestMemoryMmap structure for the platform. diff --git a/src/vmm/src/builder.rs b/src/vmm/src/builder.rs index 3c0e122b6ec..9481918e788 100644 --- a/src/vmm/src/builder.rs +++ b/src/vmm/src/builder.rs @@ -254,9 +254,12 @@ fn create_vmm_and_vcpus( // Instantiate the MMIO device manager. // 'mmio_base' address has to be an address which is protected by the kernel // and is architectural specific. - let mmio_device_manager = - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)) - .map_err(StartMicrovmError::RegisterMmioDevice)?; + let mmio_device_manager = MMIODeviceManager::new( + arch::MMIO_MEM_START, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .map_err(StartMicrovmError::RegisterMmioDevice)?; let vcpus; // For x86_64 we need to create the interrupt controller before calling `KVM_CREATE_VCPUS` @@ -1039,7 +1042,12 @@ pub mod tests { } fn default_mmio_device_manager() -> MMIODeviceManager { - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap() + MMIODeviceManager::new( + arch::MMIO_MEM_START, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap() } #[cfg(target_arch = "x86_64")] diff --git a/src/vmm/src/device_manager/mmio.rs b/src/vmm/src/device_manager/mmio.rs index eebc757067e..8f62a3cb3ac 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -107,15 +107,14 @@ pub struct MMIODeviceManager { impl MMIODeviceManager { /// Create a new DeviceManager handling mmio devices (virtio net, block). - pub fn new(mmio_base: u64, irq_interval: (u32, u32)) -> Result { - #[cfg(target_arch = "x86_64")] - let size = arch::x86_64::MEM_32BIT_GAP_SIZE; - #[cfg(target_arch = "aarch64")] - let size = arch::aarch64::layout::DRAM_MEM_START - arch::aarch64::layout::MAPPED_IO_START; //>> 1GB + pub fn new( + mmio_base: u64, + mmio_size: u64, + (irq_start, irq_end): (u32, u32), + ) -> Result { Ok(MMIODeviceManager { - irq_allocator: IdAllocator::new(irq_interval.0, irq_interval.1) - .map_err(Error::AllocatorError)?, - address_allocator: AddressAllocator::new(mmio_base, size) + irq_allocator: IdAllocator::new(irq_start, irq_end).map_err(Error::AllocatorError)?, + address_allocator: AddressAllocator::new(mmio_base, mmio_size) .map_err(Error::AllocatorError)?, bus: devices::Bus::new(), id_to_dev_info: HashMap::new(), @@ -574,8 +573,12 @@ mod tests { ) .unwrap(); let mut vm = builder::setup_kvm_vm(&guest_mem, false).unwrap(); - let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); + let mut device_manager = MMIODeviceManager::new( + 0xd000_0000, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); let dummy = Arc::new(Mutex::new(DummyDevice::new())); @@ -599,8 +602,12 @@ mod tests { ) .unwrap(); let mut vm = builder::setup_kvm_vm(&guest_mem, false).unwrap(); - let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); + let mut device_manager = MMIODeviceManager::new( + 0xd000_0000, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); #[cfg(target_arch = "x86_64")] @@ -695,8 +702,12 @@ mod tests { #[cfg(target_arch = "aarch64")] assert!(builder::setup_interrupt_controller(&mut vm, 1).is_ok()); - let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); + let mut device_manager = MMIODeviceManager::new( + 0xd000_0000, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap(); let mut cmdline = kernel_cmdline::Cmdline::new(4096); let dummy = Arc::new(Mutex::new(DummyDevice::new())); @@ -745,8 +756,12 @@ mod tests { #[test] fn test_slot_irq_allocation() { - let mut device_manager = - MMIODeviceManager::new(0xd000_0000, (arch::IRQ_BASE, arch::IRQ_MAX)).unwrap(); + let mut device_manager = MMIODeviceManager::new( + 0xd000_0000, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap(); let slot = device_manager.allocate_new_slot(0).unwrap(); assert_eq!(slot.irqs.len(), 0); let slot = device_manager.allocate_new_slot(1).unwrap(); diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 48a07707370..7a04dc92f10 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -325,9 +325,12 @@ impl<'a> Persist<'a> for MMIODeviceManager { constructor_args: Self::ConstructorArgs, state: &Self::State, ) -> Result { - let mut dev_manager = - MMIODeviceManager::new(arch::MMIO_MEM_START, (arch::IRQ_BASE, arch::IRQ_MAX)) - .map_err(Self::Error::DeviceManager)?; + let mut dev_manager = MMIODeviceManager::new( + arch::MMIO_MEM_START, + arch::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .map_err(Self::Error::DeviceManager)?; let mem = &constructor_args.mem; let vm = constructor_args.vm; @@ -645,7 +648,9 @@ mod tests { let dummy_irq_range = (0, 0); // We can unwrap here as we create with values directly in scope we // know will results in `Ok` - let mut clone = MMIODeviceManager::new(dummy_mmio_base, dummy_irq_range).unwrap(); + let mut clone = + MMIODeviceManager::new(dummy_mmio_base, arch::MMIO_MEM_SIZE, dummy_irq_range) + .unwrap(); // We only care about the device hashmap. clone.id_to_dev_info = self.id_to_dev_info.clone(); clone From 2a60ce38efd4df6cda56bebd3451bd8956022de4 Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Tue, 31 May 2022 16:09:39 +0100 Subject: [PATCH 24/32] PortIODeviceManager constants Added constants and source references for legacy device handling with `PortIODeviceManager`. Signed-off-by: Jonathan Woollett-Light --- src/vmm/src/device_manager/legacy.rs | 61 +++++++++++++++++++++++---- src/vmm/src/device_manager/persist.rs | 8 ++-- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/src/vmm/src/device_manager/legacy.rs b/src/vmm/src/device_manager/legacy.rs index e0a759d4b5e..22665978c0e 100644 --- a/src/vmm/src/device_manager/legacy.rs +++ b/src/vmm/src/device_manager/legacy.rs @@ -64,12 +64,37 @@ pub struct PortIODeviceManager { pub stdio_serial: Arc>, pub i8042: Arc>, + // Communication event on ports 1 & 3. pub com_evt_1_3: EventFdTrigger, + // Communication event on ports 2 & 4. pub com_evt_2_4: EventFdTrigger, + // Keyboard event. pub kbd_evt: EventFd, } impl PortIODeviceManager { + /// x86 global system interrupt for communication events on serial ports 1 + /// & 3. See + /// . + const COM_EVT_1_3_GSI: u32 = 4; + /// x86 global system interrupt for communication events on serial ports 2 + /// & 4. See + /// . + const COM_EVT_2_4_GSI: u32 = 3; + /// x86 global system interrupt for keyboard port. + /// See . + const KBD_EVT_GSI: u32 = 1; + /// Legacy serial port device addresses. See + /// . + const SERIAL_PORT_ADDRESSES: [u64; 4] = [0x3f8, 0x2f8, 0x3e8, 0x2e8]; + /// Size of legacy serial ports. + const SERIAL_PORT_SIZE: u64 = 0x8; + /// i8042 keyboard data register address. See + /// . + const I8042_KDB_DATA_REGISTER_ADDRESS: u64 = 0x060; + /// i8042 keyboard data register size. + const I8042_KDB_DATA_REGISTER_SIZE: u64 = 0x5; + /// Create a new DeviceManager handling legacy devices (uart, i8042). pub fn new(serial: Arc>, i8042_reset_evfd: EventFd) -> Result { let io_bus = devices::Bus::new(); @@ -103,29 +128,49 @@ impl PortIODeviceManager { let serial_2_4 = create_serial(self.com_evt_2_4.try_clone().map_err(Error::EventFd)?)?; let serial_1_3 = create_serial(self.com_evt_1_3.try_clone().map_err(Error::EventFd)?)?; self.io_bus - .insert(self.stdio_serial.clone(), 0x3f8, 0x8) + .insert( + self.stdio_serial.clone(), + Self::SERIAL_PORT_ADDRESSES[0], + Self::SERIAL_PORT_SIZE, + ) .map_err(Error::BusError)?; self.io_bus - .insert(serial_2_4.clone(), 0x2f8, 0x8) + .insert( + serial_2_4.clone(), + Self::SERIAL_PORT_ADDRESSES[1], + Self::SERIAL_PORT_SIZE, + ) .map_err(Error::BusError)?; self.io_bus - .insert(serial_1_3.clone(), 0x3e8, 0x8) + .insert( + serial_1_3.clone(), + Self::SERIAL_PORT_ADDRESSES[2], + Self::SERIAL_PORT_SIZE, + ) .map_err(Error::BusError)?; self.io_bus - .insert(serial_2_4, 0x2e8, 0x8) + .insert( + serial_2_4, + Self::SERIAL_PORT_ADDRESSES[3], + Self::SERIAL_PORT_SIZE, + ) .map_err(Error::BusError)?; self.io_bus - .insert(self.i8042.clone(), 0x060, 0x5) + .insert( + self.i8042.clone(), + Self::I8042_KDB_DATA_REGISTER_ADDRESS, + Self::I8042_KDB_DATA_REGISTER_SIZE, + ) .map_err(Error::BusError)?; vm_fd - .register_irqfd(&self.com_evt_1_3, 4) + .register_irqfd(&self.com_evt_1_3, Self::COM_EVT_1_3_GSI) .map_err(|e| Error::EventFd(std::io::Error::from_raw_os_error(e.errno())))?; vm_fd - .register_irqfd(&self.com_evt_2_4, 3) + .register_irqfd(&self.com_evt_2_4, Self::COM_EVT_2_4_GSI) .map_err(|e| Error::EventFd(std::io::Error::from_raw_os_error(e.errno())))?; vm_fd - .register_irqfd(&self.kbd_evt, 1) + .register_irqfd(&self.kbd_evt, Self::KBD_EVT_GSI) .map_err(|e| Error::EventFd(std::io::Error::from_raw_os_error(e.errno())))?; Ok(()) diff --git a/src/vmm/src/device_manager/persist.rs b/src/vmm/src/device_manager/persist.rs index 7a04dc92f10..d0c51e393da 100644 --- a/src/vmm/src/device_manager/persist.rs +++ b/src/vmm/src/device_manager/persist.rs @@ -390,11 +390,11 @@ impl<'a> Persist<'a> for MMIODeviceManager { MmioTransport::restore(restore_args, state).map_err(|()| Error::MmioTransport)?; // We do not currently require exact re-allocation of IDs via - // `dev_manager.irq_allocator.allocate_id()` and currently cannot do - // this effectively as `IdAllocator` does not implement an exact + // `dev_manager.irq_allocator.allocate_id()` and currently cannot do + // this effectively as `IdAllocator` does not implement an exact // match API. - // In the future we may require preserving `IdAllocator`'s state - // after snapshot restore so as to restore the exact interrupt IDs + // In the future we may require preserving `IdAllocator`'s state + // after snapshot restore so as to restore the exact interrupt IDs // from the original device's state for implementing hot-plug. // For now this is why we do not restore the state of the // `IdAllocator` under `dev_manager`. From 8cffeee335eac92b2e512d3ba9101c6d8dd99c8a Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Mon, 6 Jun 2022 09:59:39 +0100 Subject: [PATCH 25/32] Updated test coverage Signed-off-by: Jonathan Woollett-Light --- tests/integration_tests/build/test_coverage.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration_tests/build/test_coverage.py b/tests/integration_tests/build/test_coverage.py index 883192e7f9b..97788335372 100644 --- a/tests/integration_tests/build/test_coverage.py +++ b/tests/integration_tests/build/test_coverage.py @@ -29,9 +29,9 @@ # Checkout the cpuid crate. In the future other # differences may appear. if utils.is_io_uring_supported(): - COVERAGE_DICT = {"Intel": 84.89, "AMD": 84.38, "ARM": 84.06} + COVERAGE_DICT = {"Intel": 84.83, "AMD": 84.32, "ARM": 84.06} else: - COVERAGE_DICT = {"Intel": 81.89, "AMD": 81.43, "ARM": 81.05} + COVERAGE_DICT = {"Intel": 81.89, "AMD": 81.37, "ARM": 81.05} PROC_MODEL = proc.proc_type() From 2fc473bbc4dd1fbcd55e37bb9d73da3fe059efca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Barb=C3=A1chano?= Date: Wed, 25 May 2022 16:42:41 +0200 Subject: [PATCH 26/32] Add SHA256SUMS checksums when making a release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pablo Barbáchano --- tools/devtool | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/devtool b/tools/devtool index b3da55ac520..9b30109d28d 100755 --- a/tools/devtool +++ b/tools/devtool @@ -1083,6 +1083,8 @@ cmd_build_release_archive() { add_file_artifact "$release_dir" "$file" done + find $release_dir -type f |sort |xargs sha256sum > SHA256SUMS.$(uname -m) + # Run tests to obtain test reports dir. cmd_test || cleanup_release_dir "$release_dir" "Tests failed." add_folder_artifact "$release_dir" "test_results" "$release_suffix" From 8bc8d5e6f86b0a737e56a91ab154920964c1d920 Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Tue, 7 Jun 2022 15:44:12 +0100 Subject: [PATCH 27/32] Fixing loosely define behaviour within `write_log` Signed-off-by: Jonathan Woollett-Light --- src/devices/src/virtio/net/device.rs | 68 ++++++++++++++-------------- src/logger/src/logger.rs | 68 +++++++++++++++++++++++----- src/vmm/src/persist.rs | 68 ++++++++++++++-------------- 3 files changed, 127 insertions(+), 77 deletions(-) diff --git a/src/devices/src/virtio/net/device.rs b/src/devices/src/virtio/net/device.rs index c4786b7d5bd..5a8d8434d51 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -5,18 +5,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the THIRD-PARTY file. -use crate::virtio::net::tap::Tap; -#[cfg(test)] -use crate::virtio::net::test_utils::Mocks; -use crate::virtio::net::Error; -use crate::virtio::net::NetQueue; -use crate::virtio::net::Result; -use crate::virtio::net::{MAX_BUFFER_SIZE, QUEUE_SIZE, QUEUE_SIZES, RX_INDEX, TX_INDEX}; -use crate::virtio::DescriptorChain; -use crate::virtio::{ - ActivateResult, DeviceState, IrqTrigger, IrqType, Queue, VirtioDevice, TYPE_NET, -}; -use crate::{report_net_event_fail, Error as DeviceError}; +#[cfg(not(test))] +use std::io; +use std::io::Read; +use std::io::Write; +use std::net::Ipv4Addr; +use std::sync::atomic::AtomicUsize; +use std::sync::{Arc, Mutex}; +use std::{cmp, mem, result}; use dumbo::pdu::ethernet::EthernetFrame; use libc::EAGAIN; @@ -24,13 +20,6 @@ use logger::{error, warn, IncMetric, METRICS}; use mmds::data_store::Mmds; use mmds::ns::MmdsNetworkStack; use rate_limiter::{BucketUpdate, RateLimiter, TokenType}; -#[cfg(not(test))] -use std::io; -use std::io::{Read, Write}; -use std::net::Ipv4Addr; -use std::sync::atomic::AtomicUsize; -use std::sync::{Arc, Mutex}; -use std::{cmp, mem, result}; use utils::eventfd::EventFd; use utils::net::mac::{MacAddr, MAC_ADDR_LEN}; use virtio_gen::virtio_net::{ @@ -41,6 +30,18 @@ use virtio_gen::virtio_net::{ use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; use vm_memory::{ByteValued, Bytes, GuestAddress, GuestMemoryError, GuestMemoryMmap}; +use crate::virtio::net::tap::Tap; +#[cfg(test)] +use crate::virtio::net::test_utils::Mocks; +use crate::virtio::net::{ + Error, NetQueue, Result, MAX_BUFFER_SIZE, QUEUE_SIZE, QUEUE_SIZES, RX_INDEX, TX_INDEX, +}; +use crate::virtio::{ + ActivateResult, DescriptorChain, DeviceState, IrqTrigger, IrqType, Queue, VirtioDevice, + TYPE_NET, +}; +use crate::{report_net_event_fail, Error as DeviceError}; + enum FrontendError { AddUsed, DescriptorChainTooSmall, @@ -858,24 +859,10 @@ impl VirtioDevice for Net { #[cfg(test)] #[macro_use] pub mod tests { - use super::*; - use crate::virtio::net::device::{ - frame_bytes_from_buf, frame_bytes_from_buf_mut, init_vnet_hdr, vnet_hdr_len, - }; use std::net::Ipv4Addr; use std::time::Duration; use std::{io, mem, thread}; - use crate::check_metric_after_block; - use crate::virtio::net::test_utils::test::TestHelper; - use crate::virtio::net::test_utils::{ - default_net, if_index, inject_tap_tx_frame, set_mac, NetEvent, NetQueue, ReadTapMock, - TapTrafficSimulator, - }; - use crate::virtio::net::QUEUE_SIZES; - use crate::virtio::{ - Net, VirtioDevice, MAX_BUFFER_SIZE, RX_INDEX, TX_INDEX, TYPE_NET, VIRTQ_DESC_F_WRITE, - }; use dumbo::pdu::arp::{EthIPv4ArpFrame, ETH_IPV4_FRAME_LEN}; use dumbo::pdu::ethernet::ETHERTYPE_ARP; use logger::{IncMetric, METRICS}; @@ -887,6 +874,21 @@ pub mod tests { }; use vm_memory::{Address, GuestMemory}; + use super::*; + use crate::check_metric_after_block; + use crate::virtio::net::device::{ + frame_bytes_from_buf, frame_bytes_from_buf_mut, init_vnet_hdr, vnet_hdr_len, + }; + use crate::virtio::net::test_utils::test::TestHelper; + use crate::virtio::net::test_utils::{ + default_net, if_index, inject_tap_tx_frame, set_mac, NetEvent, NetQueue, ReadTapMock, + TapTrafficSimulator, + }; + use crate::virtio::net::QUEUE_SIZES; + use crate::virtio::{ + Net, VirtioDevice, MAX_BUFFER_SIZE, RX_INDEX, TX_INDEX, TYPE_NET, VIRTQ_DESC_F_WRITE, + }; + impl Net { pub fn read_tap(&mut self) -> io::Result { match &self.mocks.read_tap { diff --git a/src/logger/src/logger.rs b/src/logger/src/logger.rs index 4a72a2e125a..b734f81639a 100644 --- a/src/logger/src/logger.rs +++ b/src/logger/src/logger.rs @@ -358,11 +358,12 @@ impl Logger { Ok(()) } - /// The `write_log` method takes care of the common logic involved in writing - /// regular log messages. - fn write_log(&self, mut msg: String, msg_level: Level) { + /// Handles the common logic of writing regular log messages. + /// + /// Writes `msg` followed by a newline to the destination, flushing afterwards. + fn write_log(&self, msg: String, msg_level: Level) { let mut guard; - let mut dest: Box = if self.init.is_initialized() { + let mut writer: Box = if self.init.is_initialized() { guard = extract_guard(self.log_buf.lock()); Box::new(guard.as_mut()) } else { @@ -371,12 +372,14 @@ impl Logger { _ => Box::new(stdout()), } }; - - // No need to explicitly call flush because the underlying LineWriter flushes - // automatically whenever a newline is detected (and we always end with a - // newline the current write). - msg.push('\n'); - if dest.write_all(msg.as_bytes()).is_err() { + // Writes `msg` followed by newline and flushes, if either operation returns an error, + // increment missed log count. + // This approach is preferable over `Result::and` as if `write!` returns an error it then + // does not attempt to flush. + if writeln!(writer, "{}", msg) + .and_then(|_| writer.flush()) + .is_err() + { // No reason to log the error to stderr here, just increment the metric. METRICS.logger.missed_log_count.inc(); } @@ -424,7 +427,8 @@ impl Log for Logger { #[cfg(test)] mod tests { - use std::io::Read; + use std::fs::{create_dir, read_to_string, remove_dir, remove_file, OpenOptions}; + use std::io::{BufWriter, Read, Write}; use std::sync::Arc; use super::*; @@ -526,6 +530,48 @@ mod tests { assert_eq!(l.show_level(), true); } + #[test] + fn test_write_log() { + // Data to log to file for test. + const TEST_HEADER: &str = "test_log"; + const TEST_STR: &str = "testing flushing"; + // File to use for test. + const TEST_DIR: &str = "./tmp"; + const TEST_FILE: &str = "test.txt"; + let test_path = format!("{}/{}", TEST_DIR, TEST_FILE); + + // Creates ./tmp directory + create_dir(TEST_DIR).unwrap(); + // A buffered writer to a file + let file = OpenOptions::new() + .create(true) + .write(true) + .truncate(true) + .open(&test_path) + .unwrap(); + let writer = Box::new(BufWriter::new(file)); + // Create a logger with this buffered writer as the `dest`. + let logger = Logger::new(); + logger.init(String::from(TEST_HEADER), writer).unwrap(); + // Log some generic data + logger.write_log(String::from(TEST_STR), Level::Info); + // To drop the logger without calling its destructor, or to `forget` it + // (https://doc.rust-lang.org/stable/std/mem/fn.forget.html) will lead + // to a memory leak, so for this test I do not do this. + // As such this test simply illustrates the `write_log` function will + // always flush such that in the occurrence of the crash the expected + // behavior that all temporally distant logs from a crash are flushed. + + // Read from the log file. + let file_contents = read_to_string(&test_path).unwrap(); + // Asserts the contents of the log file are as expected. + assert_eq!(file_contents, format!("{}\n{}\n", TEST_HEADER, TEST_STR)); + // Removes the log file. + remove_file(&test_path).unwrap(); + // Removes /tmp directory + remove_dir(TEST_DIR).unwrap(); + } + #[test] fn test_configure() { let logger = Logger::new(); diff --git a/src/vmm/src/persist.rs b/src/vmm/src/persist.rs index c1ddcd44917..053a9b514f7 100644 --- a/src/vmm/src/persist.rs +++ b/src/vmm/src/persist.rs @@ -6,33 +6,15 @@ use std::fmt::{Display, Formatter}; use std::fs::{File, OpenOptions}; use std::io::{self, Write}; -use std::os::unix::{io::AsRawFd, net::UnixStream}; +use std::os::unix::io::AsRawFd; +use std::os::unix::net::UnixStream; use std::path::Path; use std::sync::{Arc, Mutex}; -use crate::builder::{self, StartMicrovmError}; -use crate::device_manager::persist::Error as DevicePersistError; -use crate::mem_size_mib; -use crate::vmm_config::machine_config::MAX_SUPPORTED_VCPUS; -use crate::vmm_config::snapshot::{ - CreateSnapshotParams, LoadSnapshotParams, MemBackendType, SnapshotType, -}; -use crate::vstate::{self, vcpu::VcpuState, vm::VmState}; - -use crate::device_manager::persist::DeviceStates; -use crate::memory_snapshot; -use crate::memory_snapshot::{GuestMemoryState, SnapshotMemory}; -#[cfg(target_arch = "x86_64")] -use crate::version_map::FC_V0_23_SNAP_VERSION; -use crate::version_map::{FC_V1_0_SNAP_VERSION, FC_V1_1_SNAP_VERSION, FC_VERSION_TO_SNAP_VERSION}; -use crate::{Error as VmmError, EventManager, Vmm}; -#[cfg(target_arch = "x86_64")] -use cpuid::common::{get_vendor_id_from_cpuid, get_vendor_id_from_host}; - -use crate::resources::VmResources; -use crate::vmm_config::instance_info::InstanceInfo; #[cfg(target_arch = "aarch64")] use arch::regs::{get_manufacturer_id_from_host, get_manufacturer_id_from_state}; +#[cfg(target_arch = "x86_64")] +use cpuid::common::{get_vendor_id_from_cpuid, get_vendor_id_from_host}; use devices::virtio::TYPE_NET; use logger::{error, info}; use seccompiler::BpfThreadMap; @@ -45,6 +27,22 @@ use versionize_derive::Versionize; use virtio_gen::virtio_ring::VIRTIO_RING_F_EVENT_IDX; use vm_memory::{GuestMemory, GuestMemoryMmap}; +use crate::builder::{self, StartMicrovmError}; +use crate::device_manager::persist::{DeviceStates, Error as DevicePersistError}; +use crate::memory_snapshot::{GuestMemoryState, SnapshotMemory}; +use crate::resources::VmResources; +#[cfg(target_arch = "x86_64")] +use crate::version_map::FC_V0_23_SNAP_VERSION; +use crate::version_map::{FC_V1_0_SNAP_VERSION, FC_V1_1_SNAP_VERSION, FC_VERSION_TO_SNAP_VERSION}; +use crate::vmm_config::instance_info::InstanceInfo; +use crate::vmm_config::machine_config::MAX_SUPPORTED_VCPUS; +use crate::vmm_config::snapshot::{ + CreateSnapshotParams, LoadSnapshotParams, MemBackendType, SnapshotType, +}; +use crate::vstate::vcpu::VcpuState; +use crate::vstate::vm::VmState; +use crate::{mem_size_mib, memory_snapshot, vstate, Error as VmmError, EventManager, Vmm}; + #[cfg(target_arch = "x86_64")] const FC_V0_23_MAX_DEVICES: u32 = 11; @@ -72,16 +70,18 @@ pub struct MicrovmState { pub device_states: DeviceStates, } -/// This describes the mapping between Firecracker base virtual address and offset in the -/// buffer or file backend for a guest memory region. It is used to tell an external -/// process/thread where to populate the guest memory data for this range. +/// This describes the mapping between Firecracker base virtual address and +/// offset in the buffer or file backend for a guest memory region. It is used +/// to tell an external process/thread where to populate the guest memory data +/// for this range. /// -/// E.g. Guest memory contents for a region of `size` bytes can be found in the backend -/// at `offset` bytes from the beginning, and should be copied/populated into `base_host_address`. +/// E.g. Guest memory contents for a region of `size` bytes can be found in the +/// backend at `offset` bytes from the beginning, and should be copied/populated +/// into `base_host_address`. #[derive(Clone, Debug, Serialize)] pub struct GuestRegionUffdMapping { - /// Base host virtual address where the guest memory contents for this region - /// should be copied/populated. + /// Base host virtual address where the guest memory contents for this + /// region should be copied/populated. pub base_host_virt_addr: u64, /// Region size. pub size: usize, @@ -663,6 +663,10 @@ fn validate_fc_version_format(version: &str) -> Result<(), CreateSnapshotError> #[cfg(test)] mod tests { + use snapshot::Persist; + use utils::errno; + use utils::tempfile::TempFile; + use super::*; use crate::builder::tests::{ default_kernel_cmdline, default_vmm, insert_balloon_device, insert_block_devices, @@ -678,9 +682,6 @@ mod tests { use crate::vmm_config::vsock::tests::default_config; use crate::Vmm; - use snapshot::Persist; - use utils::{errno, tempfile::TempFile}; - #[cfg(target_arch = "aarch64")] const FC_VERSION_0_23_0: &str = "0.23.0"; @@ -826,9 +827,10 @@ mod tests { #[test] fn test_create_snapshot_error_display() { - use crate::persist::CreateSnapshotError::*; use vm_memory::GuestMemoryError; + use crate::persist::CreateSnapshotError::*; + let err = DirtyBitmap(VmmError::DirtyBitmap(kvm_ioctls::Error::new(20))); let _ = format!("{}{:?}", err, err); From b1b7035a75e04b57a952851b3f533b7ccae2955e Mon Sep 17 00:00:00 2001 From: Jonathan Woollett-Light Date: Mon, 13 Jun 2022 11:26:00 +0100 Subject: [PATCH 28/32] Increased binary test target & limit Signed-off-by: Jonathan Woollett-Light --- tests/integration_tests/build/test_binary_size.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration_tests/build/test_binary_size.py b/tests/integration_tests/build/test_binary_size.py index dd7ea39e996..221ab730769 100644 --- a/tests/integration_tests/build/test_binary_size.py +++ b/tests/integration_tests/build/test_binary_size.py @@ -19,9 +19,9 @@ "JAILER_BINARY_SIZE_LIMIT": 869608, }, "aarch64": { - "FC_BINARY_SIZE_TARGET": 2208040, + "FC_BINARY_SIZE_TARGET": 2322392, "JAILER_BINARY_SIZE_TARGET": 775456, - "FC_BINARY_SIZE_LIMIT": 2318442, + "FC_BINARY_SIZE_LIMIT": 2438511, "JAILER_BINARY_SIZE_LIMIT": 845247, } } From a85cd831dbdb5de55f8c1ede53cd91b494d13c44 Mon Sep 17 00:00:00 2001 From: CuriousCorrelation Date: Thu, 9 Jun 2022 22:16:18 +0530 Subject: [PATCH 29/32] CI: Add checks for commit body format Signed-off-by: CuriousCorrelation --- tests/framework/gitlint_rules.py | 66 ++++++++++++++++++++++++++++---- 1 file changed, 58 insertions(+), 8 deletions(-) diff --git a/tests/framework/gitlint_rules.py b/tests/framework/gitlint_rules.py index 41a2065bc90..8b8e4aefb80 100644 --- a/tests/framework/gitlint_rules.py +++ b/tests/framework/gitlint_rules.py @@ -8,20 +8,70 @@ # pylint: disable=R0903 -class SignedOffBy(CommitRule): - """Make sure that each commit contains a "Signed-off-by" line.""" +class EndsSigned(CommitRule): + """Checks commit message body formatting. + + Makes sure each commit message body ends with + 1 or more signatures ("Signed-off-by"), followed by + 0 or more co-authors ("Co-authored-by"). + """ # The name of the rule. - name = "body-requires-signed-off-by" + name = "body-requires-signature" # The unique id of the rule. id = "UC2" def validate(self, commit): """Validate user defined gitlint rules.""" - for line in commit.message.body: - if line.startswith("Signed-off-by"): - return [] + # Utilities + def rtn(stmt, i): + return [RuleViolation(self.id, stmt, None, i)] + + co_auth = "Co-authored-by:" + sig = "Signed-off-by:" + + message_iter = enumerate(commit.message.body) + + # Checks commit message contains a `sig` string + found = False + for i, line in message_iter: + # We check that no co-authors are declared before signatures. + if line.startswith(co_auth): + return rtn(f"'{co_auth}' found before '{sig}'", i) + if line.startswith(sig): + found = True + break + + # If no signature was found in the message + # (before `message_iter` ended) + if not found: + return rtn(f"'{sig}' not found in commit message body", None) + + # Checks lines following signature are + # either signatures or co-authors + for i, line in message_iter: + if line.startswith(sig) or not line.strip(): + continue + + # Once we encounter the first co-author, + # we no longer accept signatures + if line.startswith(co_auth): + break + + return rtn( + (f"Non '{co_auth}' or '{sig}' string found " + f"following 1st '{sig}'"), + i, + ) + + # Checks lines following co-author are only additional co-authors. + for i, line in message_iter: + if not line.startswith(co_auth): + return rtn( + f"Non '{co_auth}' string found after 1st '{co_auth}'", + i, + ) - msg = "Body does not contain a 'Signed-off-by' line" - return [RuleViolation(self.id, msg, line_nr=1)] + # Return no errors + return [] From b73d1070e20c1264d99d547d2c61e3efcf0c0934 Mon Sep 17 00:00:00 2001 From: CuriousCorrelation Date: Thu, 9 Jun 2022 22:16:43 +0530 Subject: [PATCH 30/32] docs: Add commit message example Signed-off-by: CuriousCorrelation --- CONTRIBUTING.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a075e5e88a3..823133a4a3c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,6 +68,17 @@ testing. Your contribution needs to meet the following standards: - Document all your public functions. - Add a descriptive message for each commit. Follow [commit message best practices](https://github.com/erlang/otp/wiki/writing-good-commit-messages). +- A good commit message may look like + + ``` + A descriptive title of 50 characters or fewer + + A concise description where each line is 72 characters or fewer. + + Signed-Off-By + Co-Authored-By: + ``` + - Document your pull requests. Include the reasoning behind each change, and the testing done. - Acknowledge Firecracker's [Apache 2.0 license](LICENSE) and certify that no From 0fa080b137fd29e5bcd95073473b0a57c3868d86 Mon Sep 17 00:00:00 2001 From: CuriousCorrelation Date: Sat, 11 Jun 2022 00:10:04 +0530 Subject: [PATCH 31/32] CI: Add doctests for commit msg validation Signed-off-by: CuriousCorrelation --- tests/framework/gitlint_rules.py | 73 +++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/tests/framework/gitlint_rules.py b/tests/framework/gitlint_rules.py index 8b8e4aefb80..ccb705e10da 100644 --- a/tests/framework/gitlint_rules.py +++ b/tests/framework/gitlint_rules.py @@ -23,7 +23,78 @@ class EndsSigned(CommitRule): id = "UC2" def validate(self, commit): - """Validate user defined gitlint rules.""" + r"""Validate user defined gitlint rules. + + >>> from gitlint.tests.base import BaseTestCase + >>> from gitlint.rules import RuleViolation + ... + >>> ends_signed = EndsSigned() + ... + >>> msg1 = ( + ... f"Title\n\nMessage.\n\n" + ... f"Signed-off-by: name " + ... ) + >>> commit1 = BaseTestCase.gitcommit(msg1) + >>> ends_signed.validate(commit1) + [] + >>> msg2 = ( + ... f"Title\n\nMessage.\n\n" + ... f"Signed-off-by: name \n\n" + ... f"Co-authored-by: name " + ... ) + >>> commit2 = BaseTestCase.gitcommit(msg2) + >>> ends_signed.validate(commit2) + [] + >>> msg3 = ( + ... f"Title\n\nMessage.\n\n" + ... ) + >>> commit3 = BaseTestCase.gitcommit(msg3) + >>> vio3 = ends_signed.validate(commit3) + >>> vio_msg3 = ( + ... f"'Signed-off-by:' not found " + ... f"in commit message body" + ... ) + >>> vio3 == [RuleViolation("UC2", vio_msg3)] + True + >>> msg4 = ( + ... f"Title\n\nMessage.\n\n" + ... f"Signed-off-by: name \n\na sentence" + ... ) + >>> commit4 = BaseTestCase.gitcommit(msg4) + >>> vio4 = ends_signed.validate(commit4) + >>> vio_msg4 = ( + ... f"Non 'Co-authored-by:' or 'Signed-off-by:'" + ... f" string found following 1st 'Signed-off-by:'" + ... ) + >>> vio4 == [RuleViolation("UC2", vio_msg4, None, 5)] + True + >>> msg5 = ( + ... f"Title\n\nMessage.\n\n" + ... f"Co-authored-by: name \n\n" + ... f"a sentence." + ... ) + >>> commit5 = BaseTestCase.gitcommit(msg5) + >>> vio5 = ends_signed.validate(commit5) + >>> vio_msg5 = ( + ... f"'Co-authored-by:' found before 'Signed-off-by:'" + ... ) + >>> vio5 == [RuleViolation("UC2", vio_msg5, None, 3)] + True + >>> msg6 = ( + ... f"Title\n\nMessage.\n\n" + ... f"Signed-off-by: name \n\n" + ... f"Co-authored-by: name \n\n" + ... f"a sentence" + ... ) + >>> commit6 = BaseTestCase.gitcommit(msg6) + >>> vio6 = ends_signed.validate(commit6) + >>> vio_msg6 = ( + ... f"Non 'Co-authored-by:' string found " + ... f"after 1st 'Co-authored-by:'" + ... ) + >>> vio6 == [RuleViolation("UC2", vio_msg6, None, 6)] + True + """ # Utilities def rtn(stmt, i): return [RuleViolation(self.id, stmt, None, i)] From 18c70afe7d923fa874e8493cbf7b5496d1f9e28e Mon Sep 17 00:00:00 2001 From: Ives van Hoorne Date: Wed, 25 May 2022 12:20:38 +0200 Subject: [PATCH 32/32] allow writing snapshot on top of existing files Signed-off-by: Ives van Hoorne --- src/vmm/src/persist.rs | 14 +- .../integration_tests/build/test_coverage.py | 2 +- .../functional/test_snapshot_basic.py | 122 ++++++++++++++++++ 3 files changed, 133 insertions(+), 5 deletions(-) diff --git a/src/vmm/src/persist.rs b/src/vmm/src/persist.rs index 053a9b514f7..2817504d553 100644 --- a/src/vmm/src/persist.rs +++ b/src/vmm/src/persist.rs @@ -328,14 +328,20 @@ fn snapshot_memory_to_file( let mut file = OpenOptions::new() .write(true) .create(true) - .truncate(true) .open(mem_file_path) .map_err(|e| MemoryBackingFile("open", e))?; - // Set the length of the file to the full size of the memory area. let mem_size_mib = mem_size_mib(vmm.guest_memory()); - file.set_len((mem_size_mib * 1024 * 1024) as u64) - .map_err(|e| MemoryBackingFile("set_length", e))?; + let expected_size = (mem_size_mib * 1024 * 1024) as u64; + let file_size = file + .metadata() + .map_err(|e| MemoryBackingFile("get_metadata", e))? + .len(); + if file_size != expected_size { + // Set the length of the file to the full size of the memory area. + file.set_len(expected_size) + .map_err(|e| MemoryBackingFile("set_length", e))?; + } match snapshot_type { SnapshotType::Diff => { diff --git a/tests/integration_tests/build/test_coverage.py b/tests/integration_tests/build/test_coverage.py index 97788335372..c076595706f 100644 --- a/tests/integration_tests/build/test_coverage.py +++ b/tests/integration_tests/build/test_coverage.py @@ -29,7 +29,7 @@ # Checkout the cpuid crate. In the future other # differences may appear. if utils.is_io_uring_supported(): - COVERAGE_DICT = {"Intel": 84.83, "AMD": 84.32, "ARM": 84.06} + COVERAGE_DICT = {"Intel": 84.83, "AMD": 84.32, "ARM": 84.01} else: COVERAGE_DICT = {"Intel": 81.89, "AMD": 81.37, "ARM": 81.05} diff --git a/tests/integration_tests/functional/test_snapshot_basic.py b/tests/integration_tests/functional/test_snapshot_basic.py index 8cd5b2d4933..7a08bd29461 100644 --- a/tests/integration_tests/functional/test_snapshot_basic.py +++ b/tests/integration_tests/functional/test_snapshot_basic.py @@ -5,6 +5,7 @@ import filecmp import logging import os +import shutil import tempfile from pathlib import Path @@ -188,6 +189,90 @@ def _test_compare_mem_files(context): basevm.kill() +def _test_overwrite_diff_snapshot(context): + logger = context.custom['logger'] + vm_builder = context.custom['builder'] + + # Create a rw copy artifact. + root_disk = context.disk.copy() + # Get ssh key from read-only artifact. + ssh_key = context.disk.ssh_key() + # Create a fresh microvm from artifacts. + vm_instance = vm_builder.build(kernel=context.kernel, + disks=[root_disk], + ssh_key=ssh_key, + config=context.microvm, + diff_snapshots=True) + microvm = vm_instance.vm + microvm.start() + ssh_connection = net_tools.SSHConnection(microvm.ssh_config) + + # Verify if guest can run commands. + exit_code, _, _ = ssh_connection.execute_command("sync") + assert exit_code == 0 + + # Create a snapshot builder from a microvm. + snapshot_builder = SnapshotBuilder(microvm) + + logger.info("Create full snapshot.") + # Create full snapshot. + full_snapshot = snapshot_builder.create([root_disk.local_path()], + ssh_key, + SnapshotType.DIFF, + mem_file_name="vm.mem", + snapshot_name="vm.vmstate") + + microvm.kill() + + logger.info("Load VM from snapshot.") + + logger.info("Load snapshot, mem %s", full_snapshot.mem) + microvm, _ = vm_builder.build_from_snapshot( + full_snapshot, + resume=True, + diff_snapshots=True + ) + ssh_connection = net_tools.SSHConnection(microvm.ssh_config) + + # Verify that guest is able to run commands. + exit_code, _, _ = ssh_connection.execute_command("cat /proc/cpuinfo") + assert exit_code == 0 + + # Create a snapshot builder from a microvm. + snapshot_builder = SnapshotBuilder(microvm) + + # Copy over the existing snapshot to the snapshot save location, + # this snapshot will be overwritten. + snapshot_dir = snapshot_builder.create_snapshot_dir() + shutil.copyfile(full_snapshot.mem, os.path.join(snapshot_dir, "vm.mem")) + os.chown(os.path.join(snapshot_dir, "vm.mem"), + microvm.jailer.uid, microvm.jailer.gid) + + logger.info("Create diff snapshot.") + # Create diff snapshot _on top_ of full snapshot. + new_snapshot = snapshot_builder.create([root_disk.local_path()], + ssh_key, + SnapshotType.DIFF, + mem_file_name="vm.mem", + snapshot_name="vm.vmstate") + microvm.kill() + + logger.info("Load VM from combined snapshot.") + # Verify that we can load from new snapshot + logger.info("Load snapshot, mem %s", new_snapshot.mem) + microvm, _ = vm_builder.build_from_snapshot( + new_snapshot, + resume=True, + diff_snapshots=True + ) + ssh_connection = net_tools.SSHConnection(microvm.ssh_config) + # Run command to verify it loaded + exit_code, _, _ = ssh_connection.execute_command("sync") + assert exit_code == 0 + + microvm.kill() + + def test_patch_drive_snapshot(bin_cloner_path): """ Test that a patched drive is correctly used by guests loaded from snapshot. @@ -416,6 +501,43 @@ def test_cmp_full_and_first_diff_mem(network_config, test_matrix.run_test(_test_compare_mem_files) +def test_overwrite_diff_snapshot(network_config, + bin_cloner_path): + """ + Can write a diff snapshot on top of a full snapshot. + + @type: functional + """ + logger = logging.getLogger("snapshot_diff_overwrite") + + artifacts = ArtifactCollection(_test_images_s3_bucket()) + # Testing matrix: + # - Guest kernel: All supported ones + # - Rootfs: Ubuntu 18.04 + # - Microvm: 2vCPU with 512 MB RAM + microvm_artifacts = ArtifactSet(artifacts.microvms(keyword="2vcpu_512mb")) + kernel_artifacts = ArtifactSet(artifacts.kernels()) + disk_artifacts = ArtifactSet(artifacts.disks(keyword="ubuntu")) + + # Create a test context and add builder, logger, network. + test_context = TestContext() + test_context.custom = { + 'builder': MicrovmBuilder(bin_cloner_path), + 'network_config': network_config, + 'logger': logger + } + + # Create the test matrix. + test_matrix = TestMatrix(context=test_context, + artifact_sets=[ + microvm_artifacts, + kernel_artifacts, + disk_artifacts + ]) + + test_matrix.run_test(_test_overwrite_diff_snapshot) + + def test_negative_postload_api(bin_cloner_path): """ Test APIs fail after loading from snapshot.