Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- w
- # echo 0000:0c:00.0 > /sys/bus/pci/devices/0000:0c:00.0/driver/unbind
- # echo 8086 4232 > /sys/bus/pci/drivers/vfio-pci/new_id
- passthru_mode=1
- ram_size=4608
- devices="00:1b.0 01:00.0 01:00.1"
- unbind()
- {
- for dev in $@; do
- ## get device driver to rebind it after vm is down
- if [ $1 == '-d' ]; then
- drv="$(lspci -s ${dev} -k | awk '/Kernel driver in use:/ {print($5)}')"
- if [ ${drv} ]; then
- drv_dev="${drv}=${dev} ${drv_dev}"
- fi
- fi
- if [ -e /sys/bus/pci/devices/0000:${dev}/driver/unbind ]; then
- echo 0000:${dev} > /sys/bus/pci/devices/0000:${dev}/driver/unbind || exit 1
- echo "${dev} was unbinded"
- fi
- done
- }
- rebind()
- {
- for i in ${drv_dev}; do
- drv=$(echo ${i} | awk '{ split($1,a,"="); print(a[1]);}')
- dev=$(echo ${i} | awk '{ split($1,a,"="); print(a[2]);}')
- drv_path=$(find /sys/module -name pci:${drv})
- if [[ ( ${dev} ) && ( -e ${drv_path} ) ]]; then
- echo 0000:${dev} > ${drv_path}/bind || echo "${dev} is already binded or device error"
- echo "${dev} was binded to ${drv}"
- fi
- unset drv_dev
- done
- }
- bind_vfio() {
- for dev in $@; do
- echo $(lspci -n | grep ${dev} | awk '{ split($3,a,":"); print(a[1],a[2]);}') > /sys/bus/pci/drivers/vfio-pci/new_id || exit 1
- echo "${dev} was binded to vfio-pci"
- done
- }
- ## DO THE MAGIC
- if [ $passthru_mode == 1 ]; then
- unbind -d $devices
- bind_vfio $devices
- passthru_devices="\
- -vga none -nographic \
- -usb -usbdevice host:046d:c526 \
- -device ioh3420,bus=pcie.0,addr=1a.0,multifunction=on,port=1,chassis=1,id=root.1 \
- -device vfio-pci,host=00:1b.0,bus=pcie.0,addr=1b.0 \
- -device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on,romfile=./bios/GF106_modded_max.rom \
- -device vfio-pci,host=01:00.1,bus=root.1,addr=00.1"
- fi
- ## clear diskcache
- ./scripts/clearcache
- ## reserve hugepages
- current_hugepages=$(cat /proc/sys/vm/nr_hugepages)
- echo $(( ${ram_size} / 2 + 8 + $current_hugepages )) > /proc/sys/vm/nr_hugepages
- ## assign cores 2,3 and ht threads 4,5
- taskset 0x0000003c \
- nice -n -5 qemu-system-x86_64 \
- -enable-kvm -rtc base=localtime,clock=host \
- -bios /usr/share/qemu/bios.bin \
- -M q35 -cpu host -smp 4,sockets=1,cores=2,threads=2 \
- -m $ram_size -mem-path /dev/hugepages \
- -monitor stdio \
- -boot dc \
- -netdev bridge,br=br,id=bridge -device virtio-net-pci,netdev=bridge,id=nic1 \
- -drive file='./images/windows.img',if=none,id=disk_windows \
- -device virtio-blk-pci,scsi=off,drive=disk_windows,id=disk1 \
- -drive file='./images/gamesdata.img.qcow2',if=none,id=disk_games \
- -device virtio-blk-pci,scsi=off,drive=disk_games,id=disk4 \
- $passthru_devices
- if [ $passthru_mode == 1 ]; then
- unbind $devices
- rebind
- fi
- echo 4 > /proc/sys/vm/nr_hugepages
- #current_hugepages=$(cat /proc/sys/vm/nr_hugepages)
- #echo $(( ${current_hugepages} - ${hugepages} - 4 )) > /proc/sys/vm/nr_hugepages
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement