aboutsummaryrefslogtreecommitdiff
path: root/test-machine-m1
blob: 9992d5f6801e59be99a6e133e27db8f399dcf5c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#! /usr/bin/env bash

# Test a virtual machine with KVM on Apple M1. Notes:
#
# - Need QEMU 7 or later.
# - Expect to find QEMU_EFI.fd next to disk.img.
# - Replaced -usb (EHCI) with -device qemu-xhci (XHCI).
# - Added virtio-gpu-pci (otherwise no graphical output), added usb-kbd.
# - Must run on either P or E cores (https://gitlab.com/qemu-project/qemu/-/issues/1002)
# - On M1 0-3 are E, 4-7 are P (lscpu, lscpu -e)
#
# -n <nic>
#   Network adapter to use, for example, virtio-net-pci (default), e1000,
#   or vmxnet3.
#
# -t <tap>
#   Existing tap interface to use instead of creating a new one (as tap9).
#
usage="usage: $0 [-n <nic>] <machine-dir> [<qemu-option>...]"

owd="$(pwd)"
trap "{ cd '$owd'; exit 1; }" ERR
set -o errtrace # Trap in functions.

function info () { echo "$*" 1>&2; }
function error () { info "$*"; exit 1; }

br=br0
mac="de:ad:be:ef:b8:da"

arch="$(uname -m)"
kvm=(taskset -c 4-7 "qemu-system-$arch" -enable-kvm)

nic=virtio-net-pci
etap=

while [ "$#" -gt 0 ]; do
  case "$1" in
    -n)
      shift
      nic="$1"
      shift
      ;;
    -t)
      shift
      etap="$1"
      shift
      ;;
    *)
      break
      ;;
  esac
done


dir="${1%/}"
shift

if [ -z "$dir" ]; then
  error "missing machine directory"
fi

if [ -z "$etap" ]; then
  tap=tap9
  sudo ip tuntap delete "$tap" mode tap || true
  sudo ip tuntap add "$tap" mode tap user "$(whoami)"
  sudo ip link set "$tap" up
  #sleep 0.5s
  sudo ip link set "$tap" master "$br"
else
  tap="$etap"
fi

"${kvm[@]}" \
  -M virt \
  -bios "$dir/QEMU_EFI.fd" \
  \
  -m 4G \
  -cpu host -smp "4,sockets=1,cores=4,threads=1" \
  \
  -netdev "tap,id=net0,ifname=$tap,script=no" \
  -device "$nic,netdev=net0,mac=$mac" \
  \
  -drive  "if=none,id=disk0,file=$dir/disk.img,format=raw" \
  -device "virtio-blk-pci,scsi=off,drive=disk0" \
  \
  -device qemu-xhci \
  -device usb-kbd \
  -device usb-tablet \
  \
  -device virtio-gpu-pci \
  -display default,show-cursor=on \
  \
  -chardev stdio,id=qmp \
  -mon chardev=qmp,mode=control,pretty=on \
  \
  -boot c "$@"

#  -chardev socket,id=mon,path=/tmp/test-machine-sock,server,nowait \
#  -mon chardev=mon,mode=readline \

# { "execute": "qmp_capabilities" }

#  -device "virtio-blk-pci,scsi=off,drive=disk0"
#
#  -device "virtio-scsi-pci,id=scsi" \
#  -device "scsi-hd,drive=disk0" \

#  -vnc "localhost:1" \
# -monitor "telnet::5555,server,nowait"

# -vnc "localhost:1" - 5901
# vncviewer localhost:5901

#-vnc "unix:$dir/vnc" \
#-monitor "unix:$dir/monitor,server,nowait"

if [ -z "$etap" ]; then
  sudo ip tuntap delete "$tap" mode tap
fi

exit 0

sudo "${kvm[@]}" \
  -m 8G \
  -cpu host -smp "sockets=1,cores=4,threads=2" \
  -device "$nic,netdev=net0,mac=$mac" \
  -netdev "tap,id=net0,script=./qemu-ifup" \
  -device "virtio-scsi-pci,id=scsi" \
  -device "scsi-hd,drive=disk1" \
  -drive  "if=none,id=disk1,file=$dir/disk.img,format=raw" \
  -boot c

#  -kernel buildos-image -initrd buildos-initrd \
#  -append "buildos.smtp_relay=build2.org buildos.admin_email=admin@build2.org"

#/usr/bin/kvm-spice -name windows10-vc15rc2 -S -machine pc-i440fx-wily,accel=kvm,usb=off -cpu Broadwell,hv_time,hv_relaxed,hv_vapic,hv_spinlocks=0x1fff -m 4096 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid 16237884-61fb-4000-bdca-5c86bb83fe1a -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-windows10-vc15rc2/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/home/vm/windows10-vc15rc2.img,format=raw,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=26,id=hostnet0,vhost=on,vhostfd=28 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:8f:c4:d5,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:0 -device VGA,id=video0,vgamem_mb=16,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on

#/usr/bin/kvm-spice -name debian8 -S -machine pc-i440fx-xenial,accel=kvm,usb=off -cpu Broadwell -m 4096 -realtime mlock=off -smp 2,sockets=2,cores=1,threads=1 -uuid eb483372-8ffe-4c60-8ad9-9c89cb74e314 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-debian8/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/btrfs/boris/machines/linux_debian_8-gcc_4.9-1.0/disk.img,format=raw,if=none,id=drive-virtio-disk0 -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=27,id=hostnet0,vhost=on,vhostfd=29 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:52:2e:fb,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -device usb-tablet,id=input0 -vnc 127.0.0.1:1 -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on