From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3689 invoked by alias); 10 Oct 2006 13:58:19 -0000 Received: (qmail 3682 invoked by uid 22791); 10 Oct 2006 13:58:19 -0000 X-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_00,FORGED_RCVD_HELO X-Spam-Check-By: sourceware.org Received: from tomts22.bellnexxia.net (HELO tomts22-srv.bellnexxia.net) (209.226.175.184) by sourceware.org (qpsmtpd/0.31) with ESMTP; Tue, 10 Oct 2006 13:58:13 +0000 Received: from krystal.dyndns.org ([67.68.205.82]) by tomts22-srv.bellnexxia.net (InterMail vM.5.01.06.13 201-253-122-130-113-20050324) with ESMTP id <20061010135811.RUEQ10262.tomts22-srv.bellnexxia.net@krystal.dyndns.org> for ; Tue, 10 Oct 2006 09:58:11 -0400 Received: from localhost (localhost [127.0.0.1]) (uid 1000) by krystal.dyndns.org with local; Tue, 10 Oct 2006 09:17:29 -0400 id 001C2492.452B9D69.000055F3 Date: Tue, 10 Oct 2006 13:58:00 -0000 From: Mathieu Desnoyers To: dean gaudet Cc: Martin Bligh , "Frank Ch. Eigler" , Masami Hiramatsu , prasanna@in.ibm.com, Andrew Morton , Ingo Molnar , Paul Mundt , linux-kernel , Jes Sorensen , Tom Zanussi , Richard J Moore , Michel Dagenais , Christoph Hellwig , Greg Kroah-Hartman , Thomas Gleixner , William Cohen , ltt-dev@shafik.org, systemtap@sources.redhat.com, Alan Cox , Jeremy Fitzhardinge , Karim Yaghmour , Pavel Machek , Joe Perches , "Randy.Dunlap" , "Jose R. Santos" Subject: Re: Performance analysis of Linux Kernel Markers 0.20 for 2.6.17 Message-ID: <20061010131729.GC6200@Krystal> References: <20060930180157.GA25761@Krystal> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline In-Reply-To: X-Editor: vi X-Info: http://krystal.dyndns.org:8080 X-Operating-System: Linux/2.4.32-grsec (i686) X-Uptime: 09:12:58 up 48 days, 10:21, 4 users, load average: 0.22, 0.92, 1.18 User-Agent: Mutt/1.5.13 (2006-08-11) X-IsSubscribed: yes Mailing-List: contact systemtap-help@sourceware.org; run by ezmlm Precedence: bulk List-Subscribe: List-Post: List-Help: , Sender: systemtap-owner@sourceware.org X-SW-Source: 2006-q4/txt/msg00057.txt.bz2 * dean gaudet (dean@arctic.org) wrote: > 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 > > 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). > Hi dean, Yes, good idea. I effectively did the 1 byte write to make sure it could be coherent for any code alignment on the machine. The only problem with modifying the jne into a je is this : How can we take a pointer to this assembly instruction when it is generated by gcc ? We can always search for an instruction pattern after the inline assembly, but we have no guarantee that gcc will not put any code between the inline asm and the actual jne. Mathieu OpenPGP public key: http://krystal.dyndns.org:8080/key/compudj.gpg Key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68