From: Snapshot-Content-Location: https://zanechua.com/blog/macos-windows-proxmox/ Subject: MacOS and Windows running on Proxmox | Zane Chua Date: Thu, 10 Aug 2023 20:55:01 -0000 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----MultipartBoundary--g5Tu5vQMC9ZfFT5ZhsmxWNHUhrqG9QJzlCJlUHDKRF----" ------MultipartBoundary--g5Tu5vQMC9ZfFT5ZhsmxWNHUhrqG9QJzlCJlUHDKRF---- Content-Type: text/html Content-ID: Content-Transfer-Encoding: quoted-printable Content-Location: https://zanechua.com/blog/macos-windows-proxmox/ <= meta name=3D"og:type" content=3D"website" data-gatsby-head=3D"true">MacOS and Windows running on Proxmo= x | Zane Chua

MacOS and Windows running on= Proxmox

31 Augu= st, 2020 =E2=80=A2 9 min read

3D""
3D"MacOS

I've been working on this tiny tur= ned big sized project on running both MacOS and Windows on a single worksta= tion at the same time. There were a lot of challenges with this build from = various usability issues to issues that I faced with my personal set-up.

Objectives

(that I figured out along the way)

  • Single Audio Input/Output for both OSes
  • Single Video Input for both OSes
  • Convenient access to USB ports for both OSes
  • Dedicated GPUs for each OS

Host Machine

The host OS uses Proxmox 6.2, and the setup is pretty straight forward. = Download the iso off the proxmox website, load it up to a usb drive via Ruf= us and install it. Once you have installed it, you'll be able to connect to= proxmox via the web interface. The changes that I made to proxmox was to r= emove the annoying no subscription message and to enable the public repo fo= r updates.

My host machine has the following hardware specifications:

  • CSE: Corsair Air 540
  • MOB: Supermicro X9DRi-F
  • CPU: 2 x Intel E5-2670 v1 with Noctua NH-U9DX-i4
  • MEM: 16 x 8.0 GB Samsung PC3L-12800R DDR3-1600 ECC Memory
  • PSU: Thermaltake Toughpower iRGB PLUS 1250W Titanium
  • SSD: Intel 520 120GB SSD
  • SSD: Intel S3500 800GB SSD
  • SSD: Intel Optane 900P 480GB
  • USB: IOI Technology U3X4-PCIE4XE111 (4 x FL 1100 USB Controller)
  • GPU: Sapphire AMD RX5700
  • GPU: Zotac Nvidia GTX 1060 6GB
  • NET: Mellanox ConnectX-3 2 x 40Gb QSFP+ MCX354A-QCBT (Flashed to FCBT)<= /li>

Here's the list of accessories:

  • MON: 2 x Dell U2715H + North Bayou F32 Dual Monitor Mount
  • KEB: Tecware Phantom Elite + Gateron Greens
  • MSE: Logitech MX Master 3
  • FAN: 3 x Noctua NF-F12 industrialPPC-3000 PWM
  • FAN: 3 x Noctua NF-A14 industrialPPC-3000 PWM
  • VID: GoPro Hero 5 Black
  • VID: 1 IN / 2 OUT HDMI Splitter
  • VID: 2 x USB HDMI Capture (1080@30)
  • AUD: 3 x Behringer UMC202HD
  • AUD: Rolls MX51s Mini-Mix 2
  • CBL: 1/4 TRS Jack to 1/4 TRS Jack
  • CBL: 1/4 TRS Jack to 2 x TS 1/4 Jack
  • CBL: 2 x (2 x TS 1/4 Jack to 2 x RCA Male)
  • CBL: 2 x RCA Male to 3.5mm Jack
  • CBL: XLR Female to 2 x XLR Male Splitter
  • MIC: Audio-Technica AT2035
  • SPK: Q Acoustics 3020i
  • AMP: S.M.S.L AD18
  • ACC: 2 x Ulanzi MT-11 Octopus Tripod
  • ACC: EyeGrab GoPro Hero 5 Case
  • ACC: 6" LED USB Ring Light
  • ACC: Orico A3H7 7-Port USB 3.0 Hub
  • ACC: 2 x Orico MH4PU 2-Port USB 3.0 + SD Card Reader Hub

The hardware above was basically requisitioned along the way as I found = more issues to solve and this is probably the exhaustive list.

USB

The most annoying part of this entire build was getting USB 3.0 support.= The board I am using does not come with USB 3.0 and because I wanted USB 3= .0 support, I had to find an add-in card that worked properly with device r= esets + MacOS. In the end, I could only manage to achieve one of them which= was MacOS support. The current card uses a Fresco Logic 1100 Controller an= d has native MacOS Support. There was another card which I actually preferr= ed due to it having 2 x USB 3.0 headers and would allow me to connect the p= orts on the front of my case. That card however uses a Renesas uPD720202 an= d doesn't work well with MacOS. Streaming (Audio + Video) data over the Ren= esas chipset would not work therfore I had to use the FL1100 card. You can = read more about the various cards I tested here

The U3X4-PCIE4XE111 gives us four FL1100 controllers that can be passed-= through to the VMs. I passthrough two FL1100 controllers coupled with one o= nboard Intel controller that go to MacOS and Windows respectively.

One USB 3.0 port is used by the Dell U2715H's USB hub that has the audio= interface and other devices connected to it, while the other is for the Or= ico MH4PU that's mounted on the bottom of my monitors that allow me to easi= ly connect usb devices to either OS. The Left being MacOS and the right bei= ng Windows.

There are some issues mounting the Orico MHP4U to the bottom of the moni= tor as this monitor isn't flat at the back but, I'll probably just use some= 3M VHB tape to solve this. The hub doesn't come in a black variant and the= refore I just spray painted mine.

Audio

3D"Audio

The audio setup was basically modelled after the post of audio hardware for vfio setups = by the guys over at The Passthrough Post. The only difference here was that= I decided to get the more expensive Behringer UMC202HDs for both VMs as th= at gave me the benefits of stacking the audio interfaces and have more inpu= ts/outputs. The first interface is used as an input for the microphone whic= h is an Audio-Technica AT2035. I bought an XLR Splitter because the way thi= s interface works is that it splits the first input to the left channel and= , the second input to the right channel when using direct monitor. I wanted= the audio on both channels and that's where the splitter comes in.

The Rolls MX51s mixer takes the output from the second and third interfa= ce that is connected to both the MacOS and Windows VMs respectively and out= puts to the S.M.S.L AD18 via AUX which then outputs the audio from both OSe= s at the same time.

3D"Microphone

The microphone set-up involves mounting the microphone to the Ulanzi MT-= 11 tripod and hanging it upside down from my monitor mount, so it's basical= ly hanging at the bottom. Placed a simple fur cover that takes care of wind= (from my fan) and a pop filter hovering on top of it.

Webcam/Video<= /path>

3D"Camera

The Webcam/Video setup was inspired by the audio setup and when coupled = with the use of these cheap usb hdmi capture devices that have been popping up with "raving" revie= ws, enables us to accomplish this pretty cheaply sans the GoPro. A USB hdmi= capture dongle is each connected to the MacOS and Windows VMs.

3D"Camera

The GoPro is configured to output the live view through HDMI and is powe= red via the Orico 7-Port USB Hub. This hub has no other use than to provide= power for the components. The output of the GoPro goes to the HDMI splitte= r and, the splitter is connected to each of the USB hdmi capture dongles. T= his allows us to have real time video input for both MacOS and Windows.

3D"Camera

The GoPro itself is mounted on a Ulanzi MT-11 tripod with the Eyegear Ca= se. I like this case particularly because it gives you the sliding door to = ensure your GoPro stays in and allows you to open the side door for the hdm= i and power cables. It has two hotshoe mounts which I used to mount a 6" LE= D USB Light after noticing my video input was a little dark. This case also= gives you the ability to screw on any 55mm filter but I haven't had a good= experience trying filters that "zoom" in so that the view isn't so wide. I= 've just resorted to using OBS to do it.

There is a small issue that I faced with the GoPro output automatically = changing the configuration by itself. I think this has something to do with= me not placing a battery inside the GoPro and trying to use the 2.7k resol= ution which results in heat and not enough power. I've changed it back to 1= 080p@30 and hopefully this will resolve that issue altogether.

Proxmox<= /h3>

For the host, I have the following four files in /etc/modprobe.d/ that will prepare the system for the MacOS a= nd Windows VMs.

  • kvm.conf
  • kvm-intel.conf
  • pve-blacklist.conf
  • vfio-pci.conf

Ignoring certain errors for a clean dmesg<= /code> output

kvm.conf
Copy
options kvm i=
gnore_msrs=3D1 report_igno=
red_msrs=3D0

This was made to allow for nested virtualization support, e.g. support f= or Hyper-V/Docker

kvm-intel.conf
Copy
# Nested VM support (not u=
sed by macOS)
options kvm-intel nested<=
span class=3D"token operator">=3DY=

Blacklisting the Nvidia and AMD modules resolve issues when the host has= issues releasing the cards and passing them through to the VMs

pve-blacklist.con= f
Copy
# This file contains a lis=
t of modules which are not supported by Proxmox VE
# nvidiafb see bugreport https://bugzilla.pro=
xmox.com/show_bug.cgi?id=3D701
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist snd_hda_codec_hdmi
blacklist snd_hda_intel
blacklist snd_hda_codec
blacklist snd_hda_core
blacklist radeon
blacklist amdgpu=

Targeting PCI device IDs for binding

vfio-pci.conf
Copy
options vfio-pci ids=3D1002:67df,1002:aaf0,1002:731f,1002:ab38,10de:1c03,
10de:10f1,8086:2700,8086:1d26,8086:1d2d,8086:1d6b disable_vga=3D1

MacOS VM<= /a>

3D"MacOS"

MacOS installation is pretty straight forward as long as you have access= to a Mac. I followed Nick Sherlock's guide which you can find here. The installation process for MacOS is mainly the same as the guide, the= y should only differ in the modprobe configuration for the host. As for Mac= OS itself, the only thing I added was agdpmod= =3Dpikera to the boot options of OpenCore as I'm using an RX 5700.

My MacOS VM has the following specifications:

  • CPU: 16 Cores / 2 Sockets
  • MEM: 48.0 GB Memory
  • SSD: Intel S3500 800GB SSD
  • USB: 2 x FL 1100 USB Card
  • USB: Onboard Intel USB Controller
  • GPU: Sapphire AMD RX5700
  • NET: VMXNet3 Network Device
  • AUD: Behringer UMC202HD
  • VID: USB HDMI Capture (1080@30)

There are still a list of issues with MacOS, some have been resolved but= there are some caveats that you just have to live with.

Here's a list of issues that I faced with MacOS:

  • Audio Device defaults keep changing (Resolved with Audio Profile Manager where you ca= n pin the inputs/outputs)
  • Barrier (Software KVM) doesn't work sometimes, a reboot usually fixes i= t.
  • You have to login to Windows before MacOS otherwise you won't be able t= o use the Keyboard/Mouse
  • Audio stuttering happens intermittenly. Noticeable when there's a spike= in CPU usage
  • SMB shares take forever to load and potentially freeze up
  • Have to be wary about MacOS Updates
  • Reboots require you to reboot the entire host machine

Windows VM

3D"Windows"

Installation for Windows is pretty standard, upload the ISO to proxmox a= nd just finish the installation to the NVMe drive. I had some issues with s= etting the NVMe drive as the default boot order, but you can use the follow= ing workaround that I have detailed here.

My Windows VM has the following specifications:

  • CPU: 24 Cores / 2 Sockets
  • MEM: 48.0 GB Memory
  • SSD: Intel Optane 900P 480GB
  • USB: 2 x FL 1100 USB Card
  • USB: Onboard Intel USB Controller
  • GPU: Zotac Nvidia GTX 1060 6GB
  • NET: VirtIO Network Device
  • AUD: Behringer UMC202HD
  • VID: USB HDMI Capture (1080@30)
  • OPT: Intel C602 Sata SCU

As for Windows, there really isn't much to say. You'll have to install t= he VirtIO drivers since we want to get full network speed and as much perfo= rmance as possible. The only issue I have noticed so far is when I first in= stalled the FL 1100 card, my audio interface refused to work.

Pro Tip: Don't install the Fresco Logic drivers, use the one that comes = with Windows.

Usage

Input

Since we have both virtual machines up and running, we want to use a sin= gle keyboard + mouse. I've tried Synergy 2, Synergy 3 as I have licenses fo= r those but I ended up with the OpenSource variant Barrier. You will have to initially plug a keyboard and mouse to t= he MacOS VM and configure barrier, but once that is done you should be able= to share the keyboard and mouse. I have the keyboard and mouse plugged int= o Windows and shared to MacOS.

Accessible Ports

3D"Front

I think for most of us, we have the front IO on our case for easy usb ac= cess and what not. In this instance, that's where the Orico MHP4U that I me= ntioned above comes in. This allows you to plug devices into either OS at a= ny point of time and the fact that they are sitting below the screen of the= OS should be an easy indicator of which one to plug to in the event you ma= nage to forget which OS is which.

Conclusion

3D"Full

All in all, this was a fun side project to work on and make usable. I am= sure I'll still be making small improvements here and there but the gist o= f the information is here. I was wrecking my brains out at how to get all o= f this working at the start but this should serve as a good summary/build l= og for my future self when I revisit this topic again. If you've made it th= is far, thanks for reading! If you've any questions, ping me on twitter @zanejchua as I still haven't gotten comments set-up= on my site.

References

Comments

= Fellovv

19 February, 2021 at 9:02 PM

<= div class=3D"pb-2">

Well done! Looking forw= ard to updates. As I only have one GPU, a 3080, I will likely not run simul= taneous user-video VMs. I have read that Proxnox has issues with True-FreeN= AS, so I am considering ESXi with the VMUG discount. Although I much prefer= FOSS if not too time-effort expensive.


=

Leave a comment