2024-04-02 07:43:54 -04:00
|
|
|
// QEMU definitions. These define the base QEMU command lines,
|
|
|
|
// which are standardized across all crusttest slots.
|
|
|
|
// (This file has been bastardized for socket2)
|
|
|
|
|
2024-07-24 04:22:31 -04:00
|
|
|
import { QemuVmDefinition } from '@computernewb/superqemu';
|
2024-04-02 07:43:54 -04:00
|
|
|
|
|
|
|
const kQemuPath = '/srv/collabvm/qemu/bin/qemu-system-x86_64';
|
|
|
|
|
|
|
|
// the aio model qemu will use. if possible, leave this at 'io_uring'.
|
|
|
|
const kQemuAio = 'io_uring';
|
|
|
|
|
|
|
|
/// Creates a base definition for a VM with PC chipset.
|
|
|
|
export function Slot_PCDef(
|
|
|
|
// RAM
|
|
|
|
ramSize: string,
|
|
|
|
|
|
|
|
// Network
|
|
|
|
netdevOption: string = '-netdev user,id=vm.wan',
|
|
|
|
netAdapterModel: string = 'rtl8139',
|
|
|
|
netMac: string = 'c7:4e:c0:5f:2c:7c',
|
|
|
|
|
|
|
|
// HDA
|
|
|
|
hdaIsSsd: boolean = true,
|
|
|
|
hdImagePath: string,
|
|
|
|
hdImageFormat: string
|
|
|
|
): QemuVmDefinition {
|
|
|
|
let qCommand = [kQemuPath];
|
|
|
|
|
|
|
|
let pushOption = (opt: string) => {
|
|
|
|
qCommand.push(opt.substring(0, opt.indexOf(' ')));
|
|
|
|
qCommand.push(opt.substring(opt.indexOf(' ') + 1));
|
|
|
|
};
|
|
|
|
|
|
|
|
// boilerplate/chipset
|
|
|
|
qCommand.push('-nodefaults');
|
|
|
|
pushOption('-machine pc-i440fx-2.10,accel=kvm,kernel_irqchip=on,hpet=off,acpi=on,usb=on');
|
|
|
|
pushOption('-rtc base=localtime,clock=vm');
|
|
|
|
|
|
|
|
// CPU/RAM
|
|
|
|
pushOption(`-cpu pentium3`);
|
|
|
|
pushOption(`-m ${ramSize}`); // unlike LVM we don't really want to prealloc per se..
|
|
|
|
|
|
|
|
pushOption(`${netdevOption}`);
|
|
|
|
pushOption(`-device ${netAdapterModel},id=vm.netadp,netdev=vm.wan,mac=${netMac}`);
|
|
|
|
|
2024-04-06 23:46:37 -04:00
|
|
|
pushOption(`-drive if=none,file=${hdImagePath},cache=writeback,discard=unmap,format=${hdImageFormat},aio=${kQemuAio},id=vm.hda_drive,bps=65000000,bps_max=65000000,iops=1500,iops_max=2000`);
|
2024-04-02 07:43:54 -04:00
|
|
|
|
|
|
|
// prettier-ignore
|
|
|
|
if (hdaIsSsd)
|
|
|
|
pushOption(`-device ide-hd,id=vm.hda,rotation_rate=1,drive=vm.hda_drive`);
|
|
|
|
else
|
|
|
|
pushOption(`-device ide-hd,id=vm.hda,drive=vm.hda_drive`);
|
|
|
|
|
|
|
|
// CD drive
|
|
|
|
pushOption(`-drive if=none,media=cdrom,aio=${kQemuAio},id=vm.cd`);
|
|
|
|
pushOption(`-device ide-cd,drive=vm.cd,id=vm.cd_drive`);
|
|
|
|
|
|
|
|
pushOption('-audio driver=none,model=ac97');
|
|
|
|
|
|
|
|
// VGA + usb tablet
|
|
|
|
pushOption('-device VGA,id=vm.vga');
|
|
|
|
pushOption('-device usb-tablet');
|
|
|
|
|
|
|
|
return {
|
2024-04-06 23:46:37 -04:00
|
|
|
id: 'socketvm1',
|
2024-07-24 04:22:31 -04:00
|
|
|
command: qCommand.join(' '),
|
|
|
|
snapshot: true
|
2024-04-02 07:43:54 -04:00
|
|
|
};
|
|
|
|
}
|