From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11364 invoked by alias); 29 Nov 2013 14:27:04 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 11341 invoked by uid 89); 29 Nov 2013 14:27:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_50,RDNS_NONE,T_FROM_12LTRDOM,URIBL_BLOCKED autolearn=no version=3.3.2 X-HELO: relay1.mentorg.com Received: from Unknown (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 29 Nov 2013 14:26:04 +0000 Received: from svr-orw-fem-01.mgc.mentorg.com ([147.34.98.93]) by relay1.mentorg.com with esmtp id 1VmP0u-0004Ud-Mc from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Fri, 29 Nov 2013 06:25:48 -0800 Received: from SVR-ORW-FEM-04.mgc.mentorg.com ([147.34.97.41]) by svr-orw-fem-01.mgc.mentorg.com over TLS secured channel with Microsoft SMTPSVC(6.0.3790.4675); Fri, 29 Nov 2013 06:25:48 -0800 Received: from qiyao.dyndns.org.dyndns.org (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.2.247.3; Fri, 29 Nov 2013 06:25:47 -0800 From: Yao Qi To: Subject: [PATCH 0/3] Use target_read_code in skip_prologue Date: Fri, 29 Nov 2013 14:27:00 -0000 Message-ID: <1385735051-27558-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2013-11/txt/msg00906.txt.bz2 GDB is able to cache memory accesses requested in target_read_code, so target_read_code is more efficient than general target_read_memory. This patch series use target_read_code and its variant in the skip_prologue related code, and it improves the performance when doing 'b foo' (foo is a function) in remote debugging. Nowadays, when we set a breakpoint on function f1, GDB will fetch the code in f1 to determine the start of the function body (say skip the prologue), it requests read from target many times on x86, see below, (gdb) b f1 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,e#9c...Packet received: 5589e5b8000000005dc35589e583 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,5#6e...Packet received: e5b8000000 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,5#6e...Packet received: e5b8000000 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,1#6a...Packet received: e5 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c4,e#9c...Packet received: 5589e5b8000000005dc35589e583 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,5#6e...Packet received: e5b8000000 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,5#6e...Packet received: e5b8000000 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c5,1#69...Packet received: 89 Sending packet: $m80483c6,1#6a...Packet received: e5 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c7,1#6b...Packet received: b8 Sending packet: $m80483c4,1#68...Packet received: 55 Sending packet: $m80483c7,1#6b...Packet received: b8 these address are identical or close to, so caching should be useful here. With this patch applied, the number of RSP 'm' packets are reduced, (gdb) b f1 Sending packet: $m80483c0,40#97...Packet received: ffd0c9c35589e5b8000000005dc35589e583ec188b450c8945f88b45108945fc8b45148945f08b45188945f48b45f80345088945ecdb45ecdc45f0d97dea0fb7 Sending packet: $m80483c7,1#6b...Packet received: b8 Note that once we use target_read_code in breakpoint.c, the last 'm' will disappear too. The changes are quite specific to each port, because skip_prologue is port specific. Patch #3 adds a perf test case. We run it on x86-linux and get the result below. Base Patched skip-prologue cpu_time 1 1.77 0.08 skip-prologue cpu_time 2 2.66 0.09 skip-prologue cpu_time 3 2.09 0.1 skip-prologue wall_time 1 3.79094099998 0.138980865479 skip-prologue wall_time 2 5.69234204292 0.132542133331 skip-prologue wall_time 3 4.39887309074 0.157964944839 skip-prologue vmsize 1 16336 16336 skip-prologue vmsize 2 16336 16336 skip-prologue vmsize 3 16336 16336 *** BLURB HERE *** Yao Qi (3): Use target_read_code in skip_prologue (i386) skip_prolgoue (amd64) Perf test case: skip-prologue gdb/amd64-tdep.c | 10 ++-- gdb/corefile.c | 32 +++++++++++++ gdb/gdbcore.h | 17 +++++++ gdb/i386-tdep.c | 71 +++++++++++++++--------------- gdb/testsuite/gdb.perf/skip-prologue.c | 48 ++++++++++++++++++++ gdb/testsuite/gdb.perf/skip-prologue.exp | 59 +++++++++++++++++++++++++ gdb/testsuite/gdb.perf/skip-prologue.py | 39 ++++++++++++++++ 7 files changed, 236 insertions(+), 40 deletions(-) create mode 100644 gdb/testsuite/gdb.perf/skip-prologue.c create mode 100644 gdb/testsuite/gdb.perf/skip-prologue.exp create mode 100644 gdb/testsuite/gdb.perf/skip-prologue.py -- 1.7.7.6