You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
1
(16) |
2
(23) |
3
(15) |
|
4
(19) |
5
(21) |
6
(27) |
7
(18) |
8
(17) |
9
(15) |
10
(11) |
|
11
(9) |
12
(18) |
13
(26) |
14
(28) |
15
(26) |
16
(20) |
17
(27) |
|
18
(16) |
19
(40) |
20
(2) |
21
(11) |
22
(27) |
23
(24) |
24
(16) |
|
25
(10) |
26
(12) |
27
(16) |
28
(7) |
29
(6) |
30
(15) |
31
(5) |
|
From: <sv...@va...> - 2005-12-25 06:34:15
|
Author: njn
Date: 2005-12-25 06:34:04 +0000 (Sun, 25 Dec 2005)
New Revision: 5438
Log:
Merge in r5435 from COMPVBITS. Also added a note to
docs/internals/performance.txt about it.
Modified:
trunk/coregrind/m_execontext.c
trunk/coregrind/m_stacktrace.c
trunk/docs/internals/performance.txt
trunk/include/pub_tool_stacktrace.h
Modified: trunk/coregrind/m_execontext.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_execontext.c 2005-12-25 06:30:34 UTC (rev 5437)
+++ trunk/coregrind/m_execontext.c 2005-12-25 06:34:04 UTC (rev 5438)
@@ -46,7 +46,8 @@
=20
struct _ExeContext {
struct _ExeContext * next;
- /* Variable-length array. The size is VG_(clo_backtrace_size); at
+ UInt n_ips;
+ /* Variable-length array. The size is 'n_ips'; at
least 1, at most VG_DEEPEST_BACKTRACE. [0] is the current IP,
[1] is its caller, [2] is the caller of [1], etc. */
Addr ips[0];
@@ -126,38 +127,42 @@
/* Print an ExeContext. */
void VG_(pp_ExeContext) ( ExeContext* ec )
{
- VG_(pp_StackTrace)( ec->ips, VG_(clo_backtrace_size) );
+ VG_(pp_StackTrace)( ec->ips, ec->n_ips );
}
=20
=20
/* Compare two ExeContexts, comparing all callers. */
Bool VG_(eq_ExeContext) ( VgRes res, ExeContext* e1, ExeContext* e2 )
{
+ Int i;
+
if (e1 =3D=3D NULL || e2 =3D=3D NULL)=20
return False;
+
+ // Must be at least one address in each trace.
+ tl_assert(e1->n_ips >=3D 1 && e2->n_ips >=3D 1);
+
switch (res) {
case Vg_LowRes:
/* Just compare the top two callers. */
ec_cmp2s++;
- if (e1->ips[0] !=3D e2->ips[0]) return False;
-
- if (VG_(clo_backtrace_size) < 2) return True;
- if (e1->ips[1] !=3D e2->ips[1]) return False;
+ for (i =3D 0; i < 2; i++) {
+ if ( (e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return True;
+ if ( (e1->n_ips <=3D i) && !(e2->n_ips <=3D i)) return False;
+ if (!(e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return False;
+ if (e1->ips[i] !=3D e2->ips[i]) return False;
+ }
return True;
=20
case Vg_MedRes:
/* Just compare the top four callers. */
ec_cmp4s++;
- if (e1->ips[0] !=3D e2->ips[0]) return False;
-
- if (VG_(clo_backtrace_size) < 2) return True;
- if (e1->ips[1] !=3D e2->ips[1]) return False;
-
- if (VG_(clo_backtrace_size) < 3) return True;
- if (e1->ips[2] !=3D e2->ips[2]) return False;
-
- if (VG_(clo_backtrace_size) < 4) return True;
- if (e1->ips[3] !=3D e2->ips[3]) return False;
+ for (i =3D 0; i < 4; i++) {
+ if ( (e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return True;
+ if ( (e1->n_ips <=3D i) && !(e2->n_ips <=3D i)) return False;
+ if (!(e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return False;
+ if (e1->ips[i] !=3D e2->ips[i]) return False;
+ }
return True;
=20
case Vg_HighRes:
@@ -188,18 +193,20 @@
UWord hash;
ExeContext* new_ec;
ExeContext* list;
+ UInt n_ips;
=20
init_ExeContext_storage();
- vg_assert(VG_(clo_backtrace_size) >=3D 1=20
- && VG_(clo_backtrace_size) <=3D VG_DEEPEST_BACKTRACE);
+ vg_assert(VG_(clo_backtrace_size) >=3D 1 &&
+ VG_(clo_backtrace_size) <=3D VG_DEEPEST_BACKTRACE);
=20
- VG_(get_StackTrace)( tid, ips, VG_(clo_backtrace_size) );
+ n_ips =3D VG_(get_StackTrace)( tid, ips, VG_(clo_backtrace_size) );
+ tl_assert(n_ips >=3D 1);
=20
/* Now figure out if we've seen this one before. First hash it so
as to determine the list number. */
=20
hash =3D 0;
- for (i =3D 0; i < VG_(clo_backtrace_size); i++) {
+ for (i =3D 0; i < n_ips; i++) {
hash ^=3D ips[i];
hash =3D (hash << 29) | (hash >> 3);
}
@@ -215,7 +222,7 @@
if (list =3D=3D NULL) break;
ec_searchcmps++;
same =3D True;
- for (i =3D 0; i < VG_(clo_backtrace_size); i++) {
+ for (i =3D 0; i < n_ips; i++) {
if (list->ips[i] !=3D ips[i]) {
same =3D False;
break;=20
@@ -234,13 +241,14 @@
ec_totstored++;
=20
new_ec =3D VG_(arena_malloc)( VG_AR_EXECTXT,=20
- sizeof(struct _ExeContext *)=20
- + VG_(clo_backtrace_size) * sizeof(Addr) =
);
+ sizeof(struct _ExeContext)=20
+ + n_ips * sizeof(Addr) );
=20
- for (i =3D 0; i < VG_(clo_backtrace_size); i++)
+ for (i =3D 0; i < n_ips; i++)
new_ec->ips[i] =3D ips[i];
=20
- new_ec->next =3D ec_list[hash];
+ new_ec->n_ips =3D n_ips;
+ new_ec->next =3D ec_list[hash];
ec_list[hash] =3D new_ec;
=20
return new_ec;
Modified: trunk/coregrind/m_stacktrace.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_stacktrace.c 2005-12-25 06:30:34 UTC (rev 5437)
+++ trunk/coregrind/m_stacktrace.c 2005-12-25 06:34:04 UTC (rev 5438)
@@ -65,12 +65,9 @@
vg_assert(sizeof(Addr) =3D=3D sizeof(void*));
=20
/* Snaffle IPs from the client's stack into ips[0 .. n_ips-1],
- putting zeroes in when the trail goes cold, which we guess to be
+ stopping when the trail goes cold, which we guess to be
when FP is not a reasonable stack location. */
=20
- for (i =3D 0; i < n_ips; i++)
- ips[i] =3D 0;
-
// JRS 2002-sep-17: hack, to round up fp_max to the end of the
// current page, at least. Dunno if it helps.
// NJN 2002-sep-17: seems to -- stack traces look like 1.0.X again
Modified: trunk/docs/internals/performance.txt
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/docs/internals/performance.txt 2005-12-25 06:30:34 UTC (rev 543=
7)
+++ trunk/docs/internals/performance.txt 2005-12-25 06:34:04 UTC (rev 543=
8)
@@ -26,6 +26,9 @@
- Nick reduced the iteration count of the loop in swizzle() from 20 to 5=
,
which gave almost identical results while saving 2% in perf/tinycc and=
10%
in perf/heap on a 3GHz Prescott P4.
+- Nick changed ExeContext gathering to not record/save extra zeroes at t=
he
+ end. Saved 7% on perf/heap with --num-callers=3D50, and about 1% on
+ perf/tinycc.
=20
COMPVBITS branch:
- Nick converted to compress V bits, initial version saved 0--5% on most
Modified: trunk/include/pub_tool_stacktrace.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/include/pub_tool_stacktrace.h 2005-12-25 06:30:34 UTC (rev 5437=
)
+++ trunk/include/pub_tool_stacktrace.h 2005-12-25 06:34:04 UTC (rev 5438=
)
@@ -36,7 +36,8 @@
=20
// Walks the stack to get instruction pointers from the top stack frames=
for
// thread 'tid'. Maximum of 'n_ips' addresses put into 'ips'; 0 is the=
top
-// of the stack, 1 is its caller, etc.
+// of the stack, 1 is its caller, etc. Everything from ips[n_ips] onwar=
ds
+// is undefined and should not be read.
extern UInt VG_(get_StackTrace) ( ThreadId tid, StackTrace ips, UInt n_i=
ps );
=20
// Apply a function to every element in the StackTrace. The parameter '=
n'
|
|
From: <sv...@va...> - 2005-12-25 06:30:37
|
Author: njn
Date: 2005-12-25 06:30:34 +0000 (Sun, 25 Dec 2005)
New Revision: 5437
Log:
Update for recent change to OSet interface.
Modified:
trunk/memcheck/tests/oset_test.c
Modified: trunk/memcheck/tests/oset_test.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/memcheck/tests/oset_test.c 2005-12-25 06:27:51 UTC (rev 5436)
+++ trunk/memcheck/tests/oset_test.c 2005-12-25 06:30:34 UTC (rev 5437)
@@ -212,7 +212,7 @@
return buf;
}
=20
-static Int blockCmp(void* vkey, void* velem)
+static Word blockCmp(void* vkey, void* velem)
{
Addr key =3D *(Addr*)vkey;
Block* elem =3D (Block*)velem;
|
|
From: <sv...@va...> - 2005-12-25 06:27:54
|
Author: njn
Date: 2005-12-25 06:27:51 +0000 (Sun, 25 Dec 2005)
New Revision: 5436
Log:
add extra note about tinycc
Modified:
trunk/perf/README
Modified: trunk/perf/README
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/perf/README 2005-12-25 06:25:27 UTC (rev 5435)
+++ trunk/perf/README 2005-12-25 06:27:51 UTC (rev 5436)
@@ -58,6 +58,8 @@
Fabrice Bellard's TinyCC compiling itself multiple times.
- Strengths: A real program, lots of code (top 100 blocks only account=
for
47% of execution), involves large irregular data structur=
es
- (presumably, since it's a compiler).
+ (presumably, since it's a compiler). Does lots of
+ malloc/free calls and so changes that make a big improvem=
ent
+ to perf/heap typically cause a small improvement.
- Weaknesses None, really, it's a good benchmark.
=20
|
|
From: <sv...@va...> - 2005-12-25 06:25:33
|
Author: njn
Date: 2005-12-25 06:25:27 +0000 (Sun, 25 Dec 2005)
New Revision: 5435
Log:
Made ExeContext gathering more efficient. Previously we were getting as
many code addresses as possible, and then filling the rest of the array (=
up
to VG_(clo_backtrace_size)) with zeroes. These zero entries were then
included in the hashing, and comparisons, and space was allocated for the=
m
in saved ExeContexts.
By not putting in the zeroes, not doing any hashing/comparisons of them, =
and
not storing them, we see speed-ups for perf/heap of 5% with
--num-callers=3D12 and 7% for --num-callers=3D50, and about 1.5% for tiny=
cc.
The amount of memory for ExeContexts also drops, saving around 500KB for
tinycc with --num-callers=3D50.
I also changed the allocation of each ExeContext to use "sizeof(struct
_ExeContext)" instead of "sizeof(struct _ExeContext *)". It worked ok
up until now because the struct only contained a single pointer in the
non-variable-sized part, but it was an accident waiting to happen when
struct _ExeContext changed (and indeed did happen to me when I added
'n_ips' to the struct).
Modified:
branches/COMPVBITS/coregrind/m_execontext.c
branches/COMPVBITS/coregrind/m_stacktrace.c
branches/COMPVBITS/include/pub_tool_stacktrace.h
Modified: branches/COMPVBITS/coregrind/m_execontext.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/COMPVBITS/coregrind/m_execontext.c 2005-12-25 03:33:12 UTC (=
rev 5434)
+++ branches/COMPVBITS/coregrind/m_execontext.c 2005-12-25 06:25:27 UTC (=
rev 5435)
@@ -47,7 +47,8 @@
=20
struct _ExeContext {
struct _ExeContext * next;
- /* Variable-length array. The size is VG_(clo_backtrace_size); at
+ UInt n_ips;
+ /* Variable-length array. The size is 'n_ips'; at
least 1, at most VG_DEEPEST_BACKTRACE. [0] is the current IP,
[1] is its caller, [2] is the caller of [1], etc. */
Addr ips[0];
@@ -127,38 +128,42 @@
/* Print an ExeContext. */
void VG_(pp_ExeContext) ( ExeContext* ec )
{
- VG_(pp_StackTrace)( ec->ips, VG_(clo_backtrace_size) );
+ VG_(pp_StackTrace)( ec->ips, ec->n_ips );
}
=20
=20
/* Compare two ExeContexts, comparing all callers. */
Bool VG_(eq_ExeContext) ( VgRes res, ExeContext* e1, ExeContext* e2 )
{
+ Int i;
+
if (e1 =3D=3D NULL || e2 =3D=3D NULL)=20
return False;
+
+ // Must be at least one address in each trace.
+ tl_assert(e1->n_ips >=3D 1 && e2->n_ips >=3D 1);
+
switch (res) {
case Vg_LowRes:
/* Just compare the top two callers. */
ec_cmp2s++;
- if (e1->ips[0] !=3D e2->ips[0]) return False;
-
- if (VG_(clo_backtrace_size) < 2) return True;
- if (e1->ips[1] !=3D e2->ips[1]) return False;
+ for (i =3D 0; i < 2; i++) {
+ if ( (e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return True;
+ if ( (e1->n_ips <=3D i) && !(e2->n_ips <=3D i)) return False;
+ if (!(e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return False;
+ if (e1->ips[i] !=3D e2->ips[i]) return False;
+ }
return True;
=20
case Vg_MedRes:
/* Just compare the top four callers. */
ec_cmp4s++;
- if (e1->ips[0] !=3D e2->ips[0]) return False;
-
- if (VG_(clo_backtrace_size) < 2) return True;
- if (e1->ips[1] !=3D e2->ips[1]) return False;
-
- if (VG_(clo_backtrace_size) < 3) return True;
- if (e1->ips[2] !=3D e2->ips[2]) return False;
-
- if (VG_(clo_backtrace_size) < 4) return True;
- if (e1->ips[3] !=3D e2->ips[3]) return False;
+ for (i =3D 0; i < 4; i++) {
+ if ( (e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return True;
+ if ( (e1->n_ips <=3D i) && !(e2->n_ips <=3D i)) return False;
+ if (!(e1->n_ips <=3D i) && (e2->n_ips <=3D i)) return False;
+ if (e1->ips[i] !=3D e2->ips[i]) return False;
+ }
return True;
=20
case Vg_HighRes:
@@ -189,20 +194,22 @@
UWord hash;
ExeContext* new_ec;
ExeContext* list;
+ UInt n_ips;
=20
VGP_PUSHCC(VgpExeContext);
=20
init_ExeContext_storage();
- vg_assert(VG_(clo_backtrace_size) >=3D 1=20
- && VG_(clo_backtrace_size) <=3D VG_DEEPEST_BACKTRACE);
+ vg_assert(VG_(clo_backtrace_size) >=3D 1 &&
+ VG_(clo_backtrace_size) <=3D VG_DEEPEST_BACKTRACE);
=20
- VG_(get_StackTrace)( tid, ips, VG_(clo_backtrace_size) );
+ n_ips =3D VG_(get_StackTrace)( tid, ips, VG_(clo_backtrace_size) );
+ tl_assert(n_ips >=3D 1);
=20
/* Now figure out if we've seen this one before. First hash it so
as to determine the list number. */
=20
hash =3D 0;
- for (i =3D 0; i < VG_(clo_backtrace_size); i++) {
+ for (i =3D 0; i < n_ips; i++) {
hash ^=3D ips[i];
hash =3D (hash << 29) | (hash >> 3);
}
@@ -218,7 +225,7 @@
if (list =3D=3D NULL) break;
ec_searchcmps++;
same =3D True;
- for (i =3D 0; i < VG_(clo_backtrace_size); i++) {
+ for (i =3D 0; i < n_ips; i++) {
if (list->ips[i] !=3D ips[i]) {
same =3D False;
break;=20
@@ -238,13 +245,14 @@
ec_totstored++;
=20
new_ec =3D VG_(arena_malloc)( VG_AR_EXECTXT,=20
- sizeof(struct _ExeContext *)=20
- + VG_(clo_backtrace_size) * sizeof(Addr) =
);
+ sizeof(struct _ExeContext)=20
+ + n_ips * sizeof(Addr) );
=20
- for (i =3D 0; i < VG_(clo_backtrace_size); i++)
+ for (i =3D 0; i < n_ips; i++)
new_ec->ips[i] =3D ips[i];
=20
- new_ec->next =3D ec_list[hash];
+ new_ec->n_ips =3D n_ips;
+ new_ec->next =3D ec_list[hash];
ec_list[hash] =3D new_ec;
=20
VGP_POPCC(VgpExeContext);
Modified: branches/COMPVBITS/coregrind/m_stacktrace.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/COMPVBITS/coregrind/m_stacktrace.c 2005-12-25 03:33:12 UTC (=
rev 5434)
+++ branches/COMPVBITS/coregrind/m_stacktrace.c 2005-12-25 06:25:27 UTC (=
rev 5435)
@@ -68,12 +68,9 @@
vg_assert(sizeof(Addr) =3D=3D sizeof(void*));
=20
/* Snaffle IPs from the client's stack into ips[0 .. n_ips-1],
- putting zeroes in when the trail goes cold, which we guess to be
+ stopping when the trail goes cold, which we guess to be
when FP is not a reasonable stack location. */
=20
- for (i =3D 0; i < n_ips; i++)
- ips[i] =3D 0;
-
// JRS 2002-sep-17: hack, to round up fp_max to the end of the
// current page, at least. Dunno if it helps.
// NJN 2002-sep-17: seems to -- stack traces look like 1.0.X again
Modified: branches/COMPVBITS/include/pub_tool_stacktrace.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/COMPVBITS/include/pub_tool_stacktrace.h 2005-12-25 03:33:12 =
UTC (rev 5434)
+++ branches/COMPVBITS/include/pub_tool_stacktrace.h 2005-12-25 06:25:27 =
UTC (rev 5435)
@@ -36,7 +36,8 @@
=20
// Walks the stack to get instruction pointers from the top stack frames=
for
// thread 'tid'. Maximum of 'n_ips' addresses put into 'ips'; 0 is the=
top
-// of the stack, 1 is its caller, etc.
+// of the stack, 1 is its caller, etc. Everything from ips[n_ips] onwar=
ds
+// is undefined and should not be read.
extern UInt VG_(get_StackTrace) ( ThreadId tid, StackTrace ips, UInt n_i=
ps );
=20
// Apply a function to every element in the StackTrace. The parameter '=
n'
|
|
From: <js...@ac...> - 2005-12-25 03:55:04
|
Nightly build on phoenix ( SuSE 10.0 ) started at 2005-12-25 03:30:02 GMT Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 208 tests, 5 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out vex source tree ... done Building vex ... done Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 208 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sun Dec 25 03:43:01 2005 --- new.short Sun Dec 25 03:55:20 2005 *************** *** 10,14 **** ! == 208 tests, 6 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) - memcheck/tests/mempool (stderr) memcheck/tests/stack_switch (stderr) --- 10,13 ---- ! == 208 tests, 5 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/stack_switch (stderr) |
|
From: Tom H. <to...@co...> - 2005-12-25 03:43:12
|
Nightly build on dunsmere ( athlon, Fedora Core 4 ) started at 2005-12-25 03:30:05 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 210 tests, 7 stderr failures, 1 stdout failure ================= memcheck/tests/leak-tree (stderr) memcheck/tests/mempool (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) none/tests/mremap2 (stdout) none/tests/x86/faultstatus (stderr) none/tests/x86/int (stderr) |
|
From: <sv...@va...> - 2005-12-25 03:33:22
|
Author: njn Date: 2005-12-25 03:33:12 +0000 (Sun, 25 Dec 2005) New Revision: 5434 Log: update Modified: trunk/docs/internals/performance.txt Modified: trunk/docs/internals/performance.txt =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- trunk/docs/internals/performance.txt 2005-12-25 02:53:02 UTC (rev 543= 3) +++ trunk/docs/internals/performance.txt 2005-12-25 03:33:12 UTC (rev 543= 4) @@ -23,6 +23,9 @@ - Julian changed findSb to slowly move superblocks to the front of the l= ist as they were accessed. This sped up perf/heap by 25--50%, and some bi= g programs (eg. ktuberling) programs by a couple of percent. +- Nick reduced the iteration count of the loop in swizzle() from 20 to 5= , + which gave almost identical results while saving 2% in perf/tinycc and= 10% + in perf/heap on a 3GHz Prescott P4. =20 COMPVBITS branch: - Nick converted to compress V bits, initial version saved 0--5% on most |
|
From: <sv...@va...> - 2005-12-25 02:53:08
|
Author: njn
Date: 2005-12-25 02:53:02 +0000 (Sun, 25 Dec 2005)
New Revision: 5433
Log:
This was meant to be merged in the from the trunk as part of a previous
merging.
Modified:
branches/COMPVBITS/coregrind/m_main.c
Modified: branches/COMPVBITS/coregrind/m_main.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/COMPVBITS/coregrind/m_main.c 2005-12-25 02:49:45 UTC (rev 54=
32)
+++ branches/COMPVBITS/coregrind/m_main.c 2005-12-25 02:53:02 UTC (rev 54=
33)
@@ -66,6 +66,7 @@
=20
static void print_all_stats ( void )
{
+ VG_(print_translation_stats)();
VG_(print_tt_tc_stats)();
VG_(print_scheduler_stats)();
VG_(print_ExeContext_stats)();
|
|
From: <sv...@va...> - 2005-12-25 02:49:47
|
Author: njn
Date: 2005-12-25 02:49:45 +0000 (Sun, 25 Dec 2005)
New Revision: 5432
Log:
Merge r5431 (swizzle() speedup) from trunk.
Modified:
branches/COMPVBITS/coregrind/m_mallocfree.c
Modified: branches/COMPVBITS/coregrind/m_mallocfree.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- branches/COMPVBITS/coregrind/m_mallocfree.c 2005-12-25 02:47:12 UTC (=
rev 5431)
+++ branches/COMPVBITS/coregrind/m_mallocfree.c 2005-12-25 02:49:45 UTC (=
rev 5432)
@@ -696,7 +696,12 @@
if (p_best =3D=3D NULL) return;
=20
pn =3D pp =3D p_best;
- for (i =3D 0; i < 20; i++) {
+
+ // This loop bound was 20 for a long time, but experiments showed tha=
t
+ // reducing it to 10 gave the same result in all the tests, and 5 got=
the
+ // same result in 85--100% of cases. And it's called often enough to=
be
+ // noticeable in programs that allocated a lot.
+ for (i =3D 0; i < 5; i++) {
pn =3D get_next_b(pn);
pp =3D get_prev_b(pp);
if (pn < p_best) p_best =3D pn;
|
|
From: <sv...@va...> - 2005-12-25 02:47:19
|
Author: njn
Date: 2005-12-25 02:47:12 +0000 (Sun, 25 Dec 2005)
New Revision: 5431
Log:
A minor performance improvement -- make swizzle() faster.
Modified:
trunk/coregrind/m_mallocfree.c
Modified: trunk/coregrind/m_mallocfree.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/coregrind/m_mallocfree.c 2005-12-24 16:34:49 UTC (rev 5430)
+++ trunk/coregrind/m_mallocfree.c 2005-12-25 02:47:12 UTC (rev 5431)
@@ -704,7 +704,12 @@
if (p_best =3D=3D NULL) return;
=20
pn =3D pp =3D p_best;
- for (i =3D 0; i < 20; i++) {
+
+ // This loop bound was 20 for a long time, but experiments showed tha=
t
+ // reducing it to 10 gave the same result in all the tests, and 5 got=
the
+ // same result in 85--100% of cases. And it's called often enough to=
be
+ // noticeable in programs that allocated a lot.
+ for (i =3D 0; i < 5; i++) {
pn =3D get_next_b(pn);
pp =3D get_prev_b(pp);
if (pn < p_best) p_best =3D pn;
|