by Krichevsky, Nicholas Jacob
Hey all -
By an interesting turn of events, my fellow interns and I were given the opportunity to build a computer to theoretically drive 192 monitors. Yes, really. We're running into a bit of a brick wall, so I figured I'd reach out and see if anyone had any crazy ideas that just might work.
This project started because of a certain obsession of our CEO to drive as many monitors off one PC as possible. We put together a build using 8x Radeon 7870s with 6x Mini DisplayPort outputs<https://www.newegg.com/Product/Product.aspx?Item=9SIA0AJ3BU1115&cm_re=Visio…> (the price spiked after we bought these for some reason) with 2x Intel Xeon E5-2630 V4 <https://www.newegg.com/Product/Product.aspx?Item=N82E16819117630> , all tied together in a SuperMicro 4028GR-TR2<https://www.supermicro.com/products/system/4u/4028/SYS-4028GR-TR2.cfm>. Limiting the cards to PCIE 8x, we should be able to drive all 8 with 16 PCIE lanes to spare. Because the Mini DisplayPorts follow the DisplayPort 2.1 spec, we were hoping to use MST with 48 of these MST hubs from Monoprice<https://www.monoprice.com/product?c_id=104&cp_id=10428&cs_id=1042802&p_id=2…> (which we actually got on sale!). This would allow us to drive four displays @ 1080p off one Mini DisplayPort, allowing us to drive 24 monitors off one card, across 8 cards, totaling 192 monitors. With this all in mind, and the knowledge that we may have to write some funky Xorg configs, we pulled the trigger on all of it, and would attempt to drive as many monitors as we had on hand in the office.
We decided to load Fedora on this machine, which should be able to drive MST with the included amdgpu driver, thanks to patches that were added to kernel 4.15, and some DC display code settings that were enabled in kernel 4.17. With all of this, we were able to successfully drive ... two displays off each MST hub, instead of the expected four. Not as fruitful as we may have hoped, but hey, 96 monitors would still be awesome. Out of sheer curiosity, we threw Windows on another SSD, and discovered that Windows could drive four displays off each MST hub, but we were getting hard limited to six monitors per card, no matter what we tried. We hypothesized that this might be due to the proprietary AMD driver setting an arbitrary limit, and thought we might be able to still pull off the 12 monitors per card in Linux. A couple of small scripts later, we were up and running with six monitors on one card. Upon adding the seventh and re-running our script, we were greeted with the following.
[monitormadness@monitor-madness ~]$ python3 set-monitors.py
Executing `xrandr -d :0 --output DisplayPort-3-1-1 --mode 1920x1080 --output DisplayPort-0-1-1 --mode 1920x1080 --output DisplayPort-1-1-1 --mode 1920x1080 --output DisplayPort-0-1-2 --mode 1920x1080 --output DisplayPort-3-1-1 --mode 1920x1080 --output DisplayPort-1-1-2 --mode 1920x1080 --output DisplayPort-4-1-1 --mode 1920x1080`
xrandr: cannot find crtc for output DisplayPort-4-1-1
We ran xrandr --listproviders to see what we got. With two GPUs connected, we got the following.
[monitormadness@monitor-madness ~]$ xrandr --listproviders -d :0
Providers: number : 2
Provider 0: id: 0x8d cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 30 associated providers: 1 name:PITCAIRN @ pci:0000:04:00.0
Provider 1: id: 0x4b cap: 0xf, Source Output, Sink Output, Source Offload, Sink Offload crtcs: 6 outputs: 6 associated providers: 1 name:PITCAIRN @ pci:0000:06:00.0
Looks like we can only get 6 CRTCs per card. This is where I reach out to you all. Does anyone know of some Xorg or kernel flag trickery we can use to get more outputs for our buck with the limited number of CRTCs? I don't quite know enough about how video cards work to make an informed decision about what's going on, but my hypothesis is that the card's firmware is what transmits how many outputs we can use, so we may be SOL in the department of getting more CRTCs, but perhaps there may be some way to trick Xorg into rendering the content of one CRTC across multiple monitors? Not sure. Would love to hear what you all think.
Thanks for taking the time to read this! :)