From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16160 invoked by alias); 2 Jan 2011 07:54:50 -0000 Received: (qmail 16151 invoked by uid 22791); 2 Jan 2011 07:54:50 -0000 X-SWARE-Spam-Status: No, hits=-2.3 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,TW_BJ,T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.44.51) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 02 Jan 2011 07:54:45 +0000 Received: from wpaz17.hot.corp.google.com (wpaz17.hot.corp.google.com [172.24.198.81]) by smtp-out.google.com with ESMTP id p0277eXo026812 for ; Sat, 1 Jan 2011 23:07:40 -0800 Received: from qwj8 (qwj8.prod.google.com [10.241.195.72]) by wpaz17.hot.corp.google.com with ESMTP id p0277c6Y013827 for ; Sat, 1 Jan 2011 23:07:39 -0800 Received: by qwj8 with SMTP id 8so16917075qwj.15 for ; Sat, 01 Jan 2011 23:07:38 -0800 (PST) Received: by 10.224.37.131 with SMTP id x3mr18193999qad.199.1293952058455; Sat, 01 Jan 2011 23:07:38 -0800 (PST) MIME-Version: 1.0 Received: by 10.220.67.222 with HTTP; Sat, 1 Jan 2011 23:07:08 -0800 (PST) In-Reply-To: <201012312336.08222.pedro@codesourcery.com> References: <201012312222.54063.pedro@codesourcery.com> <201012312336.08222.pedro@codesourcery.com> From: Paul Pluzhnikov Date: Sun, 02 Jan 2011 07:54:00 -0000 Message-ID: Subject: Re: JIT interface slowness To: Pedro Alves Cc: Vyacheslav Egorov , gdb@sourceware.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2011-01/txt/msg00000.txt.bz2 On Fri, Dec 31, 2010 at 3:36 PM, Pedro Alves wrote: > On Friday 31 December 2010 23:11:55, Vyacheslav Egorov wrote: >> > If your JIT runs on a separate thread, and pausing just that >> > thread doesn't block all others immediately, you could try >> > running gdb in non-stop mode. >> > >> >> I thought you said that hitting __jit_debug_register_code stops the >> world i.e. stops all threads. > > I did, and it does, in all-stop mode, which is the gdb default > mode. =A0There's a new-ish mode (called the non-stop mode), where > gdb does _not_ stop all your threads whenever a breakpoint is > hit --- only the particular thread that hit the breakpoint. > (There's a chapter about it in the manual). =A0Not all your users > will want to enable this mode. =A0And most frontends don't know > about it either, so, it's not really a "fix" for everyone, I > guess. > >> > What was the cost for a first registrations? >> >> Up to 88 it is < 2ms >> Up to 276 --- < 10ms >> Up to 535 --- < 50ms > >> registered new entry, total 1115 entries [took 333 ms] >> registered new entry, total 1116 entries [took 334 ms] >> registered new entry, total 1117 entries [took 335 ms] >> registered new entry, total 1118 entries [took 336 ms] > > It would be quite interesting to know what causes this. > You should also try a recent snapshot (or cvs head), and > 7.2, if you aren't already. FWIW, when Reid K. was implementing this in GSoC, his use case was Unladen Swallow (http://en.wikipedia.org/wiki/Unladen_Swallow), and I don't think he expected 1K+ separate JITted ELF objects. In jit.c, I see objfile =3D symbol_file_add_from_bfd (nbfd, 0, sai, OBJF_SHARED); And in symfile.c (new_symfile_objfile): else if ((add_flags & SYMFILE_DEFER_BP_RESET) =3D=3D 0) { breakpoint_re_set (); } I think this is going to repeatedly remove and re-insert JIT breakpoint into every added jit ELF, giving O(N*N) runtime, wouldn't it? --=20 Paul Pluzhnikov