crosvm virtio gpu glmark2 performance regression from guest mesa 18.2.6 (sid) to ToT |
|||
Issue descriptionRunning 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 =======================================================
,
Dec 20
,
Dec 20
,
Dec 20
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.
,
Dec 20
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 |
|||
Comment 1 by adlr@chromium.org
, Dec 20