This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 0/5] Cache code access for disassemble


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]