[Mesa-dev] Strange performance cliff...
Peter Clifton
pcjc2 at cam.ac.uk
Tue Oct 12 10:45:25 PDT 2010
Using glxgears as a tool to exercise the GPU with some simple rendering,
I have noted a strange cliff in the intel_gpu_top output when resizing
the glxgears window:
Below a certain size e.g.:
-geometry 576x868+0+29
core clock: 400 Mhz
render busy: 21%: ████▎ render space: 10/126976 (0%)
bitstream busy: 0%: bitstream space: 0/126976 (0%)
task percent busy
CS: 20%: ████ vert fetch: 35071068 (137619/sec)
RC Render cache: 17%: ███▌ prim fetch: 15422476 (60993/sec)
VF: 13%: ██▋ VS invocations: 31634160 (128160/sec)
GS: 12%: ██▌ GS invocations: 11848000 (48000/sec)
Windower IZ: 12%: ██▌ GS prims: 0 (0/sec)
SF (strip / fan): 12%: ██▌ CL invocations: 0 (0/sec)
Row 1, EU 3: 10%: ██ CL prims: 28373497 (108993/sec)
Row 0, EU 3: 10%: ██ PS invocations: 7810009 (600886/sec)
Bypass FIFO: 10%: ██ PS depth pass: 17981565671 (73371256/sec)
Pixel shader: 10%: ██
Windower / Masker: 9%: █▉
Filtering: 9%: █▉
Row 1, EU 2: 9%: █▉
Row 0, EU 2: 9%: █▉
Setup Engine: 8%: █▋
MASF: 8%: █▋
Row 1, EU 1: 8%: █▋
Row 0, EU 1: 7%: █▌
Row 1, EU 0: 7%: █▌
Map filter: 6%: █▎
DAP: 6%: █▎
Texture decompress: 6%: █▎
Sampler cache: 6%: █▎
Texture fetch: 5%: █
SVRW: 5%: █
SVRR: 4%: ▉
URB: 4%: ▉
Projection and LOD: 3%: ▋
Dependent address generator: 3%: ▋
Dispatcher: 2%: ▌
CL (clipper): 2%: ▌
SVDW: 2%: ▌
VS0: 2%: ▌
ISC: 1%: ▎
Message Arbiter row 1: 1%: ▎
MASM: 1%: ▎
SI (system instruction?): 0%:
DM: 0%:
SC: 0%:
I get this trace.
When I increase the window size just a fraction, to:
-geometry 576x871+0+29
The CS (command streamer) unit jumps to 100% busy, along with the render
busy graph. Does anyone have any ideas why?
core clock: 400 Mhz
render busy: 100%: ████████████████████ render space: 61/126976 (0%)
bitstream busy: 1%: ▎ bitstream space: 0/126976 (0%)
task percent busy
CS: 100%: ████████████████████ vert fetch: 15165204 (133386/sec)
RC Render cache: 18%: ███▋ prim fetch: 6654764 (59078/sec)
VF: 12%: ██▌ VS invocations: 13559328 (123888/sec)
Windower IZ: 12%: ██▌ GS invocations: 5078400 (46400/sec)
GS: 11%: ██▎ GS prims: 0 (0/sec)
SF (strip / fan): 11%: ██▎ CL invocations: 0 (0/sec)
Row 1, EU 3: 9%: █▉ CL prims: 12836185 (105478/sec)
Pixel shader: 9%: █▉ PS invocations: 6019756 (-1805377/sec)
Bypass FIFO: 9%: █▉ PS depth pass: 7529067710 (71131031/sec)
Row 0, EU 3: 9%: █▉
Windower / Masker: 9%: █▉
Row 1, EU 2: 8%: █▋
Filtering: 8%: █▋
Row 0, EU 2: 8%: █▋
MASF: 8%: █▋
Setup Engine: 7%: █▌
Row 1, EU 1: 7%: █▌
Row 0, EU 1: 7%: █▌
DAP: 6%: █▎
Row 1, EU 0: 6%: █▎
Map filter: 6%: █▎
Texture decompress: 5%: █
Sampler cache: 5%: █
Texture fetch: 5%: █
SVRW: 4%: ▉
SVRR: 4%: ▉
URB: 3%: ▋
Projection and LOD: 3%: ▋
Dependent address generator: 2%: ▌
Dispatcher: 2%: ▌
SVDW: 2%: ▌
CL (clipper): 2%: ▌
ISC: 2%: ▌
VS0: 1%: ▎
Message Arbiter row 1: 1%: ▎
MASM: 1%: ▎
SI (system instruction?): 0%:
DM: 0%:
SC: 0%:
NB: I've patched intel_gpu_top to add a little more human readability to
the output. In case I got it wrong, note that these are the changes I
applied:
diff --git a/lib/instdone.c b/lib/instdone.c
index 722fb03..f908a79 100644
--- a/lib/instdone.c
+++ b/lib/instdone.c
@@ -100,7 +100,7 @@ init_g965_instdone1(void)
static void
init_g4x_instdone1(void)
{
- gen4_instdone1_bit(G4X_BCS_DONE, "BCS");
+ gen4_instdone1_bit(G4X_BCS_DONE, "AVC_FE Command Streamer");
gen4_instdone1_bit(G4X_CS_DONE, "CS");
gen4_instdone1_bit(G4X_MASF_DONE, "MASF");
gen4_instdone1_bit(G4X_SVDW_DONE, "SVDW");
@@ -108,11 +108,11 @@ init_g4x_instdone1(void)
gen4_instdone1_bit(G4X_SVRW_DONE, "SVRW");
gen4_instdone1_bit(G4X_SVRR_DONE, "SVRR");
gen4_instdone1_bit(G4X_ISC_DONE, "ISC");
- gen4_instdone1_bit(G4X_MT_DONE, "MT");
- gen4_instdone1_bit(G4X_RC_DONE, "RC");
+ gen4_instdone1_bit(G4X_MT_DONE, "MT Texture cache");
+ gen4_instdone1_bit(G4X_RC_DONE, "RC Render cache");
gen4_instdone1_bit(G4X_DAP_DONE, "DAP");
gen4_instdone1_bit(G4X_MAWB_DONE, "MAWB");
- gen4_instdone1_bit(G4X_MT_IDLE, "MT idle");
+ gen4_instdone1_bit(G4X_MT_IDLE, "MT (texture cache) idle");
//gen4_instdone1_bit(G4X_GBLT_BUSY, "GBLT");
gen4_instdone1_bit(G4X_SVSM_DONE, "SVSM");
gen4_instdone1_bit(G4X_MASM_DONE, "MASM");
@@ -122,13 +122,13 @@ init_g4x_instdone1(void)
gen4_instdone1_bit(G4X_DM_DONE, "DM");
gen4_instdone1_bit(G4X_FT_DONE, "FT");
gen4_instdone1_bit(G4X_DG_DONE, "DG");
- gen4_instdone1_bit(G4X_SI_DONE, "SI");
+ gen4_instdone1_bit(G4X_SI_DONE, "SI (system instruction?)");
gen4_instdone1_bit(G4X_SO_DONE, "SO");
gen4_instdone1_bit(G4X_PL_DONE, "PL");
- gen4_instdone1_bit(G4X_WIZ_DONE, "WIZ");
+ gen4_instdone1_bit(G4X_WIZ_DONE, "Windower IZ");
gen4_instdone1_bit(G4X_URB_DONE, "URB");
- gen4_instdone1_bit(G4X_SF_DONE, "SF");
- gen4_instdone1_bit(G4X_CL_DONE, "CL");
+ gen4_instdone1_bit(G4X_SF_DONE, "SF (strip / fan)");
+ gen4_instdone1_bit(G4X_CL_DONE, "CL (clipper)");
gen4_instdone1_bit(G4X_GS_DONE, "GS");
gen4_instdone1_bit(G4X_VS0_DONE, "VS0");
gen4_instdone1_bit(G4X_VF_DONE, "VF");
@@ -250,7 +250,7 @@ init_instdone_definitions(uint32_t devid)
gen4_instdone_bit(I965_ROW_1_EU_3_DONE, "Row 1, EU 3");
gen4_instdone_bit(I965_SF_DONE, "Strips and Fans");
gen4_instdone_bit(I965_SE_DONE, "Setup Engine");
- gen4_instdone_bit(I965_WM_DONE, "Windowizer");
+ gen4_instdone_bit(I965_WM_DONE, "Windower / Masker");
gen4_instdone_bit(I965_DISPATCHER_DONE, "Dispatcher");
gen4_instdone_bit(I965_PROJECTION_DONE, "Projection and LOD");
gen4_instdone_bit(I965_DG_DONE, "Dependent address generator");
Best wishes,
--
Peter Clifton
Electrical Engineering Division,
Engineering Department,
University of Cambridge,
9, JJ Thomson Avenue,
Cambridge
CB3 0FA
Tel: +44 (0)7729 980173 - (No signal in the lab!)
Tel: +44 (0)1223 748328 - (Shared lab phone, ask for me)
More information about the mesa-dev
mailing list