This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 0/5] Cache code access for disassemble
- From: Yao Qi <yao at codesourcery dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Wed, 23 Oct 2013 16:27:30 +0800
- Subject: [PATCH 0/5] Cache code access for disassemble
- Authentication-results: sourceware.org; auth=none
Hi,
In general, this patch series improve the speed of disassemble in
remote debugging, by means of caching code access.
When I think about code cache, I realize not only code cache but
also target_dcache can be per-address-space. OTOH, when the patch
'[RFA] Use data cache for stack accesses' was reviewed, the
intention of getting target_dcache per-address-space was mentioned, but
it was not done because we don't have an address_space structure at
that moment (2009-07). 'struct address_space' was added by
multi-executable patch in 2009-09. Patch #1 adds REGISTRY for
'struct address_space' and patch #2 get variable 'target_dcache'
per-address-space, and add a 'struct target_dcache' to hold all
caches, which paves a way for code-cache.
Patch #3 adds most of the stuff to cache code access, similar to
the code cache stack access. Patch #4 is to use target_read_code
to read code when doing disassembly. Patch #5 is the doc and news
entry (mostly copied from 'set stack-cache'.).
The performance is measured by disassembling three large functions
in GDB (such as evaluate_subexp_standard) twice, and here is the
result I got:
The number of 'm' packets:
Original Patched
83054 1257
74240 844
74240 844
Original Patched
disassemble cpu_time 3.48 0.56
disassemble cpu_time 2.95 0.36
disassemble cpu_time 1.78 0.47
disassemble wall_time 6.07428908348 0.628926992416
disassemble wall_time 5.23267793655 0.413200855255
disassemble wall_time 3.2379360199 0.554491043091
disassemble vmsize 61152 61204
disassemble vmsize 61544 61596
disassemble vmsize 61544 61596
Regression tested on x86_64-linux. I also tried using target_read_code
for skip_prologue, but the change is quite specific to each target
(using target_read_code in *-tdep.c files for reading code). I plan to
do it in next step.
*** BLURB HERE ***
Yao Qi (5):
Add REGISTRY for struct address_space.
Associate target_dcache to address_space.
set/show code-cache
Use target_read_code in disassemble.
set/show code-cache NEWS and doc
gdb/NEWS | 6 ++
gdb/disasm.c | 2 +-
gdb/doc/gdb.texinfo | 10 ++++
gdb/progspace.c | 14 ++---
gdb/progspace.h | 22 +++++++-
gdb/target.c | 148 +++++++++++++++++++++++++++++++++++++++++++++------
gdb/target.h | 5 ++
7 files changed, 180 insertions(+), 27 deletions(-)
--
1.7.7.6