/cloud-hypervisor/docs/ |
H A D | hotplug.md | 8 or by using this kernel patch (available in 5.5-rc1 and later): https://git.kernel.org/pub/scm/linu… 12 Extra vCPUs can be added and removed from a running `cloud-hypervisor` instance. This is controlled… 21 $ sudo setcap cap_net_admin+ep ./cloud-hypervisor/target/release/cloud-hypervisor 22 $ ./cloud-hypervisor/target/release/cloud-hypervisor \ 23 --kernel custom-vmlinux.bin \ 24 --cmdline "console=ttyS0 console=hvc0 root=/dev/vda1 rw" \ 25 --disk path=focal-server-cloudimg-amd64.raw \ 26 --cpus boot=4,max=8 \ 27 --memory size=1024M \ 28 --net "tap=,mac=,ip=,mask=" \ [all …]
|
H A D | api.md | 1 - [Cloud Hypervisor API](#cloud-hypervisor-api) 2 - [External API](#external-api) 3 - [REST API](#rest-api) 4 - [REST API Location and availability](#rest-api-location-and-availability) 5 - [REST API Endpoints](#rest-api-endpoints) 6 - [Virtual Machine Manager (VMM) Actions](#virtual-machine-manager-vmm-actions) 7 - [Virtual Machine (VM) Actions](#virtual-machine-vm-actions) 8 - [REST API Examples](#rest-api-examples) 9 - [Create a Virtual Machine](#create-a-virtual-machine) 10 - [Boot a Virtual Machine](#boot-a-virtual-machine) [all …]
|
H A D | vhost-user-net-testing.md | 1 # How to test Vhost-user net with OpenVSwitch/DPDK 3 The purpose of this document is to illustrate how to test vhost-user-net 4 in cloud-hypervisor with OVS/DPDK as the backend. This document was 10 …date the communication between two virtual machine, connecting them to vhost-user ports respective… 12 … +----+----------+ +-------------+-----------+-------------+ +----------+----+ 14 … | |vhost-user|----------| vhost-user | ovs | vhost-user |----------|vhost-user| | 15 … | |net device| | port 1 | | port 2 | |net device| | 17 … | +----------+ +-------------+-----------+-------------+ +----------+ | 21 …+--+---------------------------------------------------------------------------------------------+… 23 …| +---------------------------------------------------------------------------------------------+… [all …]
|
H A D | windows.md | 3 Starting with the release version [0.10.0](https://github.com/cloud-hypervisor/cloud-hypervisor/rel… 7 - Host with KVM enabled 8 - [UEFI](uefi.md) capable Windows guest image with Virtio drivers integrated 22 - QEMU, version >=5.0.0 is recommended. 23 - Windows installation ISO. Obtained through MSDN, Visual Studio subscription, evaluation center, e… 24 - [VirtIO driver ISO](https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virti… 25 - Suitable firmware for Cloud Hypervisor (`CLOUDHV.fd`) and for QEMU (`OVMF.fd`) 26 - With the suggested image size of 30G, there should be enough free disk space to hold the installa… 33 IMG_FILE=windows-disk.raw 35 VIRTIO_ISO_FILE=virtio-win-0.1.185.iso [all …]
|
H A D | macvtap-bridge.md | 3 Cloud Hypervisor supports using a MACVTAP device which is derived from a MACVLAN. Full details of c… 12 sudo ip link add link "$host_net" name macvtap0 type macvtap 16 # A new character device is created for this interface 20 # Ensure that we can access this device 23 # Use --net fd=3 to point to fd 3 which the shell has opened to point to the /dev/tapN device 24 target/debug/cloud-hypervisor \ 25 --kernel ~/src/linux/vmlinux \ 26 --disk path=~/workloads/focal.raw \ 27 --cpus boot=1 --memory size=512M \ 28 --cmdline "root=/dev/vda1 console=hvc0" \ [all …]
|
H A D | vdpa.md | 3 vDPA aims at achieving bare-metal performance for devices passed into a virtual 8 the VIRTIO specification on their data-path, while the control path is vendor 11 vDPA framework, being exposed through the vhost interface as a vhost-vdpa 12 device. 14 Because DMA accesses between device and guest are going through virtqueues, 15 migration can be achieved without requiring device's driver to implement any 18 must be done for each and every device's driver. 20 The official [website](https://vdpa-dev.gitlab.io/) contains some extensive 25 `VdpaConfig` (known as `--vdpa` from the CLI perspective) contains the list of 26 parameters available for the vDPA device. [all …]
|
H A D | vfio-user.md | 1 # Cloud Hypervisor VFIO-user HOWTO 3 …-user is an *experimental* protocol for allowing devices to be implemented in another process and … 5 The protocol is documented here: https://github.com/nutanix/libvfio-user/blob/master/docs/vfio-user… 7 …*. Not all Cloud Hypervisor functionality is supported in particular: virtio-mem and iommu are not… 11 …--user-device socket=<path>` parameter is used to create a vfio-user device when creating the VM s… 13 ## Example (GPIO device) 15 There is a simple GPIO device included in the libvfio-user repository: https://github.com/nutanix/l… 17 Run the example from the libvfio-user repository: 20 rm /tmp/vfio-user.sock 21 ./build/dbg/samples/gpio-pci-idio-16 -v /tmp/vfio-user.sock & [all …]
|
H A D | vfio.md | 3 VFIO (Virtual Function I/O) is a kernel framework that exposes direct device 4 access to userspace. `cloud-hypervisor`, as many VMMs do, uses the VFIO 7 ## Direct Device Assignment with Cloud Hypervisor 9 To assign a device to a `cloud-hypervisor` guest, the device needs to be managed 10 by the VFIO kernel drivers. However, by default, a host device will be bound to 13 As a consequence, a device must be unbound from its native driver before passing 14 it to `cloud-hypervisor` for assigning it to a guest. 21 `cloud-hypervisor` only supports assigning PCI devices to its guests. `lspci` 31 Here we see that our device is on bus 1, slot 0 and function 0 (`01:00.0`). 33 Now that we have identified the device, we must unbind it from its native driver [all …]
|
H A D | iommu.md | 17 With a virtual IOMMU, the VMM stands between the guest driver and its device 32 device implementation from the host VMM to access the entire guest L1 memory. 34 addresses the device is authorized to access. 50 ## Why virtio-iommu? 52 The Cloud Hypervisor project decided to implement the brand new virtio-iommu 53 device in order to provide a virtual IOMMU to its users. The reason being the 59 ## Pre-requisites 63 As of Kernel 5.14, virtio-iommu is available for both X86-64 and Aarch64. 68 virtio-iommu device and expose it through the ACPI IORT table. This can be 69 simply achieved by attaching at least one device to the virtual IOMMU. [all …]
|
H A D | virtiofs-root.md | 3 A quick guide for using virtiofs as a cloud-hypervisor guest's rootfs (i.e. 4 with no root block device). This document is a quick getting started guide. 13 * Part of the qemu-system-common package on Ubuntu 14 * Part of the qemu-common package on Fedora 15 2. cloud-hypervisor - the newer the better, but I tested with 0.12 16 3. a rootfs - This howto uses an alpine rootfs available here: 17 …* https://dl-cdn.alpinelinux.org/alpine/v3.13/releases/x86_64/alpine-minirootfs-3.13.2-x86_64.tar.… 26 sudo tar -xf /path/to/alpine-minirootfs-3.13.1-x86_64.tar.gz 32 sudo chroot $PWD apk add openrc busybox-initscripts 33 # we are using the paravirt console in cloud-hypervisor, so enable it in init [all …]
|
/cloud-hypervisor/src/bin/ |
H A D | ch-remote.rs | 3 // SPDX-License-Identifier: Apache-2.0 46 #[error("Error parsing device syntax")] 56 #[error("Error parsing user device syntax")] 58 #[error("Error parsing vDPA device syntax")] 79 fn vmm_ping(&self) -> zbus::Result<String>; in vmm_ping() 80 fn vmm_shutdown(&self) -> zbus::Result<()>; in vmm_shutdown() 81 fn vm_add_device(&self, device_config: &str) -> zbus::Result<Optional<String>>; in vm_add_device() 82 fn vm_add_disk(&self, disk_config: &str) -> zbus::Result<Optional<String>>; in vm_add_disk() 83 fn vm_add_fs(&self, fs_config: &str) -> zbus::Result<Optional<String>>; in vm_add_fs() 84 fn vm_add_net(&self, net_config: &str) -> zbus::Result<Optional<String>>; in vm_add_net() [all …]
|
/cloud-hypervisor/vmm/src/api/openapi/ |
H A D | cloud-hypervisor.yaml | 4 description: Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. 7 url: http://www.apache.org/licenses/LICENSE-2.0.html 11 - url: http://localhost/api/v1 27 summary: Shuts the cloud-hypervisor VMM. 35 summary: Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. 57 …summary: Create the cloud-hypervisor Virtual Machine (VM) instance. The instance is not booted, on… 72 summary: Delete the cloud-hypervisor Virtual Machine (VM) instance. 136 /vm.power-button: 139 operationId: power-buttonVM 166 /vm.resize-zone: [all …]
|
/cloud-hypervisor/vmm/src/ |
H A D | config.rs | 3 // SPDX-License-Identifier: Apache-2.0 32 #[error("Error parsing --fs: tag missing")] 35 #[error("Error parsing --fs: max tag length is {VIRTIO_FS_TAG_LEN}")] 38 #[error("Error parsing --fs: socket missing")] 41 #[error("Error parsing --pmem: file missing")] 44 #[error("Error parsing --vsock: socket missing")] 47 #[error("Error parsing --vsock: cid missing")] 50 #[error("Error parsing --restore: source_url missing")] 53 #[error("Error parsing --cpus")] 56 #[error("Invalid feature in --cpus features list: {0}")] [all …]
|
H A D | device_manager.rs | 4 // Use of this source code is governed by a BSD-style license that can be 5 // found in the LICENSE-BSD-3-Clause file. 9 // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause 148 const VIRTIO_PCI_DEVICE_NAME_PREFIX: &str = "_virtio-pci"; 150 /// Errors associated with device manager 161 /// Cannot create vhost-user-net device 162 #[error("Cannot create vhost-user-net device")] 165 /// Cannot create virtio-blk device 166 #[error("Cannot create virtio-blk device")] 169 /// Cannot create virtio-net device [all …]
|
H A D | memory_manager.rs | 3 // SPDX-License-Identifier: Apache-2.0 66 const SNAPSHOT_FILENAME: &str = "memory-ranges"; 104 pub fn region(&self) -> &Arc<GuestRegionMmap> { in region() 110 pub fn hotplugged_size(&self) -> u64 { in hotplugged_size() 113 pub fn hugepages(&self) -> bool { in hugepages() 116 pub fn blocks_state(&self) -> &Arc<Mutex<BlocksState>> { in blocks_state() 119 pub fn plugged_ranges(&self) -> MemoryRangeTable { in plugged_ranges() 134 pub fn regions(&self) -> &Vec<Arc<GuestRegionMmap>> { in regions() 137 pub fn virtio_mem_zone(&self) -> &Option<VirtioMemZone> { in virtio_mem_zone() 140 pub fn virtio_mem_zone_mut(&mut self) -> Option<&mut VirtioMemZone> { in virtio_mem_zone_mut() [all …]
|
/cloud-hypervisor/vhost_user_net/src/ |
H A D | lib.rs | 7 // SPDX-License-Identifier: (Apache-2.0 AND BSD-3-Clause) 54 /// Failed to open tap device. 55 #[error("Failed to open tap device")] 68 pub const SYNTAX: &str = "vhost-user-net backend parameters \ 73 fn from(e: Error) -> Self { in from() 84 /// Create a new virtio network device with the given TAP interface. 85 fn new(tap: Tap) -> Result<Self> { in new() 131 ) -> Result<Self> { in new() 165 fn num_queues(&self) -> usize { in num_queues() 169 fn max_queue_size(&self) -> usize { in max_queue_size() [all …]
|
/cloud-hypervisor/pci/src/ |
H A D | bus.rs | 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE-BSD-3-Clause file. 5 // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause 19 use crate::device::{BarReprogrammingParams, DeviceRelocation, Error as PciDeviceError, PciDevice}; 26 /// Errors for device manager. 29 /// Could not allocate device address space for the device. 30 #[error("Could not allocate device address space for the device")] 35 /// Could not add a device to the port io bus. 36 #[error("Could not add a device to the port io bus")] 38 /// Could not add a device to the mmio bus. [all …]
|
/cloud-hypervisor/vmm/src/api/http/ |
H A D | mod.rs | 3 // SPDX-License-Identifier: Apache-2.0 75 /// The error message contained in the response is supposed to be user-facing, 78 pub fn error_response(error: HttpError, status: StatusCode) -> Response { in error_response() 85 // See <https://github.com/rust-lang/rust/issues/141673> in error_response() 112 ) -> Response { in handle_request() 149 ) -> std::result::Result<Option<Body>, HttpError> { in put_handler() 158 ) -> std::result::Result<Option<Body>, HttpError> { in get_handler() 175 /// HTTP_ROUTES contain all the cloud-hypervisor HTTP routes. 182 endpoint!("/vm.add-device"), 186 endpoint!("/vm.add-user-device"), [all …]
|
/cloud-hypervisor/tests/ |
H A D | integration.rs | 3 // SPDX-License-Identifier: Apache-2.0 7 // hence have known dead-code. This annotation silences dead-code 36 pub const FOCAL_IMAGE_NAME: &str = "focal-server-cloudimg-amd64-custom-20210609-0.raw"; 38 "jammy-server-cloudimg-amd64-custom-vfio-20241012-0.raw"; 39 pub const FOCAL_IMAGE_NAME_QCOW2: &str = "focal-server-cloudimg-amd64-custom-20210609-0.qcow2"; 41 "focal-server-cloudimg-amd64-custom-20210609-0-backing.qcow2"; 42 pub const FOCAL_IMAGE_NAME_VHD: &str = "focal-server-cloudimg-amd64-custom-20210609-0.vhd"; 43 pub const FOCAL_IMAGE_NAME_VHDX: &str = "focal-server-cloudimg-amd64-custom-20210609-0.vhdx"; 44 pub const JAMMY_IMAGE_NAME: &str = "jammy-server-cloudimg-amd64-custom-20241017-0.raw"; 45 pub const WINDOWS_IMAGE_NAME: &str = "windows-server-2022-amd64-2.raw"; [all …]
|
/cloud-hypervisor/ |
H A D | release-notes.md | 1 - [v46.0](#v460) 2 - [File-level Locking Support with `--disk`](#file-level-locking-support-with---disk) 3 - [Improved Error Reporting with VM Resizing](#improved-error-reporting-with-vm-resizing) 4 - [IPv6 Address Support with `--net`](#ipv6-address-support-with---net) 5 …- [Experimental AArch64 Support with the MSHV Hypervisor](#experimental-aarch64-support-with-the-m… 6 - [Deprecated SGX Support](#deprecated-sgx-support) 7 - [Notable Bug Fixes](#notable-bug-fixes) 8 - [Contributors](#contributors) 9 - [v45.0](#v450) 10 - [Experimental `riscv64` Architecture Support](#experimental-riscv64-architecture-support) [all …]
|
/cloud-hypervisor/vhost_user_block/src/ |
H A D | lib.rs | 9 // SPDX-License-Identifier: (Apache-2.0 AND BSD-3-Clause) 45 // Polling for 50us should be enough to cover for the device latency 78 pub const SYNTAX: &str = "vhost-user-block backend parameters \ 84 fn from(e: Error) -> Self { in from() 106 ) -> Result<Self> { in new() 121 ) -> bool { in process_queue() 213 ) -> Result<Self> { in new() 237 seg_max: 128 - 2, in new() 300 fn num_queues(&self) -> usize { in num_queues() 304 fn max_queue_size(&self) -> usize { in max_queue_size() [all …]
|
/cloud-hypervisor/fuzz/fuzz_targets/ |
H A D | mem.rs | 3 // SPDX-License-Identifier: Apache-2.0 29 // The size of the guest memory for the virtio-mem region 31 // The start address of the virtio-mem region in the guest memory 57 // Virtio-queue size in bytes 58 const QUEUE_BYTES_SIZE: usize = (USED_RING_ADDR + USED_RING_SIZE - DESC_TABLE_ADDR) as usize; 60 fuzz_target!(|bytes: &[u8]| -> Corpus { 73 // Create a virtio-mem device based on the input bytes; 91 // Add the memory region for the virtio-mem device 104 // Kick the 'queue' event before activate the virtio-mem device 115 // Wait for the events to finish and virtio-mem device worker thread to return [all …]
|
/cloud-hypervisor/arch/src/aarch64/ |
H A D | fdt.rs | 3 // SPDX-License-Identifier: Apache-2.0 6 // Use of this source code is governed by a BSD-style license that can be 7 // found in the THIRD-PARTY file. 41 // This is a value for virtio-iommu. Now only one virtio-iommu device is supported. 57 // https://www.kernel.org/doc/Documentation/devicetree/bindings/interrupt-controller/arm%2Cgic.txt 62 // From https://elixir.bootlin.com/linux/v4.9.62/source/include/dt-bindings/interrupt-controller/ir… 70 /// Trait for devices to be added to the Flattened Device Tree. 72 /// Returns the address where this device will be loaded. 73 fn addr(&self) -> u64; in addr() 74 /// Returns the associated interrupt for this device. [all …]
|
/cloud-hypervisor/virtio-devices/src/ |
H A D | lib.rs | 4 // Use of this source code is governed by a BSD-style license that can be 5 // found in the LICENSE-BSD-3-Clause file. 9 // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause 24 mod device; module 49 pub use self::device::{ 88 #[error("Failed to activate virtio device")] 94 #[error("Failed to setup vhost-user-fs daemon")] 96 #[error("Failed to setup vhost-user daemon")] 102 #[error("Failed to activate the vDPA device")] 116 #[error("Failed to update memory vhost-user")] [all …]
|
/cloud-hypervisor/virtio-devices/src/transport/ |
H A D | pci_device.rs | 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE-BSD-3-Clause file. 7 // SPDX-License-Identifier: Apache-2.0 AND BSD-3-Clause 52 Device = 4, enumerator 78 fn bytes(&self) -> &[u8] { in bytes() 82 fn id(&self) -> PciCapabilityId { in id() 90 pub fn new(cfg_type: PciCapabilityType, pci_bar: u8, offset: u32, length: u32) -> Self { in new() 114 fn bytes(&self) -> &[u8] { in bytes() 118 fn id(&self) -> PciCapabilityId { in id() 130 ) -> Self { in new() [all …]
|