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 diff --git a/Cargo.lock b/Cargo.lock index 121a99469dc..8dd17aa5609 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]] @@ -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]] @@ -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" @@ -1203,18 +1213,18 @@ checksum = "bd986f4fdf949ab2181c7b4fedb03fb0e9de6b0aa788fff247b2608701ce3457" [[package]] name = "vm-memory" -version = "0.1.0" +version = "0.3.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", @@ -1253,6 +1263,7 @@ dependencies = [ "versionize_derive", "virtio_gen", "vm-memory 0.1.0", + "vm-memory 0.3.0", "vm-superio", ] 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 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/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 76c63276bd3..69a59ead3f7 100644 --- a/src/arch/src/x86_64/mod.rs +++ b/src/arch/src/x86_64/mod.rs @@ -42,9 +42,12 @@ 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; +/// 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/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/net/device.rs b/src/devices/src/virtio/net/device.rs index d9309da7cf6..5a8d8434d51 100755 --- a/src/devices/src/virtio/net/device.rs +++ b/src/devices/src/virtio/net/device.rs @@ -5,16 +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::Result; -use crate::virtio::net::{MAX_BUFFER_SIZE, QUEUE_SIZE, QUEUE_SIZES, RX_INDEX, TX_INDEX}; -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; @@ -22,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::{ @@ -36,8 +27,21 @@ 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}; +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, @@ -107,7 +111,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], @@ -156,7 +159,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 { @@ -183,7 +187,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], @@ -245,19 +248,20 @@ 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) - })?; + 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(); - self.rx_deferred_irqs = false; - Ok(()) - } + let queue = match queue_type { + NetQueue::Rx => &mut self.queues[RX_INDEX], + NetQueue::Tx => &mut self.queues[TX_INDEX], + }; - fn signal_rx_used_queue(&mut self) -> result::Result<(), DeviceError> { - if self.rx_deferred_irqs { - 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) + })?; } Ok(()) @@ -299,70 +303,83 @@ 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_or_enable_notification(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 } @@ -492,7 +509,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. @@ -504,7 +521,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> { @@ -524,10 +541,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) { @@ -613,15 +630,15 @@ 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(); } + 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() @@ -654,13 +671,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); } } @@ -825,6 +840,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); @@ -837,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}; @@ -866,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 { @@ -933,7 +956,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); @@ -1536,6 +1560,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!( @@ -1545,6 +1574,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(); @@ -1603,6 +1682,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)); @@ -1615,11 +1703,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 @@ -1651,6 +1756,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)); @@ -1844,4 +1957,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); + } } 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. 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 { 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/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() } - } -} 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/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/src/vmm/src/builder.rs b/src/vmm/src/builder.rs index f7b275c4246..9481918e788 100644 --- a/src/vmm/src/builder.rs +++ b/src/vmm/src/builder.rs @@ -254,8 +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)); + 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` @@ -1038,7 +1042,12 @@ 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::MMIO_MEM_SIZE, + (arch::IRQ_BASE, arch::IRQ_MAX), + ) + .unwrap() } #[cfg(target_arch = "x86_64")] 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/mmio.rs b/src/vmm/src/device_manager/mmio.rs index dce976520c5..8f62a3cb3ac 100644 --- a/src/vmm/src/device_manager/mmio.rs +++ b/src/vmm/src/device_manager/mmio.rs @@ -30,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)] @@ -48,14 +49,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 +68,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), } } } @@ -82,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)] @@ -96,85 +97,48 @@ 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::IrqsExhausted); - } - 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) 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, - irqs: IrqManager::new(irq_interval.0, irq_interval.1), + pub fn new( + mmio_base: u64, + mmio_size: u64, + (irq_start, irq_end): (u32, u32), + ) -> Result { + Ok(MMIODeviceManager { + 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(), - } + }) } /// 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, + addr: self + .address_allocator + .allocate(MMIO_LEN, MMIO_LEN, AllocPolicy::FirstMatch) + .map_err(Error::AllocatorError)? + .start(), 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, @@ -260,7 +224,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(), @@ -269,6 +239,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) } @@ -285,17 +256,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) } @@ -595,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)); + 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())); @@ -620,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)); + 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")] @@ -653,7 +639,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 +664,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 +678,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); @@ -715,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)); + 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())); @@ -765,12 +756,16 @@ mod tests { #[test] 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 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(); + assert_eq!(slot.irqs[0], arch::IRQ_BASE); assert_eq!( format!( "{}", @@ -778,60 +773,23 @@ 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); + 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()), - "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); - 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..d0c51e393da 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; @@ -324,8 +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)); + 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; @@ -340,12 +345,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)?; @@ -360,16 +382,28 @@ 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, }; 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)?; @@ -506,7 +540,6 @@ impl<'a> Persist<'a> for MMIODeviceManager { constructor_args.event_manager, )?; } - Ok(dev_manager) } } @@ -613,7 +646,11 @@ 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, 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 diff --git a/src/vmm/src/persist.rs b/src/vmm/src/persist.rs index e7e271e5ee1..2817504d553 100644 --- a/src/vmm/src/persist.rs +++ b/src/vmm/src/persist.rs @@ -6,33 +6,16 @@ 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_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; use serde::Serialize; @@ -44,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; @@ -71,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, @@ -327,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 => { @@ -370,13 +377,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", @@ -659,6 +669,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, @@ -674,9 +688,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"; @@ -822,9 +833,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); diff --git a/tests/framework/dependencies.txt b/tests/framework/dependencies.txt index 64ebeda576e..ccba0860b96 100644 --- a/tests/framework/dependencies.txt +++ b/tests/framework/dependencies.txt @@ -1 +1,89 @@ -{'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)', + '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', + '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', + 'glob v0.3.0', + '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', + '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', + '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', + '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.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'] diff --git a/tests/framework/gitlint_rules.py b/tests/framework/gitlint_rules.py index 41a2065bc90..ccb705e10da 100644 --- a/tests/framework/gitlint_rules.py +++ b/tests/framework/gitlint_rules.py @@ -8,20 +8,141 @@ # 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 [] + 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)] + + 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 [] 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) diff --git a/tests/framework/utils.py b/tests/framework/utils.py index 158e5c97ed1..3808657697a 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: + 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): """ Run a command using the sync function that logs the output. 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, } } diff --git a/tests/integration_tests/build/test_coverage.py b/tests/integration_tests/build/test_coverage.py index 7acee85d469..c076595706f 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.83, "AMD": 84.32, "ARM": 84.01} else: - COVERAGE_DICT = {"Intel": 81.86, "AMD": 81.36, "ARM": 80.90} + COVERAGE_DICT = {"Intel": 81.89, "AMD": 81.37, "ARM": 81.05} PROC_MODEL = proc.proc_type() @@ -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}%" + ) 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()) 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/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 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_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. 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 + ) 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..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 @@ -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 } } } @@ -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 bea2dc5a3a5..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 @@ -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 } } } @@ -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 } } } 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 } }, 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..9b30109d28d 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. @@ -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"