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"