Re: Performance analysis of Linux Kernel Markers 0.20 for 2.6.17

From: dean gaudet
Date: Sun Oct 08 2006 - 15:31:45 EST


On Sat, 30 Sep 2006, Mathieu Desnoyers wrote:

> - Optimized
>
> static int my_open(struct inode *inode, struct file *file)
> {
> 0: 55 push %ebp
> 1: 89 e5 mov %esp,%ebp
> 3: 83 ec 0c sub $0xc,%esp
> MARK(subsys_mark1, "%d %p", 1, NULL);
> 6: b0 00 mov $0x0,%al <-- immediate load 0 in al
> 8: 84 c0 test %al,%al
> a: 75 07 jne 13 <my_open+0x13>

why not replace the mov+test with "xor %eax,%eax" and then change the 0x75
to a 0x74 to change from jne to je when you want to enable the marker?

i.e. disabled:

31 c0 xor %eax,%eax
75 07 jne 13

enabled:

31 c0 xor %eax,%eax
74 07 je 13

it would save 2 bytes, 1 instruction and avoid partial register writes...
and still has the nice property that a single byte store into the code is
required for enable/disable (which sounds like a great property -- i
assume you were deliberately going for that).

i assume there's probably no reason to tie the sequence to eax either --
you could let gcc choose it (or maybe you already do).

-dean
-
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/