Hey there!
I finally found the time to set-up Looking Glass a week ago, and so far I’ve made great progress. First the switch to the Kernel module, made possible thanks to a kind soul on this forum who spotted the error in my config. Then I’ve upgraded to B7 RC1 and now were talking! There’s still a big performance hit though, although nowhere near as bad as with B6.
Some benchmarks for comparison:
This with Looking Glass B7 RC1. The score with the previous version was around 9000. A huge performance increase!
Now this is the score without Looking Glass, the GPU being directly connected to the monitor.
As you can see, using Looking Glass comes with a performance penalty of roughly 20%.
I am sure there’s still room for improvements here! I assume my set-up isn’t that optimized yet (again, it has only been a week, so …).
I’ll go ahead and post as much information as possible, in the hopes someone spots a thing or two that can be tweaked.
System Specs
- NovaCustom V54 Laptop (Product Page)
- Intel® Core™ Ultra 7 Processor 155H (6P,8E,2LPE - 16C/22T), up to 4.8Ghz
- 64 GB DDR5 SO-DIMM
- Intel Arc Graphics Meteor-Lake iGPU
- NVIDIA GeForceRTX 3060 Ti Founders Edition (eGPU via OCuLink)
Full XML of my VM
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
<name>Gaming</name>
<uuid>b7f5a6fa-a759-47a9-8512-21550245c11a</uuid>
<metadata>
<libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
<libosinfo:os id="http://microsoft.com/win/10"/>
</libosinfo:libosinfo>
</metadata>
<memory unit='KiB'>16777216</memory>
<currentMemory unit='KiB'>16777216</currentMemory>
<memoryBacking>
<hugepages/>
</memoryBacking>
<vcpu placement='static'>8</vcpu>
<iothreads>1</iothreads>
<cputune>
<vcpupin vcpu='0' cpuset='1'/>
<vcpupin vcpu='1' cpuset='2'/>
<vcpupin vcpu='2' cpuset='3'/>
<vcpupin vcpu='3' cpuset='4'/>
<vcpupin vcpu='4' cpuset='6'/>
<vcpupin vcpu='5' cpuset='7'/>
<vcpupin vcpu='6' cpuset='8'/>
<vcpupin vcpu='7' cpuset='9'/>
<emulatorpin cpuset='0,5'/>
<iothreadpin iothread='1' cpuset='10-11'/>
</cputune>
<os firmware='efi'>
<type arch='x86_64' machine='pc-q35-9.1'>hvm</type>
<firmware>
<feature enabled='no' name='enrolled-keys'/>
<feature enabled='no' name='secure-boot'/>
</firmware>
<loader readonly='yes' type='pflash'>/usr/share/edk2/x64/OVMF_CODE.fd</loader>
<nvram template='/usr/share/edk2/x64/OVMF_VARS.fd'>/var/lib/libvirt/qemu/nvram/Gaming_VARS.fd</nvram>
</os>
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<synic state='on'/>
<stimer state='on'/>
<reset state='on'/>
<frequencies state='on'/>
</hyperv>
<vmport state='off'/>
</features>
<cpu mode='host-passthrough' check='none' migratable='off'>
<topology sockets='1' dies='1' clusters='1' cores='4' threads='2'/>
<cache mode='passthrough'/>
<maxphysaddr mode='passthrough' limit='40'/>
</cpu>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none' io='threads' discard='unmap'/>
<source file='/var/lib/libvirt/images/win10.img'/>
<target dev='sda' bus='scsi'/>
<boot order='1'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='qemu-xhci' ports='15'>
<address type='pci' domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
</controller>
<controller type='pci' index='0' model='pcie-root'/>
<controller type='pci' index='1' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='1' port='0x10'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='2' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='2' port='0x11'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x1'/>
</controller>
<controller type='pci' index='3' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='3' port='0x12'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x2'/>
</controller>
<controller type='pci' index='4' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='4' port='0x13'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x3'/>
</controller>
<controller type='pci' index='5' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='5' port='0x14'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x4'/>
</controller>
<controller type='pci' index='6' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='6' port='0x15'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x5'/>
</controller>
<controller type='pci' index='7' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='7' port='0x16'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x6'/>
</controller>
<controller type='pci' index='8' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='8' port='0x17'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x7'/>
</controller>
<controller type='pci' index='9' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='9' port='0x18'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
</controller>
<controller type='pci' index='10' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='10' port='0x19'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
</controller>
<controller type='pci' index='11' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='11' port='0x1a'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x2'/>
</controller>
<controller type='pci' index='12' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='12' port='0x1b'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x3'/>
</controller>
<controller type='pci' index='13' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='13' port='0x1c'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x4'/>
</controller>
<controller type='pci' index='14' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='14' port='0x1d'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x5'/>
</controller>
<controller type='pci' index='15' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='15' port='0x8'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
</controller>
<controller type='pci' index='16' model='pcie-to-pci-bridge'>
<model name='pcie-pci-bridge'/>
<address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
</controller>
<controller type='scsi' index='0' model='virtio-scsi'>
<driver queues='8' iothread='1'/>
<address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
</controller>
<interface type='network'>
<mac address='52:54:00:1d:35:91'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
</interface>
<input type='mouse' bus='virtio'>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</input>
<input type='keyboard' bus='virtio'>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</input>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' port='-1' autoport='no'>
<listen type='address'/>
<image compression='off'/>
<gl enable='no'/>
</graphics>
<sound model='ich9'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
</sound>
<audio id='1' type='pipewire' runtimeDir='/run/user/1000'>
<input name='qemuinput'/>
<output name='qemuoutput'/>
</audio>
<video>
<model type='none'/>
</video>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x01' slot='0x00' function='0x1'/>
</source>
<address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
</hostdev>
<watchdog model='itco' action='reset'/>
<memballoon model='none'/>
</devices>
<qemu:commandline>
<qemu:arg value='-device'/>
<qemu:arg value='{"driver":"ivshmem-plain","id":"shmem0","memdev":"looking-glass"}'/>
<qemu:arg value='-object'/>
<qemu:arg value='{"qom-type":"memory-backend-file","id":"looking-glass","mem-path":"/dev/kvmfr0","size":33554432,"share":true}'/>
</qemu:commandline>
</domain>
I’ll run some games to gather some logs and will post them here as well!
Looking Glass Client Log - launched via "looking-glass-client -f /dev/kvmfr0"
00:00:00.000 [I] main.c:1859 | main | Looking Glass (B7-rc1)
00:00:00.000 [I] main.c:1860 | main | Locking Method: Atomic
00:00:00.000 [I] cpuinfo.c:38 | cpuInfo_log | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:00:00.000 [I] cpuinfo.c:39 | cpuInfo_log | CPU: 1 sockets, 16 cores, 22 threads
00:00:00.005 [I] main.c:1185 | lg_run | Using font: /usr/share/fonts/TTF/DejaVuSansMono.ttf
00:00:00.005 [I] ivshmem.c:128 | ivshmemOpenDev | KVMFR Device : /dev/kvmfr0
00:00:00.009 [I] audio.c:159 | audio_init | Using AudioDev: PipeWire
00:00:00.009 [I] ps.c:245 | purespice_connect | Connecting to socket 127.0.0.1:5900
00:00:00.019 [I] rsa.c:178 | rsa_encryptPassword | Using Nettle
00:00:00.020 [I] ps.c:268 | purespice_connect | Connected
00:00:00.020 [I] channel_main.c:167 | onMessage_mainName | Guest name: Gaming
00:00:00.020 [I] channel_main.c:183 | onMessage_mainUUID | Guest UUID: b7f5a6fa-a759-47a9-8512-21550245c11a
00:00:00.028 [I] ps.c:644 | ps_connectChannel | INPUTS channel connected
00:00:00.028 [I] channel.c:323 | onMessage_notify | [notify] keyboard channel is insecure
00:00:00.029 [I] egl.c:289 | egl_initialize | Double buffering is off
00:00:00.029 [I] main.c:1139 | tryRenderer | Using Renderer: EGL
00:00:00.029 [I] wayland.c:120 | waylandInit | Compositor: kwin_wayland_wr
00:00:00.029 [I] wayland.c:130 | waylandInit | Selected : xdg
00:00:00.038 [I] gl.c:58 | waylandGetEGLDisplay | Using eglGetPlatformDisplay
00:00:00.046 [I] egl.c:856 | egl_renderStartup | Single buffer mode
00:00:00.048 [I] egl.c:883 | egl_renderStartup | EGL : 1.5
00:00:00.048 [I] egl.c:884 | egl_renderStartup | Vendor : Intel
00:00:00.048 [I] egl.c:885 | egl_renderStartup | Renderer: Mesa Intel(R) Arc(tm) Graphics (MTL)
00:00:00.048 [I] egl.c:886 | egl_renderStartup | Version : OpenGL ES 3.2 Mesa 24.2.6-arch1.1
00:00:00.048 [I] egl.c:887 | egl_renderStartup | EGL APIs: OpenGL OpenGL_ES
00:00:00.048 [I] egl.c:958 | egl_renderStartup | Debug messages disabled, enable with egl:debug=true
00:00:00.070 [I] eglutil.c:35 | swapWithDamageInit | Using EGL_KHR_swap_buffers_with_damage
00:00:00.083 [I] main.c:1491 | lg_run | ================================================================================
00:00:00.083 [I] main.c:1492 | lg_run | The host application seems to not be running
00:00:00.083 [I] main.c:1493 | lg_run | Waiting for the host application to start...
00:00:00.376 [I] main.c:1498 | lg_run | ================================================================================
00:00:00.376 [I] main.c:1512 | lg_run | Check the host log in your guest at %ProgramData%\Looking Glass (host)\looking-glass-host.txt
00:00:00.376 [I] main.c:1513 | lg_run | Continuing to wait...
00:00:27.565 [I] main.c:1590 | lg_run | Guest Information:
00:00:27.565 [I] main.c:1591 | lg_run | Version : B7-rc1
00:00:27.565 [I] main.c:1612 | lg_run | UUID : b7f5a6fa-a759-47a9-8512-21550245c11a
00:00:27.565 [I] main.c:1621 | lg_run | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:00:27.565 [I] main.c:1622 | lg_run | CPU : 1 sockets, 4 cores, 8 threads
00:00:27.565 [I] main.c:1624 | lg_run | Using : D12
00:00:27.565 [I] main.c:1710 | lg_run | OS : Windows
00:00:27.565 [I] main.c:1712 | lg_run | OS Name : Windows 10 Pro (Build: 19045)
00:00:27.565 [I] main.c:1734 | lg_run | Starting session
00:00:27.566 [I] main.c:553 | main_frameThread | Using DMA buffer support
00:00:28.044 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:00:33.108 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:01:39.407 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:07:05.045 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:09:12.576 [I] main.c:1752 | lg_run | Waiting for the host to restart...
00:09:13.119 [I] main.c:1590 | lg_run | Guest Information:
00:09:13.119 [I] main.c:1591 | lg_run | Version : B7-rc1
00:09:13.119 [I] main.c:1612 | lg_run | UUID : b7f5a6fa-a759-47a9-8512-21550245c11a
00:09:13.119 [I] main.c:1621 | lg_run | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:09:13.120 [I] main.c:1622 | lg_run | CPU : 1 sockets, 4 cores, 8 threads
00:09:13.120 [I] main.c:1624 | lg_run | Using : D12
00:09:13.120 [I] main.c:1710 | lg_run | OS : Windows
00:09:13.120 [I] main.c:1712 | lg_run | OS Name : Windows 10 Pro (Build: 19045)
00:09:13.120 [I] main.c:1734 | lg_run | Starting session
00:09:13.120 [I] main.c:553 | main_frameThread | Using DMA buffer support
00:09:13.394 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:09:17.271 [I] main.c:1590 | lg_run | Guest Information:
00:09:17.271 [I] main.c:1591 | lg_run | Version : B7-rc1
00:09:17.271 [I] main.c:1612 | lg_run | UUID : b7f5a6fa-a759-47a9-8512-21550245c11a
00:09:17.271 [I] main.c:1621 | lg_run | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:09:17.271 [I] main.c:1622 | lg_run | CPU : 1 sockets, 4 cores, 8 threads
00:09:17.271 [I] main.c:1624 | lg_run | Using : D12
00:09:17.271 [I] main.c:1710 | lg_run | OS : Windows
00:09:17.271 [I] main.c:1712 | lg_run | OS Name : Windows 10 Pro (Build: 19045)
00:09:17.271 [I] main.c:1734 | lg_run | Starting session
00:09:17.272 [I] main.c:553 | main_frameThread | Using DMA buffer support
00:09:17.528 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:09:22.396 [I] main.c:1590 | lg_run | Guest Information:
00:09:22.396 [I] main.c:1591 | lg_run | Version : B7-rc1
00:09:22.396 [I] main.c:1612 | lg_run | UUID : b7f5a6fa-a759-47a9-8512-21550245c11a
00:09:22.396 [I] main.c:1621 | lg_run | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:09:22.396 [I] main.c:1622 | lg_run | CPU : 1 sockets, 4 cores, 8 threads
00:09:22.396 [I] main.c:1624 | lg_run | Using : D12
00:09:22.396 [I] main.c:1710 | lg_run | OS : Windows
00:09:22.396 [I] main.c:1712 | lg_run | OS Name : Windows 10 Pro (Build: 19045)
00:09:22.396 [I] main.c:1734 | lg_run | Starting session
00:09:22.397 [I] main.c:553 | main_frameThread | Using DMA buffer support
00:09:23.638 [I] main.c:1752 | lg_run | Waiting for the host to restart...
00:09:25.018 [I] main.c:1590 | lg_run | Guest Information:
00:09:25.018 [I] main.c:1591 | lg_run | Version : B7-rc1
00:09:25.018 [I] main.c:1612 | lg_run | UUID : b7f5a6fa-a759-47a9-8512-21550245c11a
00:09:25.018 [I] main.c:1621 | lg_run | CPU Model: Intel(R) Core(TM) Ultra 7 155H
00:09:25.018 [I] main.c:1622 | lg_run | CPU : 1 sockets, 4 cores, 8 threads
00:09:25.018 [I] main.c:1624 | lg_run | Using : D12
00:09:25.018 [I] main.c:1710 | lg_run | OS : Windows
00:09:25.018 [I] main.c:1712 | lg_run | OS Name : Windows 10 Pro (Build: 19045)
00:09:25.018 [I] main.c:1734 | lg_run | Starting session
00:09:25.018 [I] main.c:553 | main_frameThread | Using DMA buffer support
00:09:25.239 [I] main.c:710 | main_frameThread | Format: FRAME_TYPE_BGRA 1920x1080 (1920x1080) stride:1920 pitch:7680 rotation:0 hdr:0 pq:0
00:09:47.279 [I] main.c:1752 | lg_run | Waiting for the host to restart...
00:09:56.133 [I] channel.c:269 | channel_internal_disconnect | INPUTS channel disconnected
00:09:56.133 [I] channel.c:269 | channel_internal_disconnect | MAIN channel disconnected
00:09:56.133 [I] ps.c:550 | purespice_process | Shutdown