On Mon, May 12, 2025 at 07:33:37PM +0000, Matt Ochs wrote:
> > On May 12, 2025, at 5:19 AM, Daniel P. Berrangé <berra...@redhat.com> wrote:
> > On Fri, May 09, 2025 at 07:29:04PM +0000, Matt Ochs wrote:
> >> 
> >> Would it make sense to just use the existing pcihole64 since [I think]
> >> it more or less represents the same concept (setting 64bit MMIO window)?
> > 
> > I'm not sure. I've been struggling to reproduce an effect wit hseting
> > the existing  -global q35-pcihost.pci-hole64-size=1048576K settings
> > on x86, and also wondering how it interacts with the previously
> > mentioned  -fw_cfg name=opt/ovmf/X-PciMmio64Mb,string=262144
> > 
> > Possibly the former only works with SeaBIOS, and the latter only
> > works with EDK2, but I've not figured out how to prove this.
> 
> The qemu docs mention opt/ovmf is specifically for OVMF firmware:
> https://github.com/qemu/qemu/blob/7be29f2f1a3f5b037d27eedbd5df9f441e8c8c16/docs/specs/fw_cfg.rst#L279
> 
> The pcihole64 setting can be used with OVMF (see below) and with SEABIOS:
> https://github.com/libvirt/libvirt/blob/master/docs/formatdomain.rst (see 
> pcihole64)
> 
> The X-PciMmio64Mb parameter isn't directly supported in libvirt IIUC. The 
> libvirt
> XML would need to directly pass qemu command line arguments to use it.

I'm wondering what the semantic difference is between setting
the pcihole64 property and the X-PciMmio64Mb fwcfg, in the context
of OVMF.

The fact that both exist, suggests that there is a meaningful
difference, which in turn would mean libvirt might need separate
XML attributes for each, which in turn influences how we might
choose to design the aarch64 solution.

> 
> > 
> > I'm curious if there's a good way to identify the guest memory
> > map impact, as I'm not finding a clear marker in 'dmesg' that
> > correlates ?
> 
> We were able to test this by using OVMF without the dynamic mmio
> window size patch (i.e. a version older than edk2-stable202211) and
> guest kernel parameters that are not set to allow re-calculating the
> MMIO window size by deferring guest resource allocations to the guest
> kernel (i.e. pci=realloc and pci=nocrs aren't set). With this we could 
> reproduce a 4 GPU VM launch with guest BARs not mapped properly
> due to running out of space/resources. The BAR mapping failures will
> be clear in dmesg, with no BAR region mappings in /proc/iomem or
> output of lspci for the GPUs.
> 
> From there we added the pcihole64 attribute to the VM's libvirt definition,
> setting a 2 TB hole size, and the VM booted with guest GPU BARs mapped
> properly in dmesg + GPU BAR mappings visible in /proc/iomem and lspci output.
> 
> Lastly, observed the same behavior by removing the pcihole64 attribute and
> setting the X-PciMmio64Mb configuration to 2TB.
> 
> > 
> >> Or perhaps that would be too messy or x86-centric and it’s better to go
> >> with what you proposed (pcimmio64)?
> > 
> > If the 'pcihole64' setting really is setting the MMIO64 window, then it
> > would be preferrable to re-use the existing setting field.
> 
> Per the tests above, pcihole64 is setting the MMIO64 window. The only concern
> I have with using it is that to date, it has been an x86-centric attribute 
> and tied
> closely with the qemu -global parameter. I don’t think this is a 
> show-stopper, but
> will require some code changes to allow it to work with the virt machine and
> connect it up to a different qemu parameter for that machine.
> 
> 
> -matt
> 
> 

With regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

Reply via email to