|
From: Julian S. <js...@ac...> - 2006-08-25 22:44:29
|
> --29272-- Discarding ordered segments -- min vc is [ 1: 3214 ], max vc is [
> 1: 3214 ]
Progress. thread_append_segment() doesn't correctly update the
doubly-linked list of segments associated with a thread, which
causes thread_discard_ordered_segments() to fail to throw away
any segments. The ultra-minimal fix is to add
if (sg->prev != 0)
sg->prev->next = sg;
at the end of thread_append_segment(). With this, I can start
konq in about 1200M, which isn't great, but but it's a big
improvement on not being able to start it in 2600M.
Attached file drd_baseline_diffs.txt contains my complete diffs
vs valgrind-5999-drd-2006-08-14.tar.bz2, and includes this fix.
I also experimented with getting rid of the malloc/free intercepts,
which is done with the Makefile.am patch shown below (followed by
complete rebuild). This reduces konq's memory use to about 160M,
which is much more in line with what I would expect this tool to use.
So the next question is, why doe the malloc/free intercepting
cost ~940MB for konq? Bearing in mind memcheck and massif do
intercepting without a huge space overhead.
Bart: another thing (non-critical): -v makes drd crash for
drd/tests/fp_race:
Suppression requested for range [0xDAF2, 0xFF38038E[ while this has
already been requested for range [0x40161D0, 0x40161D4[.
drd: drd_suppression.c:66 (drd_start_suppression): the 'impossible'
happened.
J
diff -u -r ./ORIGINAL/drd/Makefile.am drd/Makefile.am
--- ./ORIGINAL/drd/Makefile.am 2006-08-14 14:40:44.000000000 +0100
+++ drd/Makefile.am 2006-08-25 23:24:07.000000000 +0100
@@ -2,19 +2,19 @@
noinst_PROGRAMS =
if VG_X86_LINUX
- noinst_PROGRAMS += drd-x86-linux vgpreload_drd-x86-linux.so
+ noinst_PROGRAMS += drd-x86-linux
PLATFORM = X86
endif
if VG_AMD64_LINUX
- noinst_PROGRAMS += drd-amd64-linux vgpreload_drd-amd64-linux.so
+ noinst_PROGRAMS += drd-amd64-linux
PLATFORM = AMD64
endif
if VG_PPC32_LINUX
- noinst_PROGRAMS += drd-ppc32-linux vgpreload_drd-ppc32-linux.so
+ noinst_PROGRAMS += drd-ppc32-linux
PLATFORM = PPC32
endif
if VG_PPC64_LINUX
-noinst_PROGRAMS += drd-ppc64-linux vgpreload_drd-ppc64-linux.so
+noinst_PROGRAMS += drd-ppc64-linux
endif
VGPRELOAD_DRD_SOURCES_COMMON =
|