Virtual Machine Setup
This page describes how to build QEMU, prepare VM images, and manage VM
lifecycle with ramryder_cli.
Build QEMU
If you already cloned the RamRyder repository without --recurse-submodules, run following command to get QEMU submodule:
git submodule update --init --recursive
From the RamRyder directory:
cd qemu
mkdir -p build
cd build
../configure --enable-kvm --target-list=x86_64-softmmu --enable-slirp
make -j$(nproc)
cd ../..
Get VM Image
We provide a clean Ubuntu VM image. You can use this image (download link) or use your own image.
tar -xf nvcloud-image-clean.tar.xz
Then refer to readme.txt inside the package for login information.
Manage VM
All VM operations are managed by admin/ramryder_cli. You can use
ramryder_cli to query resource allocations, allocate resources, and create
VMs.
cd /path/to/ramryder
./admin/ramryder_cli --help
1) Query resource status
Memory pool:
./admin/ramryder_cli query --type mempool
VM allocation status:
./admin/ramryder_cli query --type vm
2) Create VM
Create a VM with local memory (DIMM):
./admin/ramryder_cli create-vm \
--cpu-set 0-9,20-29 \
--memory 150G \
--channels 6
Create a VM with DIMM + CXL memory:
./admin/ramryder_cli create-vm \
--cpu-set 0-9,20-29 \
--memory 100G \
--channels 4 \
--cxl-memory 50G \
--cxl-channels 2
Note:
--channels: number of local-memory channels (DIMM, tier 0) assigned to the VM. Use this together with--memorywhen you want to attach local memory.--cxl-channels: number of CXL-memory channels (tier 1) assigned to the VM. Use this together with--cxl-memory.--memoryis optional forattach-mem(default0M), so CXL-only attach is supported.- More channels can provide higher bandwidth potential, but also consume more channel resources in the pool.
--memory/--channelsare for local memory (DIMM, tier 0).--cxl-memory/--cxl-channelsare for CXL memory (tier 1).- memory size supports
MorGunits (for example1024M,150G). - default SSH forwarding port is
2806 + VMID. - if that port is occupied, CLI chooses another available port.
- vCPU pinning is enabled by default; disable with
--disable-vcpu-pin.
Dry-run example:
--dry-run is used to validate a VM plan before actual launch. It runs through
resource-allocation and command-construction logic so you can verify settings
and resource availability, then exits without keeping a running VM.
./admin/ramryder_cli create-vm \
--cpu-set 0-9,20-29 \
--memory 150G \
--channels 6 \
--dry-run
3) Dynamically add memory to a running VM
Add DIMM memory from new channels:
./admin/ramryder_cli attach-mem \
--vmid 0 \
--memory 20G \
--channels 2
Add DIMM memory only from channels already allocated to this VM (i.g., no extra channels):
./admin/ramryder_cli attach-mem \
--vmid 0 \
--memory 10G \
--channels 0
Add CXL memory from new channels:
./admin/ramryder_cli attach-mem \
--vmid 0 \
--cxl-memory 20G \
--cxl-channels 2
attach-mem prints allocated memid values. Keep them for detach operations.
4) Dynamically remove memory
./admin/ramryder_cli detach-mem --vmid 0 --memid 3
5) Destroy VM
./admin/ramryder_cli destroy-vm --vmid 0
This command kills the VM process and releases all resource-manager allocations.
Update Guest Kernel
After VM is ready, log into VM and then follow Kernel Installation to update guest kernel.