blob: cc77cb91e1c5eb1b625938190821404e868a0e55 (
plain) (
tree)
|
|
#!/bin/bash
##########################################################################
# Include: Determine limitations caused by hardware version and guest os #
##########################################################################
## Functions
set_vm_hardware_limits() {
# Sanity checks
if isempty VM_OS_TYPE; then
writelog "VM_OS_TYPE is empty! This should have been parsed from the VM metadata."
EXIT_TYPE="user" EXIT_REASON="Konnte Gastbetriebsystems der gewählten virtuellen Maschine nicht ermitteln!" cleanexit 1
fi
declare -g MAXMEM="9999999"
declare -g MAXCORES="4"
declare -g SHARED_FOLDERS="TRUE"
declare -g SOUND_DEV="es1371"
# define hardware configuration depending on the guest OS used
# this needs to be fixed and is the base for the creation of new VMs
case "$VM_OS_TYPE" in
win31*|windows31*)
VM_OS_TYPE="win31"
SHARED_FOLDERS="FALSE"
SOUND_DEV="sb16"
MAXMEM="32"
MAXCORES="1"
;;
winnt*|windowsnt*)
VM_OS_TYPE="winnt"
SHARED_FOLDERS="FALSE"
SOUND_DEV="sb16"
MAXMEM="1000"
MAXCORES="2"
;;
win95*|windows95*)
VM_OS_TYPE="win95"
SHARED_FOLDERS="FALSE"
MAXMEM="96"
MAXCORES="1"
;;
win98*|windows98*)
VM_OS_TYPE="win98"
MAXMEM="256"
MAXCORES="1"
;;
winme*|windowsme*)
VM_OS_TYPE="winme"
MAXMEM="384"
MAXCORES="1"
;;
win2000|windows2000|win2000pro*)
VM_OS_TYPE="win2000pro"
MAXMEM="4000"
MAXCORES="2"
;;
win2000srv*|windows2000srv*|win2000serv*|windows2000serv*)
VM_OS_TYPE="win2000serv"
SHARED_FOLDERS="FALSE"
MAXMEM="4000"
MAXCORES="4"
;;
win2000adv*|windows2000adv*|win2000dat*|windows2000dat*)
VM_OS_TYPE="win2000advserv"
SHARED_FOLDERS="FALSE"
MAXMEM="8000"
MAXCORES="8"
;;
winnet*64|win*2003*64|windowsnet*64)
VM_OS_TYPE="winnetstandard-64"
MAXMEM="16000"
MAXCORES="8"
;;
winnet*|win*2003*|windowsnet*)
VM_OS_TYPE="winnetstandard"
MAXMEM="4000"
MAXCORES="8"
;;
winxphome*|windowsxphome*)
VM_OS_TYPE="winxphome"
MAXMEM="4000"
MAXCORES="2"
;;
winxp*64|windowsxp*64)
VM_OS_TYPE="winxppro-64"
MAXMEM="8000"
MAXCORES="8"
;;
winxp*|windowsxp*)
VM_OS_TYPE="winxppro"
MAXMEM="4000"
MAXCORES="4"
;;
winvista-64)
VM_OS_TYPE="winvista-64"
MAXMEM="16000"
MAXCORES="4"
;;
windows7-64)
VM_OS_TYPE="windows7-64"
MAXMEM="64000"
MAXCORES="8"
;;
windows8-64)
VM_OS_TYPE="windows8-64"
MAXMEM="128000"
MAXCORES="256"
;;
windows9-64)
VM_OS_TYPE="windows9-64"
MAXMEM="512000"
MAXCORES="256"
;;
winvista)
VM_OS_TYPE="winvista"
MAXMEM="8000"
MAXCORES="2"
;;
windows7)
VM_OS_TYPE="windows7"
MAXMEM="8000"
MAXCORES="4"
;;
windows8)
MAXMEM="8000"
MAXCORES="32"
;;
windows9)
MAXMEM="8000"
MAXCORES="32"
;;
win*64)
MAXMEM="32000"
MAXCORES="32"
;;
win*)
MAXMEM="8000"
MAXCORES="32"
;;
dos|msdos*|ms-dos*)
VM_OS_TYPE="dos"
SHARED_FOLDERS="FALSE"
MAXMEM="128"
MAXCORES="1"
;;
macos*64)
VM_OS_TYPE="freebsd-64"
MAXMEM="4000"
MAXCORES="8"
;;
macos*)
VM_OS_TYPE="freebsd"
MAXMEM="4000"
MAXCORES="4"
;;
beos*)
VM_OS_TYPE="other"
SHARED_FOLDERS="FALSE"
MAXCORES="16"
;;
# Unknown guestOS setting in .xml - this encompasses linux too,
# as there is a multitude of different distributions. Perhaps further
# action will be needed if this leads to problems with exotic OSs.
*64)
MAXMEM="123456"
MAXCORES="64"
;;
*)
VM_OS_TYPE="other"
# SHARED_FOLDERS="FALSE"
MAXMEM="8000"
MAXCORES="1"
;;
esac
declare -g CPU_CORES="${HW_THREADS:-1}"
declare -rg HOST_CORE_COUNT="$CPU_CORES"
if (( CPU_CORES > MAXCORES )); then
writelog "Limiting vCPU count from $CPU_CORES to $MAXCORES because of guest OS"
CPU_CORES="$MAXCORES"
fi
# It currently makes no sense to set the virtual number of cores
# to a different value than the virtual number of cores per virtual CPU.
declare -rg VM_CORES_PER_SOCKET="$CPU_CORES"
if is_on "$SHARED_FOLDERS" && [ -n "$SHARE_REMAP_MODE" ] && (( SHARE_REMAP_MODE > 1 )); then
declare -rg HGFS_DISABLED="FALSE"
else
declare -rg HGFS_DISABLED="TRUE"
fi
[ "${VM_MEM}" -ge "${MAXMEM}" ] && VM_MEM="${MAXMEM}"
[ "${VM_HW_VERSION}" -lt "7" -a "${VM_MEM}" -gt "3500" ] && VM_MEM="3500"
return 0
}
## MAIN ##
call_post_source set_vm_hardware_limits
|