[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Enable audio virtualization in Xen



On Thu, Jul 28, 2022 at 12:05 PM SHARMA, JYOTIRMOY
<JYOTIRMOY.SHARMA@xxxxxxx> wrote:
>
> [AMD Official Use Only - General]
>
> Hi all,
>
> Can anyone please help here?

Hello

I have now been able to reproduce the HVM guest audio failure that you
reported, with the same versions of Ubuntu, Xen and Qemu that you
indicated. I have also been able to correct it and successfully enable
guest audio output. I hope we can enable the same for you.

The issues I encountered are:
1) The command line arguments passed to qemu from libxl need some
adjustment for this system configuration.
2) Pulseaudio on the host runs as the desktop session user, whereas
the qemu device emulator runs as root, and some configuration change
is required to connect the two.

I also had to ensure that I had a version of Qemu with SDL enabled to
match your configuration, and a recent enough version of seabios to
successfully boot the guest.

The following are workarounds. A new patch to libxl would be
appropriate for improving handling of passing audio configuration from
VM config files to qemu, and there is likely a better way of enabling
host audio configuration for qemu than my outline below, but this
appears to work and is hopefully sufficient for unblocking your
progress.

To work around the command line arguments to qemu:
# Move the qemu-system-i386 binary to a different filename:
mv /usr/lib/xen/bin/qemu-system-i386 /usr/lib/xen/bin/qemu-system-i386.real

# Create a wrapper script file in place of the previous binary, to add
the audio parameters: /usr/lib/xen/bin/qemu-system-i386
----
#!/bin/sh
/usr/lib/xen/bin/qemu-system-i386.real -audiodev id=snd0,driver=pa
-device ich9-intel-hda -device hda-output,audiodev=snd0 $@
----
chmod 755 /usr/lib/xen/bin/qemu-system-i386

Ensure that you have removed any sound configuration from the VM
config file; the wrapper script will be providing this now instead.

To enable sound from the qemu process that is running as root, I
followed the answer on this page:
https://stackoverflow.com/questions/66775654/how-can-i-make-pulseaudio-run-as-root

Summarizing those pulseaudio configuration steps here, perform the
following as root:
# Write /etc/systemd/system/pulseaudio.service file:
----
[Unit]
Description=PulseAudio system server

[Service]
Type=notify
ExecStart=pulseaudio --daemonize=no --system --realtime --log-target=journal

[Install]
WantedBy=multi-user.target
----
# Enable the new service:
sudo systemctl --system enable pulseaudio.service
sudo systemctl --system start pulseaudio.service
sudo systemctl --system status pulseaudio.service

# Edit items in : /etc/pulse/client.conf
----
default-server = /var/run/pulse/native
autospawn = no
----
# Add root to pulse group
sudo adduser root pulse-access

# Also add your desktop user to pulse group, to retain working audio
for that host desktop user
sudo adduser $USER pulse-access

# Reboot
reboot

You should now be able to start your guest VM with working audio. I
would note that the qemu-dm log files in /var/log/xen/ can be useful
for observing error messages from Qemu if you still encounter
difficulty.

> Also, how can I make use of the xen front end drivers in a HVM guest?

I don't believe that the Xen audio front end drivers are necessary for
enabling HVM guest audio output, and I don't have experience with
using them yet but I am interested to hear of reports of using them on
x86.

thanks,

Christopher

>
> -----Original Message-----
> From: SHARMA, JYOTIRMOY
> Sent: Tuesday, July 26, 2022 4:27 PM
> To: Christopher Clark <christopher.w.clark@xxxxxxxxx>
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; xen-users@xxxxxxxxxxxxxxxxxxxx
> Subject: RE: Enable audio virtualization in Xen
>
> [AMD Official Use Only - General]
>
> Hi Christopher,
>
> Thank you for the quick response. Please find answers below.
>
> >> Does audio playback work OK from your Ubuntu dom0?
> Yes.
>
> >> Do you know which version of Ubuntu you are using? ('cat /etc/lsb-release')
> Ubuntu 22.04 LTS.
>
> >> Do you know which version of Xen you are using? ('xl info' in dom0 should 
> >> help)
> 4.16.2-pre.
>
> >> Do you know which version of Qemu you have installed in dom0?
> QEMU emulator version 6.1.1.
>
> >> Did you build and install Xen from source code, or are you using binary 
> >> packages of Xen and its tools?
> We built and installed Xen from source code (git clone 
> https://xenbits.xen.org/git-http/xen.git).
>
> >> Are you using the xl tools, or libvirt tools for configuring and running 
> >> your guest? -- ie. how do you start your domU VM?
> We are using xl tools (sudo xl -v create <path to hvm config file>).
>
> >> When your domU is running, please could you run 'ps auxwww' in dom0 and 
> >> obtain the process information about the qemu instance that is running, so 
> >> that we can see what command line arguments have been supplied to it
>
> This is the log we get right after booting dom 0:
>
> root 723 0.0 0.2 243792 14468 ? Sl 15:51 0:00 
> /usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 0 -xen-attach -name dom0 
> -nographic -M xenpv -daemonize -monitor /dev/null -serial /dev/null -parallel 
> /dev/null -pidfile /var/run/xen/qemu-dom0.pid
>
> This log is seen after we launch dom U (sudo xl -v create <path to hvm config 
> file>):
>
> root 2152 20.7 2.3 2858204 133496 ? Ssl 15:53 0:09 
> /usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 1 -no-shutdown -chardev 
> socket,id=libxl-cmd,path=/var/run/xen/qmp-libxl-1,server=on,wait=off -mon 
> chardev=libxl-cmd,mode=control -chardev 
> socket,id=libxenstat-cmd,path=/var/run/xen/qmp-libxenstat-1,server=on,wait=off
>  -mon chardev=libxenstat-cmd,mode=control -nodefaults -no-user-config -name 
> domu-ubuntu.hvm -vnc 127.0.0.1:0,to=99 -display sdl,gl=on -sdl -device 
> virtio-vga-gl -boot order=dc -usb -usbdevice tablet -smp 2,maxcpus=2 -net 
> none -machine xenfv,suppress-vmdesc=on -m 2040 -drive 
> file=/home/amd/u2004_ubuntu.qcow2,if=ide,index=0,media=disk,format=qcow2,cache=writeback
>
> >> A little more information about what you're running will help with 
> >> providing guidance here. The xl man page indicates that there is a 
> >> "soundhw" option in the VM configuration file for passing sound hardware 
> >> configution through to qemu, so if you are using the xl toolstack, you 
> >> could try adding this to the config file: soundhw="hda"
>
> I tried giving soundhw="hda" option in the hvm config file. However, I do not 
> hear any sound when I play a wave file in dom U. Here is the 'ps auxwww' 
> output after making this change:
>
> root 2568 14.8 2.3 2770864 134720 ? Ssl 15:58 0:09 
> /usr/local/lib/xen/bin/qemu-system-i386 -xen-domid 2 -no-shutdown -chardev 
> socket,id=libxl-cmd,path=/var/run/xen/qmp-libxl-2,server=on,wait=off -mon 
> chardev=libxl-cmd,mode=control -chardev 
> socket,id=libxenstat-cmd,path=/var/run/xen/qmp-libxenstat-2,server=on,wait=off
>  -mon chardev=libxenstat-cmd,mode=control -nodefaults -no-user-config -name 
> domu-ubuntu-audio.hvm -vnc 127.0.0.1:0,to=99 -display sdl,gl=on -sdl -device 
> virtio-vga-gl -boot order=dc -usb -usbdevice tablet -soundhw hda -smp 
> 2,maxcpus=2 -net none -machine xenfv,suppress-vmdesc=on -m 2040 -drive 
> file=/home/amd/u2004_ubuntu.qcow2,if=ide,index=0,media=disk,format=qcow2,cache=writeback
>
> Also, I tried giving soundhw="all" in the config file, however this throws 
> following error:
>
> libxl: error: libxl_dm.c:3130:device_model_spawn_outcome: Domain 4:domain 4 
> device model: spawn failed (rc=-3)
> libxl: error: libxl_dm.c:3350:device_model_postconfig_done: Domain 4:Post DM 
> startup configs failed, rc=-3
> libxl: error: libxl_create.c:1867:domcreate_devmodel_started: Domain 4:device 
> model did not start: -3
> libxl: error: libxl_aoutils.c:646:libxl__kill_xs_path: Device Model already 
> exited
> libxl: error: libxl_domain.c:1183:libxl__destroy_domid: Domain 4:Non-existant 
> domain
> libxl: error: libxl_domain.c:1137:domain_destroy_callback: Domain 4:Unable to 
> destroy guest
> libxl: error: libxl_domain.c:1064:domain_destroy_cb: Domain 4:Destruction of 
> domain failed
>
> Can you please let me know what parameters I should use in the config file to 
> play audio from dom U?
>
> Regards,
> Jyotirmoy
>
> -----Original Message-----
> From: Christopher Clark <christopher.w.clark@xxxxxxxxx>
> Sent: Tuesday, July 26, 2022 2:44 AM
> To: SHARMA, JYOTIRMOY <JYOTIRMOY.SHARMA@xxxxxxx>
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxxx; xen-users@xxxxxxxxxxxxxxxxxxxx
> Subject: Re: Enable audio virtualization in Xen
>
> [CAUTION: External Email]
>
> On Mon, Jul 25, 2022 at 4:45 AM SHARMA, JYOTIRMOY <JYOTIRMOY.SHARMA@xxxxxxx> 
> wrote:
> >
> > [AMD Official Use Only - General]
> >
> >
> > Hi all,
>
> Hi Jyotirmoy,
>
> I have add the xen-users list to CC since this thread may be useful to that 
> forum.
>
> > I am using ubuntu as dom 0 and also dom U (HVM). I want to play audio from 
> > “dom U” Ubuntu.
>
> I think that it should be possible to enable what you are attempting to do. 
> ie. audio output from a HVM Ubuntu guest VM.
>
> Some questions to support assisting you:
> * Does audio playback work OK from your Ubuntu dom0?
> * Do you know which version of Ubuntu you are using? ('cat /etc/lsb-release')
> * Do you know which version of Xen you are using? ('xl info' in dom0 should 
> help)
> * Do you know which version of Qemu you have installed in dom0?
> * Did you build and install Xen from source code, or are you using binary 
> packages of Xen and its tools?
> * Are you using the xl tools, or libvirt tools for configuring and running 
> your guest? -- ie. how do you start your domU VM?
> * When your domU is running, please could you run 'ps auxwww' in dom0 and 
> obtain the process information about the qemu instance that is running, so 
> that we can see what command line arguments have been supplied to it
>
> > I am new to Xen/virtualization in general.
>
> Welcome! :-)
>
> > From various reading I understood that I need to take following approach:
> >
> > 1. Use Xen front end ALSA driver in dom U
>
> I'm not certain that this is necessary for your HVM guest. Instead of using 
> the Xen paravirtualized audio protocol, Qemu should be able to present an 
> emulated audio device to the HVM guest domU, and a standard audio driver (hda 
> or ac97) in domU should suffice.
>
> > 2. Use Qemu to connect to the backend ALSA driver in Dom 0
>
> I think if Qemu is started with the correct command line arguments, it should 
> be able to play sound on behalf of the guest, if sound is correctly 
> configured and working in dom0.
>
> > Can you please let me know if this approach is fine? If yes, I have 
> > following questions:
> >
> > 1. Do I need to recompile Ubuntu to support Xen front end ALSA driver? Or 
> > will Ubuntu iso file already have it enabled?
>
> I think the latter, that the Ubuntu installation ISO should already contain a 
> suitable audio device driver that is compatible with the virtual audio device 
> that is emulated by Qemu.
>
> > 2. Ho do I configure Qemu to enable backend driver?
>
> A little more information about what you're running will help with providing 
> guidance here. The xl man page indicates that there is a "soundhw" option in 
> the VM configuration file for passing sound hardware configution through to 
> qemu, so if you are using the xl toolstack, you could try adding this to the 
> config file: soundhw="hda"
>
> Christopher



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.