Re: [PATCH] tracing: Cleanup the convoluted softirq tracepoints
From: David Daney
Date: Tue Oct 19 2010 - 17:17:04 EST
On 10/19/2010 12:49 PM, Thomas Gleixner wrote:
[...]
So that saves _TWO_ bytes of text and replaces:
- 1e: 83 3d 00 00 00 00 00 cmpl $0x0,0x0(%rip) # 25<test+0x25>
- 25: 74 4d je 74<test+0x74>
+ 1e: e9 00 00 00 00 jmpq 23<test+0x23>
+ 23: eb 4d jmp 72<test+0x72>
So it trades a conditional vs. two jumps ? WTF ??
I thought that jumplabel magic was supposed to get rid of the jump
over the tracing code ? In fact it adds another jump. Whatfor ?
The 'asm goto' construct in GCC-4.5 is deficient in this area.
GCC assumes that all exit paths from an 'asm goto' are equally likely,
so the tracing (or dynamic printk etc.) code is assumed to be hot and is
emitted inline. Since they are inline like this, there are all these
jumps around them and they pollute the I-Cache.
I was looking at fixing it, but I think a true general purpose fix would
require enhancing GCC's grammar to allow specifying of the 'likelyness'
of each exit path from 'asm goto'.
David Daney
Now even worse, when you NOP out the jmpq then your tracepoint is
still not enabled. Brilliant !
Did you guys ever look at the assembly output of that insane shite you
are advertising with lengthy explanations ?
Obviously _NOT_
Come back when you can show me a clean imlementation of all this crap
which reproduces with my jumplabel enabled stock compiler. And please
just send me a patch w/o the blurb.
And sane looks like:
jmpq 2f<---- This gets noped out
1:
mov %r12,%rdi
callq *(%r12)
[whatever cleanup it takes ]
leaveq
retq
2f:
[tracing gunk]
jmp 1b
And further I want to see the tracing gunk in a minimal size so the
net/core/dev.c deinlining does not happen.
Thanks,
tglx
P.S.: It might be helpful and polite if you'd take off your tracing
blinkers from time to time.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/