New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 916721 link

Starred by 3 users

Issue metadata

Status: Assigned
Owner:
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 3
Type: Bug
Gfx



Sign in to add a comment

crosvm virtio gpu glmark2 performance regression from guest mesa 18.2.6 (sid) to ToT

Project Member Reported by davidri...@chromium.org, Dec 19

Issue description

Running glmark2 shows a noticeable performance drop from guest mesa 18.2.6 (stock with sid) to ToT.

Same in both cases:
ToT mesa host (7ea8e54dd6399b86961a89c35f46d8faccb2a52b)
ToT virgl host (1d66eff858e318f5786168195b4b54459283949b == 967062325b4059dd2245cf64fdd258c59274ac0e + GL_EXT_blend_func_extended change)

18.2.6 mesa guest (3e741344d79e3ae67b1ad645e7d56fe6c0fb2ae2) built from source
../configure --enable-driglx-direct --enable-gles1 --enable-gles2 --enable-glx-tls --with-egl-platforms='drm x11 wayland' --with-dri-drivers='i915 swrast ' --with-gallium-drivers='swrast virgl' --prefix=/tmp/mesa/usr/local
~/bin/sommelier env LD_LIBRARY_PATH=/tmp/mesa/usr/local/lib glmark2-es2-wayland --off-screen
=======================================================
    glmark2 2017.07
=======================================================
    OpenGL Information
    GL_VENDOR:     Red Hat
    GL_RENDERER:   virgl
    GL_VERSION:    OpenGL ES 3.2 Mesa 18.2.6 (git-3e741344d7)
=======================================================
[build] use-vbo=false: FPS: 543 FrameTime: 1.842 ms
[build] use-vbo=true: FPS: 650 FrameTime: 1.538 ms
[texture] texture-filter=nearest: FPS: 633 FrameTime: 1.580 ms
[texture] texture-filter=linear: FPS: 613 FrameTime: 1.631 ms
[texture] texture-filter=mipmap: FPS: 612 FrameTime: 1.634 ms
[shading] shading=gouraud: FPS: 616 FrameTime: 1.623 ms
[shading] shading=blinn-phong-inf: FPS: 605 FrameTime: 1.653 ms
[shading] shading=phong: FPS: 606 FrameTime: 1.650 ms
[shading] shading=cel: FPS: 602 FrameTime: 1.661 ms
[bump] bump-render=high-poly: FPS: 581 FrameTime: 1.721 ms
[bump] bump-render=normals: FPS: 665 FrameTime: 1.504 ms
[bump] bump-render=height: FPS: 644 FrameTime: 1.553 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 544 FrameTime: 1.838 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 499 FrameTime: 2.004 ms
[pulsar] light=false:quads=5:texture=false: FPS: 553 FrameTime: 1.808 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 245 FrameTime: 4.082 ms
[desktop] effect=shadow:windows=4: FPS: 301 FrameTime: 3.322 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 58 FrameTime: 17.241 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 10 FrameTime: 100.000 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 146 FrameTime: 6.849 ms
[ideas] speed=duration: FPS: 517 FrameTime: 1.934 ms
[jellyfish] <default>: FPS: 403 FrameTime: 2.481 ms
[terrain] <default>: FPS: 133 FrameTime: 7.519 ms
[shadow] <default>: FPS: 538 FrameTime: 1.859 ms
[refract] <default>: FPS: 242 FrameTime: 4.132 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 618 FrameTime: 1.618 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 611 FrameTime: 1.637 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 619 FrameTime: 1.616 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 609 FrameTime: 1.642 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 605 FrameTime: 1.653 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 623 FrameTime: 1.605 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 616 FrameTime: 1.623 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 625 FrameTime: 1.600 ms
=======================================================
                                  glmark2 Score: 499
=======================================================

ToT mesa guest (3c71ba3baab53176bd8f24e8d5b2bce856b5d44f) built from source
../configure --enable-driglx-direct --enable-gles1 --enable-gles2 --enable-glx-tls --with-egl-platforms='drm x11 wayland' --with-dri-drivers='i915 swrast ' --with-gallium-drivers='swrast virgl' --prefix=/tmp/mesa/usr/local
~/bin/sommelier env LD_LIBRARY_PATH=/tmp/mesa/usr/local/lib glmark2-es2-wayland --off-screen
=======================================================
    glmark2 2017.07
=======================================================
    OpenGL Information
    GL_VENDOR:     Red Hat
    GL_RENDERER:   virgl
    GL_VERSION:    OpenGL ES 3.2 Mesa 19.0.0-devel (git-3c71ba3baa)
=======================================================
[build] use-vbo=false: FPS: 208 FrameTime: 4.808 ms
[build] use-vbo=true: FPS: 230 FrameTime: 4.348 ms
[texture] texture-filter=nearest: FPS: 220 FrameTime: 4.545 ms
[texture] texture-filter=linear: FPS: 213 FrameTime: 4.695 ms
[texture] texture-filter=mipmap: FPS: 220 FrameTime: 4.545 ms
[shading] shading=gouraud: FPS: 210 FrameTime: 4.762 ms
[shading] shading=blinn-phong-inf: FPS: 212 FrameTime: 4.717 ms
[shading] shading=phong: FPS: 210 FrameTime: 4.762 ms
[shading] shading=cel: FPS: 212 FrameTime: 4.717 ms
[bump] bump-render=high-poly: FPS: 204 FrameTime: 4.902 ms
[bump] bump-render=normals: FPS: 213 FrameTime: 4.695 ms
[bump] bump-render=height: FPS: 211 FrameTime: 4.739 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 167 FrameTime: 5.988 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 165 FrameTime: 6.061 ms
[pulsar] light=false:quads=5:texture=false: FPS: 175 FrameTime: 5.714 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 79 FrameTime: 12.658 ms
[desktop] effect=shadow:windows=4: FPS: 91 FrameTime: 10.989 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 57 FrameTime: 17.544 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 10 FrameTime: 100.000 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 101 FrameTime: 9.901 ms
[ideas] speed=duration: FPS: 141 FrameTime: 7.092 ms
[jellyfish] <default>: FPS: 132 FrameTime: 7.576 ms
[terrain] <default>: FPS: 55 FrameTime: 18.182 ms
[shadow] <default>: FPS: 177 FrameTime: 5.650 ms
[refract] <default>: FPS: 92 FrameTime: 10.870 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 206 FrameTime: 4.854 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 209 FrameTime: 4.785 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 204 FrameTime: 4.902 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 204 FrameTime: 4.902 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 202 FrameTime: 4.950 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 203 FrameTime: 4.926 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 203 FrameTime: 4.926 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 204 FrameTime: 4.902 ms
=======================================================
                                  glmark2 Score: 170
=======================================================

18.2.6 mesa guest as distributed with sid
~/bin/sommelier glmark2-es2-wayland --off-screen
=======================================================
    glmark2 2017.07
=======================================================
    OpenGL Information
    GL_VENDOR:     Red Hat
    GL_RENDERER:   virgl
    GL_VERSION:    OpenGL ES 3.2 Mesa 18.2.6
=======================================================
[build] use-vbo=false: FPS: 654 FrameTime: 1.529 ms
[build] use-vbo=true: FPS: 684 FrameTime: 1.462 ms
[texture] texture-filter=nearest: FPS: 686 FrameTime: 1.458 ms
[texture] texture-filter=linear: FPS: 715 FrameTime: 1.399 ms
[texture] texture-filter=mipmap: FPS: 674 FrameTime: 1.484 ms
[shading] shading=gouraud: FPS: 643 FrameTime: 1.555 ms
[shading] shading=blinn-phong-inf: FPS: 643 FrameTime: 1.555 ms
[shading] shading=phong: FPS: 644 FrameTime: 1.553 ms
[shading] shading=cel: FPS: 637 FrameTime: 1.570 ms
[bump] bump-render=high-poly: FPS: 598 FrameTime: 1.672 ms
[bump] bump-render=normals: FPS: 654 FrameTime: 1.529 ms
[bump] bump-render=height: FPS: 649 FrameTime: 1.541 ms
[effect2d] kernel=0,1,0;1,-4,1;0,1,0;: FPS: 550 FrameTime: 1.818 ms
[effect2d] kernel=1,1,1,1,1;1,1,1,1,1;1,1,1,1,1;: FPS: 496 FrameTime: 2.016 ms
[pulsar] light=false:quads=5:texture=false: FPS: 595 FrameTime: 1.681 ms
[desktop] blur-radius=5:effect=blur:passes=1:separable=true:windows=4: FPS: 247 FrameTime: 4.049 ms
[desktop] effect=shadow:windows=4: FPS: 295 FrameTime: 3.390 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 111 FrameTime: 9.009 ms
[buffer] columns=200:interleave=false:update-dispersion=0.9:update-fraction=0.5:update-method=subdata: FPS: 10 FrameTime: 100.000 ms
[buffer] columns=200:interleave=true:update-dispersion=0.9:update-fraction=0.5:update-method=map: FPS: 251 FrameTime: 3.984 ms
[ideas] speed=duration: FPS: 493 FrameTime: 2.028 ms
[jellyfish] <default>: FPS: 415 FrameTime: 2.410 ms
[terrain] <default>: FPS: 136 FrameTime: 7.353 ms
[shadow] <default>: FPS: 552 FrameTime: 1.812 ms
[refract] <default>: FPS: 243 FrameTime: 4.115 ms
[conditionals] fragment-steps=0:vertex-steps=0: FPS: 650 FrameTime: 1.538 ms
[conditionals] fragment-steps=5:vertex-steps=0: FPS: 649 FrameTime: 1.541 ms
[conditionals] fragment-steps=0:vertex-steps=5: FPS: 654 FrameTime: 1.529 ms
[function] fragment-complexity=low:fragment-steps=5: FPS: 648 FrameTime: 1.543 ms
[function] fragment-complexity=medium:fragment-steps=5: FPS: 641 FrameTime: 1.560 ms
[loop] fragment-loop=false:fragment-steps=5:vertex-steps=5: FPS: 649 FrameTime: 1.541 ms
[loop] fragment-steps=5:fragment-uniform=false:vertex-steps=5: FPS: 659 FrameTime: 1.517 ms
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 648 FrameTime: 1.543 ms
=======================================================
                                  glmark2 Score: 529
=======================================================

 
Owner: davidri...@chromium.org
Status: Assigned (was: Untriaged)
Cc: selcott@chromium.org
Bisect shows the following set of changes.  I had to skip a lot of commits due to the test program crashing in this region.
40eca7d3e1 (refs/bisect/bad) virgl: Use file descriptor instead of un-allocated object
78fdc507a3 (HEAD, refs/bisect/skip-78fdc507a37b7174e21412cc0b2f4818dbe6b63f) i965: Add support for and expose EXT_texture_sRGB_R8
c5363869d4 (refs/bisect/skip-c5363869d4971780401b21bb75083ef2518c12be) i965: Force zero swizzles for unused components in GL_RED and GL_RG
ebcde34545 (refs/bisect/skip-ebcde3454552adc6d3fea8af2207aafaba857796) i965: be more specific about FBO completeness errors
24a02157dd (refs/bisect/skip-24a02157dd7552712fda45317140c26dad44ea09) i965: Correct L8_UNORM_SRGB table entry
70692adf48 (refs/bisect/skip-70692adf48d81f1cef15204c08444369eca4987e) virgl: Clean up fences commit
c2e3d0f163 (refs/bisect/skip-c2e3d0f1631b7895530c69c7728d0fc9325ffc1c) i915: Delete swizzling detection logic.
beb66d3747 (refs/bisect/skip-beb66d374724583e56430992a8458188f07802b8) nv50/ir/ra: enforce max register requirement, and change spill order
799e021894 (refs/bisect/skip-799e021894a0e23e3017bf0cbb8780190f3e5646) nv50/ir/ra: improve condition for short regs, unify with cond for 16-bit
955d943c33 (refs/bisect/skip-955d943c33d55ebb469efaeb5710d42e267b121a) nv50/ir: delete MINMAX instruction that is no longer in the BB
7e9fc11ff8 (refs/bisect/skip-7e9fc11ff8ee47ad25d96f618f5d1a1c26590083) egl: Print the actual message to the console from _eglError().
d971a4230d (refs/bisect/skip-d971a4230d54069c996bca78b6ed6a6a23377821) loader: Factor out the common driver opening logic from each loader.
cc19815738 (refs/bisect/skip-cc198157382a988590b0288d287281139c5f73e6) loader: Stop using a local definition for an in-tree header
2bc1f5c2e7 (refs/bisect/skip-2bc1f5c2e70fe3b4d41f060af9859bc2a94c5b62) egl: Move loader_set_logger() up to egl_dri2.c.
c2b515379b (refs/bisect/skip-c2b515379bfc669660133bb2d25e50bb04ac0d66) glx: Move DRI extensions pointer loading to driOpenDriver().
7076e9f116 (refs/bisect/skip-7076e9f116c2060a7f28680178d96c188c7177df) glx: Remove an old DEFAULT_DRIVER_DIR default.
d031d5c999 (refs/bisect/skip-d031d5c9994bd67329f2b2c7e9a4457af671b05a) radv: enable primitive binning by default
afd834b62e (refs/bisect/skip-afd834b62e384f63b712115c1f79659b03828b0c) radv: add a debug option for disabling primitive binning
d1a1c21e76 (refs/bisect/skip-d1a1c21e7621b5177febf191fcd3d3b8ef69dc96) virgl: native fence fd support

If I test d1a1c21e76 with 40eca7d3e1 (crash fix) cherry-picked on top, the problem occurs; so it's likely due to the fence implementation.
fence fds are not being used by us so almost all of this change is inert, but this change also moves the virgl winsys cs_create_fence call slightly later.

Before this change, the code is:
virgl_flush_from_st() {
  vws->cs_create_fence();
  for each virgl context buffer {
    virgl_buffer_flush();
  }
  vws->submit_cmd(); // called from virgl_flush_eq
} 

After this change, the code is:
virgl_flush_from_st() {
  for each virgl context buffer {
    virgl_buffer_flush();
  }
  vws->submit_cmd(); // called from virgl_flush_eq
  vws->cs_create_fence(); // called from virgl_flush_eq
} 

I haven't looked through the mesa fence code in much detail, but it does seem that moving the fence creation to after the submit command is the correct location.

Sign in to add a comment