Layer8 needed help :D

Hi all (:

im new to linux and set up manjaro with a vfio vm.

i use a 3600 with 32gb and an 6800xt. (wx3200 for linux host)
i cant get jack to work but everything else looks like its working.
i followed the arch wiki in addition to the looking glass wiki.
also a few blogs for performance tuning like hugepages hyperv etc to get windows sandboxing etc to work.

sadly looking glass breaks with hdr and it also looks really washed out and bright compared to the direct output.

but now to my question / problem:

i tried a few benchmarks and the first test looks promising

sadly when i tried my first game i quickly noticed that gaming is not possible :frowning:

the mouse which is passed through spice is super laggy and stutters as soon as there is a little game running (tested with deep rock galactic)

you can also see the lags in normal windows:

is there any solution to get looking glass at leas some what playable for shooters?

for those interested here is my current XML ( i will provide any information i can if you want it: )

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
  <name>win10-gaming</name>
  <metadata>
    <libosinfo:libosinfo xmlns:libosinfo="http://libvirt.org/schemas/domain/qemu/1.0">
      <libosinfo:os id="http://microsoft.com/win/10"/>
    </libosinfo:libosinfo>
  </metadata>
  <memory unit="KiB">8392704</memory>
  <currentMemory unit="KiB">8392704</currentMemory>
  <memoryBacking>
    <hugepages/>
  </memoryBacking>
  <vcpu placement="static">8</vcpu>
  <cputune>
    <vcpupin vcpu="0" cpuset="0"/>
    <vcpupin vcpu="1" cpuset="6"/>
    <vcpupin vcpu="2" cpuset="3"/>
    <vcpupin vcpu="3" cpuset="9"/>
    <vcpupin vcpu="4" cpuset="4"/>
    <vcpupin vcpu="5" cpuset="10"/>
    <vcpupin vcpu="6" cpuset="5"/>
    <vcpupin vcpu="7" cpuset="11"/>
    <emulatorpin cpuset="0,6"/>
  </cputune>
  <os>
    <type arch="x86_64" machine="pc-q35-7.0">hvm</type>
    <loader readonly="yes" secure="yes" type="pflash">/usr/share/edk2-ovmf/x64/OVMF_CODE.secboot.fd</loader>
    <nvram>/var/lib/libvirt/qemu/nvram/win10-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"/>
      <runtime state="on"/>
      <synic state="on"/>
      <stimer state="on">
        <direct state="on"/>
      </stimer>
      <reset state="on"/>
      <vendor_id state="on" value="123456789ab"/>
      <frequencies state="on"/>
      <reenlightenment state="on"/>
      <tlbflush state="on"/>
      <ipi state="on"/>
      <evmcs state="off"/>
    </hyperv>
    <kvm>
      <hidden state="on"/>
    </kvm>
    <vmport state="off"/>
    <smm state="on"/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on">
    <topology sockets="1" dies="1" cores="4" threads="2"/>
    <feature policy="require" name="topoext"/>
    <feature policy="disable" name="hypervisor"/>
    <feature policy="require" name="svm"/>
  </cpu>
  <clock offset="localtime">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
    <timer name="hypervclock" present="yes"/>
    <timer name="tsc" present="yes" mode="native"/>
  </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="qcow2" discard="unmap"/>
      <source file="/var/lib/libvirt/images/win10-gaming.qcow2"/>
      <target dev="vda" bus="virtio"/>
      <boot order="1"/>
      <address type="pci" domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
    </disk>
    <disk type="file" device="cdrom">
      <driver name="qemu" type="raw"/>
      <source file="/home/hq/Downloads/Win10_21H2_English_x64.iso"/>
      <target dev="sda" bus="sata"/>
      <readonly/>
      <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="0x8"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="2" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="2" port="0x9"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <controller type="pci" index="3" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="3" port="0xa"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
    </controller>
    <controller type="pci" index="4" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="4" port="0xb"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x3"/>
    </controller>
    <controller type="pci" index="5" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="5" port="0xc"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x4"/>
    </controller>
    <controller type="pci" index="6" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="6" port="0xd"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x5"/>
    </controller>
    <controller type="pci" index="7" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="7" port="0xe"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x6"/>
    </controller>
    <controller type="pci" index="8" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="8" port="0xf"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x7"/>
    </controller>
    <controller type="pci" index="9" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="9" port="0x10"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="10" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="10" port="0x11"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x1"/>
    </controller>
    <controller type="pci" index="11" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="11" port="0x12"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x2"/>
    </controller>
    <controller type="pci" index="12" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="12" port="0x13"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x3"/>
    </controller>
    <controller type="pci" index="13" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="13" port="0x14"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x4"/>
    </controller>
    <controller type="pci" index="14" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="14" port="0x15"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x5"/>
    </controller>
    <controller type="pci" index="15" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="15" port="0x16"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x6"/>
    </controller>
    <controller type="pci" index="16" model="pcie-to-pci-bridge">
      <model name="pcie-pci-bridge"/>
      <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/>
    </controller>
    <controller type="sata" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
    </controller>
    <controller type="virtio-serial" index="0">
      <address type="pci" domain="0x0000" bus="0x03" slot="0x00" function="0x0"/>
    </controller>
    <interface type="bridge">
      <mac address="52:54:00:61:37:aa"/>
      <source bridge="bridge0"/>
      <model type="virtio"/>
      <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
    </interface>
    <channel type="spicevmc">
      <target type="virtio" name="com.redhat.spice.0"/>
      <address type="virtio-serial" controller="0" bus="0" port="1"/>
    </channel>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <graphics type="spice" autoport="yes">
      <listen type="address"/>
      <image compression="off"/>
    </graphics>
    <sound model="ich9">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
    </sound>
    <audio id="1" type="jack">
      <input clientName="win10-gaming" connectPorts="RODE NT-USB Analog Stereo"/>
      <output clientName="win10-gaming" connectPorts="SMSL USB AUDIO Analog Stereo"/>
    </audio>
    <video>
      <model type="none"/>
    </video>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x0e" slot="0x00" function="0x0"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x05" slot="0x00" function="0x0"/>
    </hostdev>
    <hostdev mode="subsystem" type="pci" managed="yes">
      <source>
        <address domain="0x0000" bus="0x0e" slot="0x00" function="0x1"/>
      </source>
      <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
    </hostdev>
    <hostdev mode="subsystem" type="usb" managed="yes">
      <source>
        <vendor id="0x046d"/>
        <product id="0xc548"/>
      </source>
      <address type="usb" bus="0" port="1"/>
    </hostdev>
    <memballoon model="none"/>
    <shmem name="looking-glass">
      <model type="ivshmem-plain"/>
      <size unit="M">256</size>
      <address type="pci" domain="0x0000" bus="0x10" slot="0x01" function="0x0"/>
    </shmem>
  </devices>
  <qemu:commandline>
    <qemu:env name="PIPEWIRE_RUNTIME_DIR" value="/srv/win10-gaming"/>
    <qemu:env name="PIPEWIRE_LATENCY" value="512/48000"/>
  </qemu:commandline>
</domain>

The problem in this case might be the number of cores you feed to the VM. A 3600 is a bit on the small side for VFIO, but four cores should give you playable FPS at least.

Other than that, I am too inexperienced with LG to give much advice; was planning on it first, then I realised I don’t even need it for my use case. :slight_smile:

yeah the fps are OK as you can see in the time spy benchmarks i lost only around 10% performance.
But the input lag and mouse stutter is unbearable :frowning:

you maybe onto one of my mistakes (:

i changed it to:

  <vcpu placement="static">8</vcpu>
  <cputune>
    <vcpupin vcpu="0" cpuset="2,8"/>
    <vcpupin vcpu="1" cpuset="3,9"/>
    <vcpupin vcpu="2" cpuset="4,10"/>
    <vcpupin vcpu="3" cpuset="5,11"/>
    <emulatorpin cpuset="1,7"/>
  </cputune>

which seems to work better (:

now i need to figure out all the LG problems i have :confused:

1 Like

This is unrelated to your earlier issues but I think one of the concepts of looking glass is you generally want to stay close to 60fps and no more, I’m almost certain a 6800xt is more than capable of exceeding that in timespy standard

You might see less difference in GPU score if you tried say ran timespy extreme where you had less frames

Or maybe I don’t know what I’m talking about

1 Like

oh OK that is really good to know. (:
i love now that i got the vfio somewhat to an acceptable performance and also looking glass is usable.

Sadly (for now) it seems lg is not the solution i hoped for.
Sure the convenience is awesome!
But there are to many drawbacks :frowning: (at least for now)

regarding the mouse input through spice the fps drop below 30 or 20 (from an average of around 80 when lg is running o.o )

1 Like

Where is this coming from? it’s incorrect. LG is only limited by your hardware and is capable of hundreds of FPS. Obviously the higher resoulution you run will affect the maximum achievable, but there is no reason to aim for 60fps or only expect 60fps.

Linux does not yet have HDR support on X11 or Wayland, using it just doubles the bandwidth requirements. LG can render it, but how the GPU decides to convert it to the RGB8 color space is entirely driver controlled. Also it seems that your guest is running 4k, as such you are looking at 3.7GiB/s (gigabytes, not bits) of throughput at HDR for 60fps, compared with 1.8GiB/s for SDR.

As for looking washed out, this is because you either have HDR in your guest and there is no support for it in Linux, or you have turned on LG’s night-vision mode designed for monitors that are suffering back-light dimness. LG does not touch the pixel data by default and displays it 1:1.

Did you actually follow the LG installation instructions and use the virtio mouse?

<feature policy="require" name="svm"/>

Are you running nested virtualisation? This is a HUGE performance killer, disable this.

This is no fault of LG but rather your system configuration, thousands are using LG for gaming, including shooters in competitive play. Ie, here is a screenshot I made some time ago while testing in Apex.

Note, 246FPS with no jitter.

6 Likes

@gnif
thank you so much for that clarification!

regarding the performance i noticed that it has to do with my mouse having a polling rate of 1000hz.
And old optical mouse does not cause those huge frame drops. (as posted the 3d mark looks great since the first minute).

Yes i run sandboxed windows and hyperv since i read that you get less bans (for using a VM) so it is ban avoidance.

Regarding the picture colors: I can make you photos if you want. (HDR completely breaks it as you said) so there has to be some sort of setting in the windows amd drivers or sth which causes this color difference (i am no expert so i don’t know where to look).

PS: since you are here directly and i would be great full if you could answer a question:

Is there a way to catch the mouse? I get looking glass working but cant use it for gaming no matter if i fix my problems since i play shooters and my mouse always moves to the other monitors when i try to look around in shooters that makes playing games not possible for me :confused:

1 Like

This is the primary cause of your latency spikes. Also there has been no reported bans for using a VM, only kicks from servers if you are. The only time you get a ban is if you have actually been caught cheating.

Post your LG client log (console output) and all launch args and any ini config you are using for it.

Press “Scroll Lock”

3 Likes
    <feature policy="disable" name="hypervisor"/>

seems to be responsible for it.

And sadly there are games simply banning for the use of VMs :frowning: leading is Escape from Tarkov.
The games devs and especially Nikita the head of battlestate games has in general some really questionable development choices :’(

I was typing that i tried scroll lock so many times but never as double press :smiley:
it seems when you allow the prompt which gnome/manjaro (i dont know which one) gives for mouse capture you have to to press it again to take affect even if the small “enabled” box apperes :smiley:

thank you so much!

Regarding the colors it might be a layer8 problem since my gnome enables night light to fullscreenapps o.o
but i have to investigate.

Thank you soo much for your help! <3

1 Like

Again, there is no banning of accounts, just VM usage unless you are doing VM detection avoidance or hacking. Tarkov has been known to be like this since it’s release and is often brought up in the Discord channel.

Infact, at this time there is no known title that does ban just for trying to use a VM.

2 Likes