Hey, folks. I've discussed this with jwb on IRC, but mailing it too to make sure the results don't get lost. I tested all the recent kernel builds on my nouveau (9600 GT) desktop and a selection on my Intel laptop, using gtkperf and x11perf (x11perf at ajax's request) as quick and dirty benchmarks, and got the following results. gtkperf tracks very closely with my subjective perception of performance - when the gtkperf numbers jump, those are the kernels that feel very slow to me. I don't really perceive the jumps that are unique to x11perf numbers.
It seems pretty clear from these numbers that slub_debug is the biggest offender for me, according to jwb. I didn't put the results in the chart for some reason, but on the nouveau machine just like the intel one, rc5.git1 with slub_debug=- as a kernel parameter gives a fast gtkperf time - in the 2.4-2.5 range - and 'feels' perfectly fine, that's what I'm running right now.
nouveau:
3.7.4-204.fc18.x86_64 ---------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:19:54 2013
GtkEntry - time: 0.05 GtkComboBox - time: 0.52 GtkComboBoxEntry - time: 0.41 GtkSpinButton - time: 0.11 GtkProgressBar - time: 0.10 GtkToggleButton - time: 0.10 GtkCheckButton - time: 0.04 GtkRadioButton - time: 0.05 GtkTextView - Add text - time: 0.09 GtkTextView - Scroll - time: 0.11 GtkDrawingArea - Lines - time: 0.24 GtkDrawingArea - Circles - time: 0.23 GtkDrawingArea - Text - time: 0.21 GtkDrawingArea - Pixbufs - time: 0.13 --- Total time: 2.38
Sync time adjustment is 0.0455 msecs.
200000000 reps @ 0.0000 msec (30100000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (28200000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (27400000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (24700000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (31400000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (28200000.0/sec): X protocol NoOperation
600000 reps @ 0.0084 msec (119000.0/sec): QueryPointer 600000 reps @ 0.0084 msec (119000.0/sec): QueryPointer 600000 reps @ 0.0083 msec (121000.0/sec): QueryPointer 600000 reps @ 0.0086 msec (116000.0/sec): QueryPointer 600000 reps @ 0.0086 msec (116000.0/sec): QueryPointer 3000000 trep @ 0.0085 msec (118000.0/sec): QueryPointer
3.8.0-0.rc4.git1.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:12:54 2013
GtkEntry - time: 0.03 GtkComboBox - time: 0.60 GtkComboBoxEntry - time: 0.46 GtkSpinButton - time: 0.11 GtkProgressBar - time: 0.09 GtkToggleButton - time: 0.09 GtkCheckButton - time: 0.04 GtkRadioButton - time: 0.05 GtkTextView - Add text - time: 0.09 GtkTextView - Scroll - time: 0.11 GtkDrawingArea - Lines - time: 0.23 GtkDrawingArea - Circles - time: 0.22 GtkDrawingArea - Text - time: 0.20 GtkDrawingArea - Pixbufs - time: 0.13 --- Total time: 2.45
3.8.0-0.rc4.git3.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:15:10 2013
GtkEntry - time: 0.03 GtkComboBox - time: 0.59 GtkComboBoxEntry - time: 0.45 GtkSpinButton - time: 0.12 GtkProgressBar - time: 0.09 GtkToggleButton - time: 0.09 GtkCheckButton - time: 0.04 GtkRadioButton - time: 0.05 GtkTextView - Add text - time: 0.09 GtkTextView - Scroll - time: 0.11 GtkDrawingArea - Lines - time: 0.24 GtkDrawingArea - Circles - time: 0.22 GtkDrawingArea - Text - time: 0.20 GtkDrawingArea - Pixbufs - time: 0.16 --- Total time: 2.47
Sync time adjustment is 0.0187 msecs.
200000000 reps @ 0.0000 msec (32600000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (32300000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (32700000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (32700000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (32700000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (32600000.0/sec): X protocol NoOperation
600000 reps @ 0.0087 msec (115000.0/sec): QueryPointer 600000 reps @ 0.0092 msec (109000.0/sec): QueryPointer 600000 reps @ 0.0089 msec (113000.0/sec): QueryPointer 600000 reps @ 0.0085 msec (118000.0/sec): QueryPointer 600000 reps @ 0.0081 msec (123000.0/sec): QueryPointer 3000000 trep @ 0.0087 msec (115000.0/sec): QueryPointer
3.8.0-0.rc4.git4.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:40:23 2013
GtkEntry - time: 0.03 GtkComboBox - time: 0.58 GtkComboBoxEntry - time: 0.46 GtkSpinButton - time: 0.14 GtkProgressBar - time: 0.11 GtkToggleButton - time: 0.11 GtkCheckButton - time: 0.04 GtkRadioButton - time: 0.05 GtkTextView - Add text - time: 0.09 GtkTextView - Scroll - time: 0.12 GtkDrawingArea - Lines - time: 0.23 GtkDrawingArea - Circles - time: 0.22 GtkDrawingArea - Text - time: 0.20 GtkDrawingArea - Pixbufs - time: 0.15 --- Total time: 2.52
Sync time adjustment is 0.0280 msecs.
200000000 reps @ 0.0000 msec (27100000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (28800000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (30900000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (30500000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (31200000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (29600000.0/sec): X protocol NoOperation
400000 reps @ 0.0141 msec ( 71200.0/sec): QueryPointer 400000 reps @ 0.0140 msec ( 71500.0/sec): QueryPointer 400000 reps @ 0.0140 msec ( 71300.0/sec): QueryPointer 400000 reps @ 0.0142 msec ( 70200.0/sec): QueryPointer 400000 reps @ 0.0136 msec ( 73800.0/sec): QueryPointer 2000000 trep @ 0.0140 msec ( 71600.0/sec): QueryPointer
3.8.0-0.rc4.git5.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:17:20 2013
GtkEntry - time: 0.09 GtkComboBox - time: 1.27 GtkComboBoxEntry - time: 1.11 GtkSpinButton - time: 0.65 GtkProgressBar - time: 0.54 GtkToggleButton - time: 0.59 GtkCheckButton - time: 0.14 GtkRadioButton - time: 0.17 GtkTextView - Add text - time: 0.19 GtkTextView - Scroll - time: 0.63 GtkDrawingArea - Lines - time: 0.48 GtkDrawingArea - Circles - time: 0.36 GtkDrawingArea - Text - time: 0.20 GtkDrawingArea - Pixbufs - time: 0.50 --- Total time: 6.93
Sync time adjustment is 0.1662 msecs.
200000000 reps @ 0.0000 msec (29400000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29700000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29800000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29800000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29100000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (29600000.0/sec): X protocol NoOperation
200000 reps @ 0.0335 msec ( 29900.0/sec): QueryPointer 200000 reps @ 0.0333 msec ( 30000.0/sec): QueryPointer 200000 reps @ 0.0337 msec ( 29600.0/sec): QueryPointer 200000 reps @ 0.0334 msec ( 30000.0/sec): QueryPointer 200000 reps @ 0.0334 msec ( 29900.0/sec): QueryPointer 1000000 trep @ 0.0335 msec ( 29900.0/sec): QueryPointer
3.8.0-0.rc5.git0.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:50:58 2013
GtkEntry - time: 0.09 GtkComboBox - time: 1.22 GtkComboBoxEntry - time: 1.08 GtkSpinButton - time: 0.64 GtkProgressBar - time: 0.54 GtkToggleButton - time: 0.59 GtkCheckButton - time: 0.13 GtkRadioButton - time: 0.16 GtkTextView - Add text - time: 0.20 GtkTextView - Scroll - time: 0.62 GtkDrawingArea - Lines - time: 0.50 GtkDrawingArea - Circles - time: 0.35 GtkDrawingArea - Text - time: 0.20 GtkDrawingArea - Pixbufs - time: 0.49 --- Total time: 6.82
Sync time adjustment is 0.2343 msecs.
200000000 reps @ 0.0000 msec (29500000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29500000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29600000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29400000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29400000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (29500000.0/sec): X protocol NoOperation
60000 reps @ 0.0963 msec ( 10400.0/sec): QueryPointer 60000 reps @ 0.0931 msec ( 10700.0/sec): QueryPointer 60000 reps @ 0.0850 msec ( 11800.0/sec): QueryPointer 60000 reps @ 0.0935 msec ( 10700.0/sec): QueryPointer 60000 reps @ 0.0665 msec ( 15000.0/sec): QueryPointer 300000 trep @ 0.0869 msec ( 11500.0/sec): QueryPointer
3.8.0-0.rc5.git1.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 10:10:01 2013
GtkEntry - time: 0.10 GtkComboBox - time: 1.57 GtkComboBoxEntry - time: 1.49 GtkSpinButton - time: 0.64 GtkProgressBar - time: 0.55 GtkToggleButton - time: 0.60 GtkCheckButton - time: 0.14 GtkRadioButton - time: 0.17 GtkTextView - Add text - time: 0.20 GtkTextView - Scroll - time: 0.64 GtkDrawingArea - Lines - time: 0.49 GtkDrawingArea - Circles - time: 0.33 GtkDrawingArea - Text - time: 0.19 GtkDrawingArea - Pixbufs - time: 0.55 --- Total time: 7.67
Sync time adjustment is 0.0854 msecs.
200000000 reps @ 0.0000 msec (26100000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (28600000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29500000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29500000.0/sec): X protocol NoOperation 200000000 reps @ 0.0000 msec (29200000.0/sec): X protocol NoOperation 1000000000 trep @ 0.0000 msec (28500000.0/sec): X protocol NoOperation
70000 reps @ 0.0911 msec ( 11000.0/sec): QueryPointer 70000 reps @ 0.0694 msec ( 14400.0/sec): QueryPointer 70000 reps @ 0.0812 msec ( 12300.0/sec): QueryPointer 70000 reps @ 0.0905 msec ( 11000.0/sec): QueryPointer 70000 reps @ 0.0538 msec ( 18600.0/sec): QueryPointer 350000 trep @ 0.0772 msec ( 13000.0/sec): QueryPointer
intel:
x11perf -noop -pointer
3.7.4-204.fc18.x86_64 ---------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 14:49:59 2013
GtkEntry - time: 0.07 GtkComboBox - time: 1.01 GtkComboBoxEntry - time: 0.83 GtkSpinButton - time: 0.17 GtkProgressBar - time: 0.14 GtkToggleButton - time: 0.16 GtkCheckButton - time: 0.07 GtkRadioButton - time: 0.10 GtkTextView - Add text - time: 0.17 GtkTextView - Scroll - time: 0.13 GtkDrawingArea - Lines - time: 1.24 GtkDrawingArea - Circles - time: 0.89 GtkDrawingArea - Text - time: 0.86 GtkDrawingArea - Pixbufs - time: 0.17 --- Total time: 6.01
Sync time adjustment is 0.0731 msecs.
80000000 reps @ 0.0001 msec (14500000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (18200000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (18100000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (18500000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (18300000.0/sec): X protocol NoOperation 400000000 trep @ 0.0001 msec (17400000.0/sec): X protocol NoOperation
300000 reps @ 0.0186 msec ( 53700.0/sec): QueryPointer 300000 reps @ 0.0188 msec ( 53300.0/sec): QueryPointer 300000 reps @ 0.0183 msec ( 54600.0/sec): QueryPointer 300000 reps @ 0.0188 msec ( 53300.0/sec): QueryPointer 300000 reps @ 0.0208 msec ( 48100.0/sec): QueryPointer 1500000 trep @ 0.0191 msec ( 52500.0/sec): QueryPointer
3.8.0-0.rc4.git3.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 14:59:53 2013
GtkEntry - time: 0.06 GtkComboBox - time: 1.16 GtkComboBoxEntry - time: 0.87 GtkSpinButton - time: 0.13 GtkProgressBar - time: 0.12 GtkToggleButton - time: 0.16 GtkCheckButton - time: 0.06 GtkRadioButton - time: 0.10 GtkTextView - Add text - time: 0.17 GtkTextView - Scroll - time: 0.13 GtkDrawingArea - Lines - time: 1.46 GtkDrawingArea - Circles - time: 0.69 GtkDrawingArea - Text - time: 1.04 GtkDrawingArea - Pixbufs - time: 0.21 --- Total time: 6.37
Sync time adjustment is 0.0983 msecs.
100000000 reps @ 0.0001 msec (17800000.0/sec): X protocol NoOperation 100000000 reps @ 0.0001 msec (17700000.0/sec): X protocol NoOperation 100000000 reps @ 0.0001 msec (17400000.0/sec): X protocol NoOperation 100000000 reps @ 0.0001 msec (17700000.0/sec): X protocol NoOperation 100000000 reps @ 0.0001 msec (17500000.0/sec): X protocol NoOperation 500000000 trep @ 0.0001 msec (17600000.0/sec): X protocol NoOperation
300000 reps @ 0.0199 msec ( 50100.0/sec): QueryPointer 300000 reps @ 0.0207 msec ( 48300.0/sec): QueryPointer 300000 reps @ 0.0237 msec ( 42300.0/sec): QueryPointer 300000 reps @ 0.0203 msec ( 49300.0/sec): QueryPointer 300000 reps @ 0.0246 msec ( 40600.0/sec): QueryPointer 1500000 trep @ 0.0218 msec ( 45800.0/sec): QueryPointer
3.8.0-0.rc5.git1.1.fc19.x86_64 ------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 14:38:11 2013
GtkEntry - time: 0.08 GtkComboBox - time: 1.71 GtkComboBoxEntry - time: 1.28 GtkSpinButton - time: 0.18 GtkProgressBar - time: 0.17 GtkToggleButton - time: 0.18 GtkCheckButton - time: 0.07 GtkRadioButton - time: 0.11 GtkTextView - Add text - time: 0.25 GtkTextView - Scroll - time: 0.13 GtkDrawingArea - Lines - time: 1.56 GtkDrawingArea - Circles - time: 2.28 GtkDrawingArea - Text - time: 3.61 GtkDrawingArea - Pixbufs - time: 0.39 --- Total time: 12.00
Sync time adjustment is 0.6224 msecs.
80000000 reps @ 0.0001 msec (15800000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (16000000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (14300000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (15700000.0/sec): X protocol NoOperation 80000000 reps @ 0.0001 msec (16100000.0/sec): X protocol NoOperation 400000000 trep @ 0.0001 msec (15600000.0/sec): X protocol NoOperation
30000 reps @ 0.1975 msec ( 5060.0/sec): QueryPointer 30000 reps @ 0.2022 msec ( 4940.0/sec): QueryPointer 30000 reps @ 0.1993 msec ( 5020.0/sec): QueryPointer 30000 reps @ 0.2016 msec ( 4960.0/sec): QueryPointer 30000 reps @ 0.1998 msec ( 5010.0/sec): QueryPointer 150000 trep @ 0.2001 msec ( 5000.0/sec): QueryPointer
3.8.0-0.rc5.git1.1.fc19.x86_64 slub_debug=- -------------------------------------------
GtkPerf 0.40 - Starting testing: Wed Jan 30 14:45:05 2013
GtkEntry - time: 0.10 GtkComboBox - time: 1.04 GtkComboBoxEntry - time: 0.72 GtkSpinButton - time: 0.16 GtkProgressBar - time: 0.16 GtkToggleButton - time: 0.21 GtkCheckButton - time: 0.07 GtkRadioButton - time: 0.12 GtkTextView - Add text - time: 0.19 GtkTextView - Scroll - time: 0.15 GtkDrawingArea - Lines - time: 1.42 GtkDrawingArea - Circles - time: 1.14 GtkDrawingArea - Text - time: 1.03 GtkDrawingArea - Pixbufs - time: 0.21 --- Total time: 6.73
Sync time adjustment is 0.1575 msecs.
90000000 reps @ 0.0001 msec (17100000.0/sec): X protocol NoOperation 90000000 reps @ 0.0001 msec (17000000.0/sec): X protocol NoOperation 90000000 reps @ 0.0001 msec (16900000.0/sec): X protocol NoOperation 90000000 reps @ 0.0001 msec (17300000.0/sec): X protocol NoOperation 90000000 reps @ 0.0001 msec (17100000.0/sec): X protocol NoOperation 450000000 trep @ 0.0001 msec (17100000.0/sec): X protocol NoOperation
200000 reps @ 0.0497 msec ( 20100.0/sec): QueryPointer 200000 reps @ 0.0476 msec ( 21000.0/sec): QueryPointer 200000 reps @ 0.0474 msec ( 21100.0/sec): QueryPointer 200000 reps @ 0.0469 msec ( 21300.0/sec): QueryPointer 200000 reps @ 0.0463 msec ( 21600.0/sec): QueryPointer 1000000 trep @ 0.0476 msec ( 21000.0/sec): QueryPointer
On Wed, 2013-01-30 at 15:23 -0800, Adam Williamson wrote:
It seems pretty clear from these numbers that slub_debug is the biggest offender for me, according to jwb. I didn't put the results in the chart for some reason, but on the nouveau machine just like the intel one, rc5.git1 with slub_debug=- as a kernel parameter gives a fast gtkperf time - in the 2.4-2.5 range - and 'feels' perfectly fine, that's what I'm running right now.
One thing I should have noted, I think, now I read the mails and see that other options seem to cause I/O sluggishness for other testers: the box I'm using has 16GB of RAM and an SSD. So it's quite likely that I wouldn't perceive I/O sluggishness in regular use unless it got _really_ bad. So my results don't necessarily contradict other people's findings of I/O sluggishness in relation to options other than slub_debug.
kernel@lists.fedoraproject.org