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
(12) |
|
2
(6) |
3
(13) |
4
(9) |
5
(6) |
6
(8) |
7
(5) |
8
(5) |
|
9
(15) |
10
(18) |
11
(18) |
12
(18) |
13
(7) |
14
(11) |
15
(6) |
|
16
(12) |
17
(28) |
18
(15) |
19
(12) |
20
(17) |
21
(23) |
22
(10) |
|
23
(9) |
24
(11) |
25
(7) |
26
(21) |
27
(12) |
28
(6) |
29
(6) |
|
30
(8) |
|
|
|
|
|
|
|
From: <sv...@va...> - 2007-09-20 22:42:02
|
Author: njn
Date: 2007-09-20 23:42:04 +0100 (Thu, 20 Sep 2007)
New Revision: 6880
Log:
Show more information with -v. In particular, show which snapshots get
culled and which don't.
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 22:27:21 UTC (rev 6879)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 22:42:04 UTC (rev 6880)
@@ -925,6 +925,13 @@
}
}
+static void VERB_snapshot(Char* prefix, Int i)
+{
+ Char* suffix = ( is_detailed_snapshot(&snapshots[i]) ? " (detailed)" : "");
+ VERB("%s snapshot %3d (t = %lld %s)%s", prefix, i,
+ snapshots[i].time, TimeUnit_to_string(clo_time_unit), suffix);
+}
+
// Weed out half the snapshots; we choose those that represent the smallest
// time-spans, because that loses the least information.
//
@@ -937,11 +944,10 @@
static void cull_snapshots(void)
{
Int i, jp, j, jn;
- Snapshot* min_snapshot;
+ Int n_deleted = 0;
+ Long min_timespan = 0x7fffffff;
n_cullings++;
- if (VG_(clo_verbosity) > 1)
- VERB("Culling...");
// Sets j to the index of the first not-yet-removed snapshot at or after i
#define FIND_SNAPSHOT(i, j) \
@@ -949,23 +955,31 @@
j < MAX_N_SNAPSHOTS && !is_snapshot_in_use(&snapshots[j]); \
j++) { }
+ if (VG_(clo_verbosity) > 1)
+ VERB("Culling...");
+
+ // First we remove enough snapshots by clearing them in-place. Once
+ // that's done, we can slide the remaining ones down.
for (i = 0; i < MAX_N_SNAPSHOTS/2; i++) {
// Find the snapshot representing the smallest timespan. The timespan
// for snapshot n = d(N-1,N)+d(N,N+1), where d(A,B) is the time between
// snapshot A and B. We don't consider the first and last snapshots for
// removal.
- Int min_span = 0x7fffffff;
- Int min_j = 0;
+ Snapshot* min_snapshot;
+ Int min_j;
// Initial triple: (prev, curr, next) == (jp, j, jn)
+ // Initial min_timespan is the first one.
jp = 0;
FIND_SNAPSHOT(1, j);
FIND_SNAPSHOT(j+1, jn);
+ min_timespan = snapshots[jn].time - snapshots[jp].time;
+ min_j = j;
while (jn < MAX_N_SNAPSHOTS) {
Int timespan = snapshots[jn].time - snapshots[jp].time;
tl_assert(timespan >= 0);
- if (timespan < min_span) {
- min_span = timespan;
+ if (timespan < min_timespan) {
+ min_timespan = timespan;
min_j = j;
}
// Move on to next triple
@@ -973,15 +987,21 @@
j = jn;
FIND_SNAPSHOT(jn+1, jn);
}
- // We've found the least important snapshot, now delete it.
+ // We've found the least important snapshot, now delete it. First
+ // print it if necessary.
min_snapshot = & snapshots[ min_j ];
+ if (VG_(clo_verbosity) > 1) {
+ Char buf[64];
+ VG_(snprintf)(buf, 64, " cull %3d (t-span = %lld)", i, min_timespan);
+ VERB_snapshot(buf, min_j);
+ }
delete_snapshot(min_snapshot);
+ n_deleted++;
}
- // Slide down the remaining snapshots over the removed ones. The '<=' is
- // because we are removing on (N/2)-1, rather than N/2.
- // First set i to point to the first empty slot, and j to the first full
- // slot after i. Then slide everything down.
+ // Slide down the remaining snapshots over the removed ones. First set i
+ // to point to the first empty slot, and j to the first full slot after
+ // i. Then slide everything down.
for (i = 0; is_snapshot_in_use( &snapshots[i] ); i++) { }
for (j = i; !is_snapshot_in_use( &snapshots[j] ); j++) { }
for ( ; j < MAX_N_SNAPSHOTS; j++) {
@@ -995,8 +1015,14 @@
// Check snapshots array looks ok after changes.
sanity_check_snapshots_array();
- if (VG_(clo_verbosity) > 1)
- VERB("...done");
+ // Print remaining snapshots, if necessary.
+ if (VG_(clo_verbosity) > 1) {
+ VERB("Finished culling (%3d of %3d deleted)", n_deleted, MAX_N_SNAPSHOTS);
+ for (i = 0; i < next_snapshot_i; i++) {
+ VERB_snapshot(" new", i);
+ }
+ VERB("New time interval = %ld", min_timespan);
+ }
}
// Take a snapshot. Note that with bigger depths, snapshots can be slow,
@@ -1009,12 +1035,10 @@
static UInt time_of_next_snapshot = 0; // zero allows startup snapshot
static Int n_snapshots_since_last_detailed = 0;
- Int time, time_since_prev, time_ms;
+ Int time, time_since_prev;
Snapshot* snapshot;
+ Int this_snapshot_i = next_snapshot_i;
- // For measuring how long the snapshot took (used with -v).
- time_ms = VG_(read_millisecond_timer)();
-
// Get current time, in whatever time unit we're using.
if (clo_time_unit == TimeMS) time = VG_(read_millisecond_timer)();
else if (clo_time_unit == TimeB) time = total_allocs_deallocs_szB;
@@ -1075,31 +1099,27 @@
// peak snapshot data, the true peak could be between snapshots.
if (snapshot->total_szB > peak_snapshot_total_szB) {
peak_snapshot_total_szB = snapshot->total_szB;
-// VG_(printf)("new peak snapshot total szB = %ld B\n",
-// peak_snapshot_total_szB);
}
-// VG_(printf)("heap, admin, stacks: %ld, %ld, %ld B\n",
-// snapshot_heap_szB, snapshot_heap_admin_szB, snapshot_stacks_szB);
+ if (VG_(clo_verbosity) > 1) {
+ VERB_snapshot("took", this_snapshot_i);
+ }
- // Halve the entries, if our snapshot table is full
+ // Cull the entries, if our snapshot table is full
if (MAX_N_SNAPSHOTS == next_snapshot_i) {
cull_snapshots();
time_interval *= 2;
}
- // Take time for next snapshot from now, rather than when this snapshot
- // should have happened. Because, if there's a big gap due to a kernel
- // operation, there's no point doing catch-up snapshots every allocation
- // for a while -- that would just give N snapshots at almost the same time.
- if (VG_(clo_verbosity) > 1) {
- VERB("snapshot: %d %s (took %d ms)", time_ms,
- TimeUnit_to_string(clo_time_unit),
- VG_(read_millisecond_timer)() - time_ms );
- }
+ // Take time for the next snapshot from now, rather than when this
+ // snapshot should have happened. Because the time_interval is the
+ // minimum time between snapshots -- if there's a big gap due to a kernel
+ // operation or something, there's no point doing catch-up snapshots
+ // every allocation for a while -- that would just give N snapshots at
+ // almost the same time.
time_of_prev_snapshot = time;
time_of_next_snapshot = time + time_interval;
-}
+}
//------------------------------------------------------------//
|
|
From: <sv...@va...> - 2007-09-20 22:27:20
|
Author: njn
Date: 2007-09-20 23:27:21 +0100 (Thu, 20 Sep 2007)
New Revision: 6879
Log:
Minor changes.
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 22:21:54 UTC (rev 6878)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 22:27:21 UTC (rev 6879)
@@ -31,6 +31,7 @@
// XXX:
//---------------------------------------------------------------------------
// Todo:
+// - test what happens when alloc-fns cover an entire trace
// - write a good basic test that shows how the tool works, suitable for
// documentation
// - try to write a -v test. how to filter the Valgrind -v stuff out? Have
@@ -184,7 +185,8 @@
// The size of the stacks and heap is tracked. The heap is tracked in a lot
// of detail, enough to tell how many bytes each line of code is responsible
-// for, more or less.
+// for, more or less. The main data structure is a tree representing the
+// call tree beneath all the allocation functions like malloc().
//
// "Snapshots" are recordings of the memory usage. There are two basic
// kinds:
@@ -209,14 +211,14 @@
// - User-requested snapshots: These are done in response to client
// requests. They are always kept.
-///-----------------------------------------------------------//
-//--- Main types ---//
-//------------------------------------------------------------//
-
// Used for printing things when clo_verbosity > 1.
#define VERB(format, args...) \
VG_(message)(Vg_DebugMsg, "Massif: " format, ##args)
+///-----------------------------------------------------------//
+//--- XPts ---//
+//------------------------------------------------------------//
+
// An XPt represents an "execution point", ie. a code address. Each XPt is
// part of a tree of XPts (an "execution tree", or "XTree"). The details of
// the heap are represented by a single XTree.
@@ -1596,15 +1598,15 @@
// Stats
if (VG_(clo_verbosity) > 1) {
tl_assert(n_xpts > 0); // always have alloc_xpt
- VERB(" allocs: %u", n_allocs);
- if (n_allocs)
- VERB("zeroallocs: %u (%d%%)", n_zero_allocs,
- n_zero_allocs * 100 / n_allocs );
- VERB(" frees: %u", n_frees);
- VERB(" XPts: %u", n_xpts);
- if (n_xpts)
- VERB(" top-XPts: %u (%d%%)",
- alloc_xpt->n_children, alloc_xpt->n_children * 100 / n_xpts);
+ VERB("allocs: %u", n_allocs);
+ VERB("zeroallocs: %u (%d%%)",
+ n_zero_allocs,
+ ( n_allocs ? n_zero_allocs * 100 / n_allocs : 0 ));
+ VERB("frees: %u", n_frees);
+ VERB("XPts: %u", n_xpts);
+ VERB("top-XPts: %u (%d%%)",
+ alloc_xpt->n_children,
+ ( n_xpts ? alloc_xpt->n_children * 100 / n_xpts : 0));
VERB("dup'd XPts: %u", n_dupd_xpts);
VERB("dup'd/freed XPts:%u", n_dupd_xpts_freed);
VERB("c-reallocs: %u", n_children_reallocs);
|
|
From: <sv...@va...> - 2007-09-20 22:21:54
|
Author: sewardj
Date: 2007-09-20 23:21:54 +0100 (Thu, 20 Sep 2007)
New Revision: 6878
Log:
More glibc-2.6 suppressions for thrcheck.
Modified:
branches/THRCHECK/glibc-2.6.supp
Modified: branches/THRCHECK/glibc-2.6.supp
===================================================================
--- branches/THRCHECK/glibc-2.6.supp 2007-09-20 22:14:25 UTC (rev 6877)
+++ branches/THRCHECK/glibc-2.6.supp 2007-09-20 22:21:54 UTC (rev 6878)
@@ -1,7 +1,7 @@
##----------------------------------------------------------------------##
-# Errors to suppress by default with glibc 2.4.x
+# Errors to suppress by default with glibc 2.6.x
# Format of this file is:
# {
@@ -40,13 +40,44 @@
}
{
- dl-hack3
+ dl-hack3-1
Memcheck:Cond
obj:/lib*/ld-2.6*.so*
obj:/lib*/ld-2.6*.so*
obj:/lib*/ld-2.6*.so*
}
+{
+ dl-hack3-2
+ Memcheck:Cond
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/ld-2.6*.so*
+ obj:/lib*/libc-2.6*.so*
+}
+{
+ dl-hack4-64bit-1
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+}
+{
+ dl-hack4-64bit-2
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/libc-2.6*.so*
+}
+{
+ dl-hack4-64bit-3
+ Memcheck:Addr8
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/ld-2.6*.so*
+ obj:/lib64/libdl-2.6*.so*
+}
+
+
+
##----------------------------------------------------------------------##
{
glibc-2.5.x-on-SUSE-10.2-(PPC)-1
|
|
From: <sv...@va...> - 2007-09-20 22:14:24
|
Author: njn
Date: 2007-09-20 23:14:25 +0100 (Thu, 20 Sep 2007)
New Revision: 6877
Log:
Make -v messages more compact.
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 22:09:50 UTC (rev 6876)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 22:14:25 UTC (rev 6877)
@@ -208,12 +208,15 @@
// in which case it will overwrite the peak snapshot.
// - User-requested snapshots: These are done in response to client
// requests. They are always kept.
-//
///-----------------------------------------------------------//
//--- Main types ---//
//------------------------------------------------------------//
+// Used for printing things when clo_verbosity > 1.
+#define VERB(format, args...) \
+ VG_(message)(Vg_DebugMsg, "Massif: " format, ##args)
+
// An XPt represents an "execution point", ie. a code address. Each XPt is
// part of a tree of XPts (an "execution tree", or "XTree"). The details of
// the heap are represented by a single XTree.
@@ -936,7 +939,7 @@
n_cullings++;
if (VG_(clo_verbosity) > 1)
- VG_(message)(Vg_DebugMsg, "Halving snapshots...");
+ VERB("Culling...");
// Sets j to the index of the first not-yet-removed snapshot at or after i
#define FIND_SNAPSHOT(i, j) \
@@ -991,7 +994,7 @@
sanity_check_snapshots_array();
if (VG_(clo_verbosity) > 1)
- VG_(message)(Vg_DebugMsg, "...done");
+ VERB("...done");
}
// Take a snapshot. Note that with bigger depths, snapshots can be slow,
@@ -1088,7 +1091,7 @@
// operation, there's no point doing catch-up snapshots every allocation
// for a while -- that would just give N snapshots at almost the same time.
if (VG_(clo_verbosity) > 1) {
- VG_(message)(Vg_DebugMsg, "snapshot: %d %s (took %d ms)", time_ms,
+ VERB("snapshot: %d %s (took %d ms)", time_ms,
TimeUnit_to_string(clo_time_unit),
VG_(read_millisecond_timer)() - time_ms );
}
@@ -1593,22 +1596,22 @@
// Stats
if (VG_(clo_verbosity) > 1) {
tl_assert(n_xpts > 0); // always have alloc_xpt
- VG_(message)(Vg_DebugMsg, " allocs: %u", n_allocs);
+ VERB(" allocs: %u", n_allocs);
if (n_allocs)
- VG_(message)(Vg_DebugMsg, "zeroallocs: %u (%d%%)", n_zero_allocs,
+ VERB("zeroallocs: %u (%d%%)", n_zero_allocs,
n_zero_allocs * 100 / n_allocs );
- VG_(message)(Vg_DebugMsg, " frees: %u", n_frees);
- VG_(message)(Vg_DebugMsg, " XPts: %u", n_xpts);
+ VERB(" frees: %u", n_frees);
+ VERB(" XPts: %u", n_xpts);
if (n_xpts)
- VG_(message)(Vg_DebugMsg, " top-XPts: %u (%d%%)",
+ VERB(" top-XPts: %u (%d%%)",
alloc_xpt->n_children, alloc_xpt->n_children * 100 / n_xpts);
- VG_(message)(Vg_DebugMsg, "dup'd XPts: %u", n_dupd_xpts);
- VG_(message)(Vg_DebugMsg, "dup'd/freed XPts:%u", n_dupd_xpts_freed);
- VG_(message)(Vg_DebugMsg, "c-reallocs: %u", n_children_reallocs);
- VG_(message)(Vg_DebugMsg, "fake snapshots: %u", n_fake_snapshots);
- VG_(message)(Vg_DebugMsg, "real snapshots: %u", n_real_snapshots);
- VG_(message)(Vg_DebugMsg, "cullings: %u", n_cullings);
- VG_(message)(Vg_DebugMsg, "XCon_redos: %u", n_getXCon_redo);
+ VERB("dup'd XPts: %u", n_dupd_xpts);
+ VERB("dup'd/freed XPts:%u", n_dupd_xpts_freed);
+ VERB("c-reallocs: %u", n_children_reallocs);
+ VERB("fake snapshots: %u", n_fake_snapshots);
+ VERB("real snapshots: %u", n_real_snapshots);
+ VERB("cullings: %u", n_cullings);
+ VERB("XCon_redos: %u", n_getXCon_redo);
}
}
@@ -1623,10 +1626,10 @@
Word alloc_fn_word;
if (VG_(clo_verbosity) > 1) {
- VG_(message)(Vg_DebugMsg, "alloc-fns:");
+ VERB("alloc-fns:");
VG_(OSetWord_ResetIter)(alloc_fns);
while ( VG_(OSetWord_Next)(alloc_fns, &alloc_fn_word) ) {
- VG_(message)(Vg_DebugMsg, " %d: %s", i, (Char*)alloc_fn_word);
+ VERB(" %d: %s", i, (Char*)alloc_fn_word);
i++;
}
}
|
|
From: <sv...@va...> - 2007-09-20 22:09:51
|
Author: njn
Date: 2007-09-20 23:09:50 +0100 (Thu, 20 Sep 2007)
New Revision: 6876
Log:
Cull N/2 instead of (N/2)-1 snapshots during each culling.
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 15:29:06 UTC (rev 6875)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 22:09:50 UTC (rev 6876)
@@ -40,8 +40,9 @@
// - Check MALLOCLIKE_BLOCK works, write regtest
// - clean up structure of ms_print
// - work out peak-taking
-// - make everything configurable, eg. max number of snapshots, frequency
-// of detailed snapshots, etc.
+// - make everything configurable, eg. min/max number of snapshots (which
+// also determine culling proportion), frequency of detailed snapshots,
+// etc.
// - have a test with lots of zero-sized allocations -- makes sure that
// timespans of 0 between snapshots is ok...
//
@@ -923,11 +924,10 @@
// time-spans, because that loses the least information.
//
// Algorithm for N snapshots: We find the snapshot representing the smallest
-// timeframe, and remove it. We repeat this until (N/2)-1 snapshots are gone.
-// (It's (N/2)-1 because we never remove the first and last snapshots.)
-// We have to do this one snapshot at a time, rather than finding the (N/2)-1
+// timeframe, and remove it. We repeat this until (N/2) snapshots are gone.
+// We have to do this one snapshot at a time, rather than finding the (N/2)
// smallest snapshots in one hit, because when a snapshot is removed, its
-// neighbours immediately cover greater timespans. So it's N^2, but N is
+// neighbours immediately cover greater timespans. So it's O(N^2), but N is
// small, and it's not done very often.
static void cull_snapshots(void)
{
@@ -944,7 +944,7 @@
j < MAX_N_SNAPSHOTS && !is_snapshot_in_use(&snapshots[j]); \
j++) { }
- for (i = 2; i < MAX_N_SNAPSHOTS; i += 2) {
+ for (i = 0; i < MAX_N_SNAPSHOTS/2; i++) {
// Find the snapshot representing the smallest timespan. The timespan
// for snapshot n = d(N-1,N)+d(N,N+1), where d(A,B) is the time between
// snapshot A and B. We don't consider the first and last snapshots for
|
|
From: <sv...@va...> - 2007-09-20 15:29:05
|
Author: sewardj
Date: 2007-09-20 16:29:06 +0100 (Thu, 20 Sep 2007)
New Revision: 6875
Log:
Tweakage for ld.so-2.6.1 when all symbols have been removed from it.
Modified:
branches/THRCHECK/glibc-2.X-thrcheck.supp
Modified: branches/THRCHECK/glibc-2.X-thrcheck.supp
===================================================================
--- branches/THRCHECK/glibc-2.X-thrcheck.supp 2007-09-20 14:30:35 UTC (rev 6874)
+++ branches/THRCHECK/glibc-2.X-thrcheck.supp 2007-09-20 15:29:06 UTC (rev 6875)
@@ -277,3 +277,19 @@
fun:__reclaim_stacks
fun:fork
}
+
+###--- OpenSUSE 10.3 specific ---###
+{
+ thrcheck-glibc26-ld261-64bit-1
+ Thrcheck:Race
+ obj:/lib64/ld-2.6.1.so
+ obj:/lib64/ld-2.6.1.so
+ obj:/lib64/ld-2.6.1.so
+}
+{
+ thrcheck-glibc26-ld261-32bit-1
+ Thrcheck:Race
+ obj:/lib/ld-2.6.1.so
+ obj:/lib/ld-2.6.1.so
+ obj:/lib/ld-2.6.1.so
+}
|
|
From: <sv...@va...> - 2007-09-20 14:30:34
|
Author: sewardj
Date: 2007-09-20 15:30:35 +0100 (Thu, 20 Sep 2007)
New Revision: 6874
Log:
Move all the Thrcheck-specific suppressions for glibc2.X into a common
file, in order to avoid duplicating them in glibc-2.{2,3,4,5,6}.supp.
Added:
branches/THRCHECK/glibc-2.X-thrcheck.supp
Modified:
branches/THRCHECK/Makefile.am
branches/THRCHECK/configure.in
branches/THRCHECK/glibc-2.3.supp
branches/THRCHECK/glibc-2.4.supp
branches/THRCHECK/glibc-2.5.supp
Modified: branches/THRCHECK/Makefile.am
===================================================================
--- branches/THRCHECK/Makefile.am 2007-09-20 14:26:47 UTC (rev 6873)
+++ branches/THRCHECK/Makefile.am 2007-09-20 14:30:35 UTC (rev 6874)
@@ -19,7 +19,8 @@
SUPP_FILES = \
glibc-2.2.supp glibc-2.3.supp glibc-2.4.supp glibc-2.5.supp \
- glibc-2.6.supp aix5libc.supp xfree-3.supp xfree-4.supp
+ glibc-2.6.supp aix5libc.supp xfree-3.supp xfree-4.supp \
+ glibc-2.X-thrcheck.supp
dist_val_DATA = $(SUPP_FILES) default.supp
Modified: branches/THRCHECK/configure.in
===================================================================
--- branches/THRCHECK/configure.in 2007-09-20 14:26:47 UTC (rev 6873)
+++ branches/THRCHECK/configure.in 2007-09-20 14:30:35 UTC (rev 6874)
@@ -473,30 +473,30 @@
2.2)
AC_MSG_RESULT(2.2 family)
AC_DEFINE([GLIBC_2_2], 1, [Define to 1 if you're using glibc 2.2.x])
- DEFAULT_SUPP="glibc-2.2.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.2.supp glibc-2.X-thrcheck.supp ${DEFAULT_SUPP}"
;;
2.3)
AC_MSG_RESULT(2.3 family)
AC_DEFINE([GLIBC_2_3], 1, [Define to 1 if you're using glibc 2.3.x])
- DEFAULT_SUPP="glibc-2.3.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.3.supp glibc-2.X-thrcheck.supp ${DEFAULT_SUPP}"
;;
2.4)
AC_MSG_RESULT(2.4 family)
AC_DEFINE([GLIBC_2_4], 1, [Define to 1 if you're using glibc 2.4.x])
- DEFAULT_SUPP="glibc-2.4.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.4.supp glibc-2.X-thrcheck.supp ${DEFAULT_SUPP}"
;;
2.5)
AC_MSG_RESULT(2.5 family)
AC_DEFINE([GLIBC_2_5], 1, [Define to 1 if you're using glibc 2.5.x])
- DEFAULT_SUPP="glibc-2.5.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.5.supp glibc-2.X-thrcheck.supp ${DEFAULT_SUPP}"
;;
2.6)
AC_MSG_RESULT(2.6 family)
AC_DEFINE([GLIBC_2_6], 1, [Define to 1 if you're using glibc 2.6.x])
- DEFAULT_SUPP="glibc-2.6.supp ${DEFAULT_SUPP}"
+ DEFAULT_SUPP="glibc-2.6.supp glibc-2.X-thrcheck.supp ${DEFAULT_SUPP}"
;;
aix5)
AC_MSG_RESULT(AIX 5.1 or 5.2 or 5.3)
Modified: branches/THRCHECK/glibc-2.3.supp
===================================================================
--- branches/THRCHECK/glibc-2.3.supp 2007-09-20 14:26:47 UTC (rev 6873)
+++ branches/THRCHECK/glibc-2.3.supp 2007-09-20 14:30:35 UTC (rev 6874)
@@ -610,39 +610,3 @@
obj:/lib/libpthread-0.10.so
fun:pthread_create
}
-
-##----------------------------------------------------------------------##
-# Suppressions for the Thrcheck tool
-
-###--- ld.so stuff ---###
-{
- thrcheck-glibc23-ldso-1
- Thrcheck:Race
- fun:_dl_lookup_symbol_x
- fun:fixup
- fun:_dl_runtime_resolve
-}
-
-###--- pthread_join ---###
-{
- thrcheck-glibc23-pthjoin-1
- Thrcheck:Race
- fun:pthread_join
- fun:pthread_join
-}
-
-###--- pthread_mutex_lock ---###
-{
- thrcheck-glibc23-pthmxlock-1
- Thrcheck:Race
- fun:pthread_mutex_lock
- fun:pthread_mutex_lock
-}
-
-###--- pthread_create ---###
-{
- thrcheck-glibc23-pthcreate-1
- Thrcheck:Race
- fun:pthread_create@@GLIBC_*
- fun:pthread_create@*
-}
Modified: branches/THRCHECK/glibc-2.4.supp
===================================================================
--- branches/THRCHECK/glibc-2.4.supp 2007-09-20 14:26:47 UTC (rev 6873)
+++ branches/THRCHECK/glibc-2.4.supp 2007-09-20 14:30:35 UTC (rev 6874)
@@ -259,46 +259,3 @@
obj:/lib/libpthread-0.10.so
fun:pthread_create
}
-
-
-##----------------------------------------------------------------------##
-# Thrcheck tool, x86-linux, glibc-2.4
-{
- thrcheck-glibc24-x86-1
- Thrcheck:Race
- fun:pthread_join*
- fun:pthread_join*
-}
-{
- thrcheck-glibc24-x86-2
- Thrcheck:Race
- fun:_dl_lookup_symbol_x
- fun:_dl_fixup
- fun:_dl_runtime_resolve
-}
-{
- thrcheck-glibc24-x86-3
- Thrcheck:Race
- fun:__free_tcb
- fun:pthread_join*
- fun:pthread_join*
-}
-{
- thrcheck-glibc24-x86-4
- Thrcheck:Race
- fun:pthread_mutex_lock*
- fun:pthread_mutex_lock*
-}
-{
- thrcheck-glibc24-x86-5
- Thrcheck:Race
- fun:do_clone
- fun:pthread_create*
- fun:pthread_create*
-}
-{
- thrcheck-glibc24-ppc64-1
- Thrcheck:Race
- fun:__free_tcb
- fun:pthread_join
-}
Modified: branches/THRCHECK/glibc-2.5.supp
===================================================================
--- branches/THRCHECK/glibc-2.5.supp 2007-09-20 14:26:47 UTC (rev 6873)
+++ branches/THRCHECK/glibc-2.5.supp 2007-09-20 14:30:35 UTC (rev 6874)
@@ -213,281 +213,3 @@
obj:/lib/libpthread-0.10.so
fun:pthread_create
}
-
-##----------------------------------------------------------------------##
-# Suppressions for the Thrcheck tool
-
-###--- ld.so stuff ---###
-{
- thrcheck-glibc25-ldso-1
- Thrcheck:Race
- fun:_dl_lookup_symbol_x
- fun:_dl_fixup
- fun:_dl_runtime_resolve
-}
-{
- thrcheck-glibc25-ldso-2
- Thrcheck:Race
- fun:do_lookup_x
- fun:_dl_lookup_symbol_x
- fun:_dl_fixup
-}
-{
- thrcheck-glibc25-ldso-3
- Thrcheck:Race
- fun:_dl_map_object_deps
- fun:dl_open_worker
- fun:_dl_catch_error
-}
-{
- thrcheck-glibc25-ldso-4
- Thrcheck:Race
- fun:setup_direct
- fun:_dl_map_object_deps
- fun:dl_open_worker
-}
-{
- thrcheck-glibc25-ldso-5
- Thrcheck:Race
- fun:_dl_map_object_from_fd
- fun:_dl_map_object
- fun:dl_open_worker
-}
-{
- thrcheck-glibc25-ldso-6
- Thrcheck:Race
- fun:_dl_map_object
- fun:dl_open_worker
- fun:_dl_catch_error
-}
-
-###--- pthread_join ---###
-{
- thrcheck-glibc25-pthjoin-1
- Thrcheck:Race
- fun:pthread_join
- fun:pthread_join
-}
-{
- thrcheck-glibc25-pthjoin-2
- Thrcheck:Race
- fun:__free_tcb
- fun:pthread_join
- fun:pthread_join
-}
-
-###--- IO_file ---###
-{
- thrcheck-glibc25-IOfile-1
- Thrcheck:Race
- fun:_IO_file_xsputn*
- fun:vfprintf
- fun:*printf
-}
-{
- thrcheck-glibc25-IOfile-2
- Thrcheck:Race
- fun:_IO_file_overflow*
- fun:_IO_file_xsputn*
- fun:*printf
-}
-{
- thrcheck-glibc25-IOfile-3
- Thrcheck:Race
- fun:new_do_write
- fun:_IO_do_write*
- fun:_IO_file_xsputn*
- fun:*printf
-}
-{
- thrcheck-glibc25-IOfile-4
- Thrcheck:Race
- fun:new_do_write
- fun:_IO_file_xsputn*
- fun:*printf
-}
-{
- thrcheck-glibc25-IOfile-5
- Thrcheck:Race
- fun:new_do_write
- fun:_IO_do_write*
- fun:_IO_file_overflow*
- fun:_IO_file_xsputn*
-}
-
-###--- thread creation ---###
-{
- thrcheck-glibc25-creation-1
- Thrcheck:Race
- fun:start_thread
- fun:clone
-}
-
-###--- thread exit ---###
-{
- thrcheck-glibc25-exit-1
- Thrcheck:Race
- fun:_dl_fini
- fun:exit
-}
-
-###--- pthread_mutex_lock ---###
-{
- thrcheck-glibc25-pthmxlock-1
- Thrcheck:Race
- fun:pthread_mutex_lock
- fun:pthread_mutex_lock
-}
-{
- thrcheck-glibc25-pthmxlock-2
- Thrcheck:Race
- fun:__lll_mutex_lock_wait
- fun:pthread_mutex_lock
-}
-
-###--- pthread_mutex_destroy ---###
-{
- thrcheck-glibc25-pthmxlock-2
- Thrcheck:Race
- fun:pthread_mutex_destroy
- fun:pthread_mutex_destroy
-}
-
-###--- pthread_create ---###
-{
- thrcheck-glibc25-pthcreate-1
- Thrcheck:Race
- fun:pthread_create@@GLIBC_*
- fun:pthread_create@*
-}
-{
- thrcheck-glibc25-pthcreate-2
- Thrcheck:Race
- fun:do_clone
- fun:pthread_create@@GLIBC_*
- fun:pthread_create@*
-}
-
-###--- pthread_cond_signal ---###
-#
-# This is very ugly. It is needed to suppress errors inside
-# NPTL's pthread_cond_signal. Why only one stack frame --
-# at least we should see the wrapper calling the real function,
-# right? Unfortunately, no: the real function is handwritten
-# assembly (in the glibc-2.5 sources) and does not create a proper
-# stack frame. Therefore it's only one level of unwinding before
-# we're back out in user code rather than the 2 levels you'd expect.
-{
- thrcheck-glibc25-condsig-1
- Thrcheck:Race
- fun:pthread_cond_signal@@GLIBC_2.3.2
-}
-
-###--- pthread_cond_broadcast ---###
-# ditto
-{
- thrcheck-glibc25-condbcast-1
- Thrcheck:Race
- fun:pthread_cond_broadcast@@GLIBC_2.3.2
-}
-
-###--- pthread_cond_wait ---###
-# ditto
-{
- thrcheck-glibc25-pthcondwait-1
- Thrcheck:Race
- fun:pthread_cond_wait@@GLIBC_2.3.2
-}
-{
- thrcheck-glibc25-pthcondwait-2
- Thrcheck:Race
- fun:pthread_cond_wait@@GLIBC_*
- fun:pthread_cond_wait*
-}
-
-###--- pthread_mutex_trylock ---###
-# ditto
-{
- thrcheck-glibc25-pthmxtrylock-1
- Thrcheck:Race
- fun:pthread_mutex_trylock
-}
-
-###--- pthread_cond_timedwait ---###
-{
- thrcheck-glibc25-pthmxtimedwait-1
- Thrcheck:Race
- fun:pthread_cond_timedwait@@GLIBC_*
- fun:pthread_cond_timedwait*
-}
-{
- thrcheck-glibc25-pthmxtimedwait-2
- Thrcheck:Race
- fun:__lll_mutex_lock_wait
- fun:pthread_cond_timedwait@@GLIBC_*
- fun:pthread_cond_timedwait*
-}
-
-###--- libpthread internal stuff ---###
-{
- thrcheck-glibc25-libpthread-1
- Thrcheck:Race
- fun:__pthread_mutex_unlock_usercnt
- fun:pthread_mutex_unlock
- fun:pthread_mutex_unlock
-}
-{
- thrcheck-glibc25-libpthread-2
- Thrcheck:Race
- fun:__lll_mutex_unlock_wake
- fun:_L_mutex_unlock_*
- fun:__pthread_mutex_unlock_usercnt
-}
-{
- thrcheck-glibc25-libpthread-3
- Thrcheck:Race
- fun:__lll_mutex_lock_wait
- fun:_L_mutex_lock_*
- fun:start_thread
-}
-{
- thrcheck-glibc25-libpthread-4
- Thrcheck:Race
- fun:__lll_mutex_lock_wait
- fun:_L_mutex_lock_*
- fun:pthread_mutex_lock
-}
-{
- thrcheck-glibc25-libpthread-5
- Thrcheck:Race
- fun:mythread_wrapper
- fun:start_thread
-}
-{
- thrcheck-glibc25-libpthread-6
- Thrcheck:Race
- fun:__deallocate_stack
- fun:start_thread
-}
-{
- thrcheck-glibc25-libpthread-7
- Thrcheck:Race
- fun:__deallocate_stack
- fun:__free_tcb
- fun:start_thread
-}
-{
- thrcheck-glibc25-libpthread-8
- Thrcheck:Race
- fun:__deallocate_stack
- fun:pthread_join
- fun:pthread_join
-}
-
-###--- fork ---###
-{
- thrcheck-glibc25-fork-1
- Thrcheck:Race
- fun:__reclaim_stacks
- fun:fork
-}
Added: branches/THRCHECK/glibc-2.X-thrcheck.supp
===================================================================
--- branches/THRCHECK/glibc-2.X-thrcheck.supp (rev 0)
+++ branches/THRCHECK/glibc-2.X-thrcheck.supp 2007-09-20 14:30:35 UTC (rev 6874)
@@ -0,0 +1,279 @@
+
+##----------------------------------------------------------------------##
+# Suppressions for the Thrcheck tool when using
+# a glibc-2.{2,3,4,5,6} system
+
+###--- ld.so stuff ---###
+{
+ thrcheck-glibc2X-ldso-1
+ Thrcheck:Race
+ fun:_dl_lookup_symbol_x
+ fun:_dl_fixup
+ fun:_dl_runtime_resolve
+}
+{
+ thrcheck-glibc2X-ldso-2
+ Thrcheck:Race
+ fun:do_lookup_x
+ fun:_dl_lookup_symbol_x
+ fun:_dl_fixup
+}
+{
+ thrcheck-glibc2X-ldso-3
+ Thrcheck:Race
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+ fun:_dl_catch_error
+}
+{
+ thrcheck-glibc2X-ldso-4
+ Thrcheck:Race
+ fun:setup_direct
+ fun:_dl_map_object_deps
+ fun:dl_open_worker
+}
+{
+ thrcheck-glibc2X-ldso-5
+ Thrcheck:Race
+ fun:_dl_map_object_from_fd
+ fun:_dl_map_object
+ fun:dl_open_worker
+}
+{
+ thrcheck-glibc2X-ldso-6
+ Thrcheck:Race
+ fun:_dl_map_object
+ fun:dl_open_worker
+ fun:_dl_catch_error
+}
+
+###--- pthread_join ---###
+{
+ thrcheck-glibc2X-pthjoin-1
+ Thrcheck:Race
+ fun:pthread_join
+ fun:pthread_join
+}
+{
+ thrcheck-glibc2X-pthjoin-2
+ Thrcheck:Race
+ fun:__free_tcb
+ fun:pthread_join
+ fun:pthread_join
+}
+
+###--- IO_file ---###
+{
+ thrcheck-glibc2X-IOfile-1
+ Thrcheck:Race
+ fun:_IO_file_xsputn*
+ fun:vfprintf
+ fun:*printf
+}
+{
+ thrcheck-glibc2X-IOfile-2
+ Thrcheck:Race
+ fun:_IO_file_overflow*
+ fun:_IO_file_xsputn*
+ fun:*printf
+}
+{
+ thrcheck-glibc2X-IOfile-3
+ Thrcheck:Race
+ fun:new_do_write
+ fun:_IO_do_write*
+ fun:_IO_file_xsputn*
+ fun:*printf
+}
+{
+ thrcheck-glibc2X-IOfile-4
+ Thrcheck:Race
+ fun:new_do_write
+ fun:_IO_file_xsputn*
+ fun:*printf
+}
+{
+ thrcheck-glibc2X-IOfile-5
+ Thrcheck:Race
+ fun:new_do_write
+ fun:_IO_do_write*
+ fun:_IO_file_overflow*
+ fun:_IO_file_xsputn*
+}
+
+###--- thread creation ---###
+{
+ thrcheck-glibc2X-creation-1
+ Thrcheck:Race
+ fun:start_thread
+ fun:clone
+}
+
+###--- thread exit ---###
+{
+ thrcheck-glibc2X-exit-1
+ Thrcheck:Race
+ fun:_dl_fini
+ fun:exit
+}
+
+###--- pthread_mutex_lock ---###
+{
+ thrcheck-glibc2X-pthmxlock-1
+ Thrcheck:Race
+ fun:pthread_mutex_lock
+ fun:pthread_mutex_lock
+}
+{
+ thrcheck-glibc2X-pthmxlock-2
+ Thrcheck:Race
+ fun:__lll_mutex_lock_wait
+ fun:pthread_mutex_lock
+}
+
+###--- pthread_mutex_destroy ---###
+{
+ thrcheck-glibc2X-pthmxlock-2
+ Thrcheck:Race
+ fun:pthread_mutex_destroy
+ fun:pthread_mutex_destroy
+}
+
+###--- pthread_create ---###
+{
+ thrcheck-glibc2X-pthcreate-1
+ Thrcheck:Race
+ fun:pthread_create@@GLIBC_*
+ fun:pthread_create@*
+}
+{
+ thrcheck-glibc2X-pthcreate-2
+ Thrcheck:Race
+ fun:do_clone
+ fun:pthread_create@@GLIBC_*
+ fun:pthread_create@*
+}
+
+###--- pthread_cond_signal ---###
+#
+# This is very ugly. It is needed to suppress errors inside
+# NPTL's pthread_cond_signal. Why only one stack frame --
+# at least we should see the wrapper calling the real function,
+# right? Unfortunately, no: the real function is handwritten
+# assembly (in the glibc-2.5 sources) and does not create a proper
+# stack frame. Therefore it's only one level of unwinding before
+# we're back out in user code rather than the 2 levels you'd expect.
+{
+ thrcheck-glibc2X-condsig-1
+ Thrcheck:Race
+ fun:pthread_cond_signal@@GLIBC_2.3.2
+}
+
+###--- pthread_cond_broadcast ---###
+# ditto
+{
+ thrcheck-glibc2X-condbcast-1
+ Thrcheck:Race
+ fun:pthread_cond_broadcast@@GLIBC_2.3.2
+}
+
+###--- pthread_cond_wait ---###
+# ditto
+{
+ thrcheck-glibc2X-pthcondwait-1
+ Thrcheck:Race
+ fun:pthread_cond_wait@@GLIBC_2.3.2
+}
+{
+ thrcheck-glibc2X-pthcondwait-2
+ Thrcheck:Race
+ fun:pthread_cond_wait@@GLIBC_*
+ fun:pthread_cond_wait*
+}
+
+###--- pthread_mutex_trylock ---###
+# ditto
+{
+ thrcheck-glibc2X-pthmxtrylock-1
+ Thrcheck:Race
+ fun:pthread_mutex_trylock
+}
+
+###--- pthread_cond_timedwait ---###
+{
+ thrcheck-glibc2X-pthmxtimedwait-1
+ Thrcheck:Race
+ fun:pthread_cond_timedwait@@GLIBC_*
+ fun:pthread_cond_timedwait*
+}
+{
+ thrcheck-glibc2X-pthmxtimedwait-2
+ Thrcheck:Race
+ fun:__lll_mutex_lock_wait
+ fun:pthread_cond_timedwait@@GLIBC_*
+ fun:pthread_cond_timedwait*
+}
+
+###--- libpthread internal stuff ---###
+{
+ thrcheck-glibc2X-libpthread-1
+ Thrcheck:Race
+ fun:__pthread_mutex_unlock_usercnt
+ fun:pthread_mutex_unlock
+ fun:pthread_mutex_unlock
+}
+{
+ thrcheck-glibc2X-libpthread-2
+ Thrcheck:Race
+ fun:__lll_mutex_unlock_wake
+ fun:_L_mutex_unlock_*
+ fun:__pthread_mutex_unlock_usercnt
+}
+{
+ thrcheck-glibc2X-libpthread-3
+ Thrcheck:Race
+ fun:__lll_mutex_lock_wait
+ fun:_L_mutex_lock_*
+ fun:start_thread
+}
+{
+ thrcheck-glibc2X-libpthread-4
+ Thrcheck:Race
+ fun:__lll_mutex_lock_wait
+ fun:_L_mutex_lock_*
+ fun:pthread_mutex_lock
+}
+{
+ thrcheck-glibc2X-libpthread-5
+ Thrcheck:Race
+ fun:mythread_wrapper
+ fun:start_thread
+}
+{
+ thrcheck-glibc2X-libpthread-6
+ Thrcheck:Race
+ fun:__deallocate_stack
+ fun:start_thread
+}
+{
+ thrcheck-glibc2X-libpthread-7
+ Thrcheck:Race
+ fun:__deallocate_stack
+ fun:__free_tcb
+ fun:start_thread
+}
+{
+ thrcheck-glibc2X-libpthread-8
+ Thrcheck:Race
+ fun:__deallocate_stack
+ fun:pthread_join
+ fun:pthread_join
+}
+
+###--- fork ---###
+{
+ thrcheck-glibc2X-fork-1
+ Thrcheck:Race
+ fun:__reclaim_stacks
+ fun:fork
+}
|
|
From: <sv...@va...> - 2007-09-20 14:26:50
|
Author: sewardj
Date: 2007-09-20 15:26:47 +0100 (Thu, 20 Sep 2007)
New Revision: 6873
Log:
Update expected output.
Modified:
branches/THRCHECK/thrcheck/tests/tc10_rec_lock.stderr.exp
Modified: branches/THRCHECK/thrcheck/tests/tc10_rec_lock.stderr.exp
===================================================================
--- branches/THRCHECK/thrcheck/tests/tc10_rec_lock.stderr.exp 2007-09-20 10:27:37 UTC (rev 6872)
+++ branches/THRCHECK/thrcheck/tests/tc10_rec_lock.stderr.exp 2007-09-20 14:26:47 UTC (rev 6873)
@@ -10,16 +10,16 @@
Thread #1 unlocked a not-locked lock at 0x........
at 0x........: pthread_mutex_unlock (tc_intercepts.c:423)
- by 0x........: nearly_main (tc10_rec_lock.c:39)
- by 0x........: main (tc10_rec_lock.c:44)
+ by 0x........: nearly_main (tc10_rec_lock.c:53)
+ by 0x........: main (tc10_rec_lock.c:58)
Lock at 0x........ was first observed
at 0x........: pthread_mutex_init (tc_intercepts.c:299)
- by 0x........: nearly_main (tc10_rec_lock.c:21)
- by 0x........: main (tc10_rec_lock.c:44)
+ by 0x........: nearly_main (tc10_rec_lock.c:35)
+ by 0x........: main (tc10_rec_lock.c:58)
Thread #1's call to pthread_mutex_unlock failed with error 1 (EPERM: Operation not permitted)
at 0x........: pthread_mutex_unlock (tc_intercepts.c:432)
- by 0x........: nearly_main (tc10_rec_lock.c:39)
- by 0x........: main (tc10_rec_lock.c:44)
+ by 0x........: nearly_main (tc10_rec_lock.c:53)
+ by 0x........: main (tc10_rec_lock.c:58)
ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 0 from 0)
|
|
From: <js...@ac...> - 2007-09-20 13:10:20
|
Nightly build on minnie ( SuSE 10.0, ppc32 ) started at 2007-09-20 09:00:01 BST 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 == 220 tests, 10 stderr failures, 6 stdout failures, 0 posttest failures == memcheck/tests/leak-tree (stderr) memcheck/tests/leakotron (stdout) memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/xml1 (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/ppc32/jm-fp (stdout) none/tests/ppc32/jm-fp (stderr) none/tests/ppc32/round (stdout) none/tests/ppc32/round (stderr) none/tests/ppc32/test_fx (stdout) none/tests/ppc32/test_fx (stderr) none/tests/ppc32/test_gx (stdout) |
|
From: <sv...@va...> - 2007-09-20 10:27:35
|
Author: njn
Date: 2007-09-20 11:27:37 +0100 (Thu, 20 Sep 2007)
New Revision: 6872
Log:
use "cull" instead of "halve".
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 10:25:16 UTC (rev 6871)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 10:27:37 UTC (rev 6872)
@@ -310,7 +310,7 @@
static UInt n_getXCon_redo = 0;
-static UInt n_halvings = 0;
+static UInt n_cullings = 0;
static UInt n_real_snapshots = 0;
static UInt n_fake_snapshots = 0;
@@ -823,17 +823,11 @@
//--- Snapshots ---//
//------------------------------------------------------------//
-// Snapshots are done so we keep a good number of them. If MAX_N_SNAPSHOTS
-// equals 200, then it works something like this:
-// - do a snapshot every 1ms for first 200ms --> 200, all (200 ms)
-// - halve (drop half of them) --> 100, every 2nd
-// - do a snapshot every 2ms for next 200ms --> 200, every 2nd (400 ms)
-// - halve --> 100, every 4th
-// - do a snapshot every 4ms for next 400ms --> 200, every 4th (800 ms)
-// - etc.
-//
-// This isn't exactly right, because we actually drop (N/2)-1 when halving,
-// but it shows the basic idea.
+// Snapshots are done in a way so that we always have a reasonable number of
+// them. We start by taking them quickly. Once we hit our limit, we cull
+// some (eg. half), and start taking them more slowly. Once we hit the
+// limit again, we again cull and then take them even more slowly, and so
+// on.
// XXX: if the program is really short, we may get no detailed snapshots...
// that's bad, do something about it.
@@ -935,12 +929,12 @@
// smallest snapshots in one hit, because when a snapshot is removed, its
// neighbours immediately cover greater timespans. So it's N^2, but N is
// small, and it's not done very often.
-static void halve_snapshots(void)
+static void cull_snapshots(void)
{
Int i, jp, j, jn;
Snapshot* min_snapshot;
- n_halvings++;
+ n_cullings++;
if (VG_(clo_verbosity) > 1)
VG_(message)(Vg_DebugMsg, "Halving snapshots...");
@@ -1085,7 +1079,7 @@
// Halve the entries, if our snapshot table is full
if (MAX_N_SNAPSHOTS == next_snapshot_i) {
- halve_snapshots();
+ cull_snapshots();
time_interval *= 2;
}
@@ -1613,7 +1607,7 @@
VG_(message)(Vg_DebugMsg, "c-reallocs: %u", n_children_reallocs);
VG_(message)(Vg_DebugMsg, "fake snapshots: %u", n_fake_snapshots);
VG_(message)(Vg_DebugMsg, "real snapshots: %u", n_real_snapshots);
- VG_(message)(Vg_DebugMsg, " halvings: %u", n_halvings);
+ VG_(message)(Vg_DebugMsg, "cullings: %u", n_cullings);
VG_(message)(Vg_DebugMsg, "XCon_redos: %u", n_getXCon_redo);
}
}
|
|
From: <sv...@va...> - 2007-09-20 10:25:16
|
Author: njn
Date: 2007-09-20 11:25:16 +0100 (Thu, 20 Sep 2007)
New Revision: 6871
Log:
Tweak some comments, add some notes, move some code around.
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-20 10:22:34 UTC (rev 6870)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 10:25:16 UTC (rev 6871)
@@ -40,6 +40,10 @@
// - Check MALLOCLIKE_BLOCK works, write regtest
// - clean up structure of ms_print
// - work out peak-taking
+// - make everything configurable, eg. max number of snapshots, frequency
+// of detailed snapshots, etc.
+// - have a test with lots of zero-sized allocations -- makes sure that
+// timespans of 0 between snapshots is ok...
//
// Misc:
// - with --heap=no, --heap-admin still counts. should it?
@@ -68,6 +72,9 @@
// #3: in-between
// - check every malloc, but not every new_mem_stack
//
+// What is the proportion of stack allocs/deallocs vs heap allocs/deallocs?
+// Try with Konqueror.
+//
// Dumping the results to file:
// - work out the file format (Josef wants Callgrind format, Donna wants
// XML, Nick wants something easy to read in Perl)
@@ -260,37 +267,10 @@
XPt** children; // pointers to children XPts
};
-// Snapshots are done so we keep a good number of them. If MAX_N_SNAPSHOTS
-// equals 200, then it works something like this:
-// - do a snapshot every 1ms for first 200ms --> 200, all (200 ms)
-// - halve (drop half of them) --> 100, every 2nd
-// - do a snapshot every 2ms for next 200ms --> 200, every 2nd (400 ms)
-// - halve --> 100, every 4th
-// - do a snapshot every 4ms for next 400ms --> 200, every 4th (800 ms)
-// - etc.
-//
-// This isn't exactly right, because we actually drop (N/2)-1 when halving,
-// but it shows the basic idea.
+//------------------------------------------------------------//
+//--- Heap blocks ---//
+//------------------------------------------------------------//
-// XXX: if the program is really short, we may get no detailed snapshots...
-// that's bad, do something about it.
-#define MAX_N_SNAPSHOTS 100 // Keep it even, for simplicity
-#define DETAILED_SNAPSHOT_FREQ 10 // Every Nth snapshot will be detailed
-
-typedef
- struct {
- // Time is measured either in ms or bytes, depending on the
- // --time-unit option. It's a Long because it can get very big with
- // --time-unit=ms.
- Long time; // Long: must allow -1.
- SizeT total_szB; // Size of all allocations at that snapshot time.
- SizeT heap_admin_szB;
- SizeT heap_szB;
- SizeT stacks_szB;
- XPt* alloc_xpt; // Heap XTree root, if a detailed snapshot,
- } // otherwise NULL
- Snapshot;
-
// Metadata for heap blocks. Each one contains a pointer to a bottom-XPt,
// which is a foothold into the XCon at which it was allocated. From
// HP_Chunks, XPt 'space' fields are incremented (at allocation) and
@@ -843,6 +823,37 @@
//--- Snapshots ---//
//------------------------------------------------------------//
+// Snapshots are done so we keep a good number of them. If MAX_N_SNAPSHOTS
+// equals 200, then it works something like this:
+// - do a snapshot every 1ms for first 200ms --> 200, all (200 ms)
+// - halve (drop half of them) --> 100, every 2nd
+// - do a snapshot every 2ms for next 200ms --> 200, every 2nd (400 ms)
+// - halve --> 100, every 4th
+// - do a snapshot every 4ms for next 400ms --> 200, every 4th (800 ms)
+// - etc.
+//
+// This isn't exactly right, because we actually drop (N/2)-1 when halving,
+// but it shows the basic idea.
+
+// XXX: if the program is really short, we may get no detailed snapshots...
+// that's bad, do something about it.
+#define MAX_N_SNAPSHOTS 100 // Keep it even, for simplicity
+#define DETAILED_SNAPSHOT_FREQ 10 // Every Nth snapshot will be detailed
+
+typedef
+ struct {
+ // Time is measured either in ms or bytes, depending on the
+ // --time-unit option. It's a Long because it can get very big with
+ // --time-unit=ms.
+ Long time; // Long: must allow -1.
+ SizeT total_szB; // Size of all allocations at that snapshot time.
+ SizeT heap_admin_szB;
+ SizeT heap_szB;
+ SizeT stacks_szB;
+ XPt* alloc_xpt; // Heap XTree root, if a detailed snapshot,
+ } // otherwise NULL
+ Snapshot;
+
static Snapshot snapshots[MAX_N_SNAPSHOTS];
static UInt next_snapshot_i = 0; // Points to where next snapshot will go.
@@ -904,7 +915,7 @@
// present.
static void delete_snapshot(Snapshot* snapshot)
{
- // Nb: if there's an XTRee, we free it after calling clear_snapshot,
+ // Nb: if there's an XTree, we free it after calling clear_snapshot,
// because clear_snapshot does a sanity check which includes checking the
// XTree.
XPt* tmp_xpt = snapshot->alloc_xpt;
|
|
From: <sv...@va...> - 2007-09-20 10:22:34
|
Author: njn
Date: 2007-09-20 11:22:34 +0100 (Thu, 20 Sep 2007)
New Revision: 6870
Log:
rename variable
Modified:
branches/MASSIF2/massif/ms_main.c
Modified: branches/MASSIF2/massif/ms_main.c
===================================================================
--- branches/MASSIF2/massif/ms_main.c 2007-09-19 22:46:18 UTC (rev 6869)
+++ branches/MASSIF2/massif/ms_main.c 2007-09-20 10:22:34 UTC (rev 6870)
@@ -43,6 +43,8 @@
//
// Misc:
// - with --heap=no, --heap-admin still counts. should it?
+// - in each XPt, record both bytes and the number of live allocations (or even
+// total allocations and total deallocations?)
//
// Work out how to take the peak.
// - exact peak, or within a certain percentage?
@@ -842,7 +844,7 @@
//------------------------------------------------------------//
static Snapshot snapshots[MAX_N_SNAPSHOTS];
-static UInt next_snapshot = 0; // Points to where next snapshot will go.
+static UInt next_snapshot_i = 0; // Points to where next snapshot will go.
static Bool is_snapshot_in_use(Snapshot* snapshot)
{
@@ -877,7 +879,7 @@
static void sanity_check_snapshots_array(void)
{
Int i;
- for (i = 0; i < next_snapshot; i++) {
+ for (i = 0; i < next_snapshot_i; i++) {
tl_assert( is_snapshot_in_use( & snapshots[i] ));
}
for ( ; i < MAX_N_SNAPSHOTS; i++) {
@@ -978,7 +980,7 @@
clear_snapshot(&snapshots[j]);
}
}
- next_snapshot = i;
+ next_snapshot_i = i;
// Check snapshots array looks ok after changes.
sanity_check_snapshots_array();
@@ -1017,8 +1019,8 @@
// Right! We're taking a real snapshot.
n_real_snapshots++;
- snapshot = & snapshots[next_snapshot];
- next_snapshot++;
+ snapshot = & snapshots[next_snapshot_i];
+ next_snapshot_i++;
tl_assert(!is_snapshot_in_use(snapshot));
// Heap -------------------------------------------------------------
@@ -1071,7 +1073,7 @@
// snapshot_heap_szB, snapshot_heap_admin_szB, snapshot_stacks_szB);
// Halve the entries, if our snapshot table is full
- if (MAX_N_SNAPSHOTS == next_snapshot) {
+ if (MAX_N_SNAPSHOTS == next_snapshot_i) {
halve_snapshots();
time_interval *= 2;
}
@@ -1564,7 +1566,7 @@
FP("time_unit: %s\n", TimeUnit_to_string(clo_time_unit));
- for (i = 0; i < next_snapshot; i++) {
+ for (i = 0; i < next_snapshot_i; i++) {
Snapshot* snapshot = & snapshots[i];
pp_snapshot(fd, snapshot, i); // Detailed snapshot!
}
|
|
From: Tom H. <th...@cy...> - 2007-09-20 02:30:45
|
Nightly build on alvis ( i686, Red Hat 7.3 ) started at 2007-09-20 03:15:01 BST 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 == 256 tests, 27 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/addressable (stderr) memcheck/tests/badjump (stderr) memcheck/tests/describe-block (stderr) memcheck/tests/erringfds (stderr) memcheck/tests/leak-0 (stderr) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-pool-0 (stderr) memcheck/tests/leak-pool-1 (stderr) memcheck/tests/leak-pool-2 (stderr) memcheck/tests/leak-pool-3 (stderr) memcheck/tests/leak-pool-4 (stderr) memcheck/tests/leak-pool-5 (stderr) memcheck/tests/leak-regroot (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/long_namespace_xml (stderr) memcheck/tests/match-overrun (stderr) memcheck/tests/partial_load_dflt (stderr) memcheck/tests/partial_load_ok (stderr) memcheck/tests/partiallydefinedeq (stderr) memcheck/tests/pointer-trace (stderr) memcheck/tests/sigkill (stderr) memcheck/tests/stack_changes (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/x86/xor-undef-x86 (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2007-09-20 02:23:36
|
Nightly build on dellow ( x86_64, Fedora 7 ) started at 2007-09-20 03:10:04 BST Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 293 tests, 4 stderr failures, 3 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_detached (stdout) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 293 tests, 4 stderr failures, 4 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/vcpu_fnfns (stdout) memcheck/tests/x86/scalar (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) none/tests/pth_cvsimple (stdout) none/tests/pth_detached (stdout) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Thu Sep 20 03:16:52 2007 --- new.short Thu Sep 20 03:23:33 2007 *************** *** 8,10 **** ! == 293 tests, 4 stderr failures, 4 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) --- 8,10 ---- ! == 293 tests, 4 stderr failures, 3 stdout failures, 0 posttest failures == memcheck/tests/pointer-trace (stderr) *************** *** 15,17 **** none/tests/mremap2 (stdout) - none/tests/pth_cvsimple (stdout) none/tests/pth_detached (stdout) --- 15,16 ---- |
|
From: Tom H. <th...@cy...> - 2007-09-20 02:17:26
|
Nightly build on lloyd ( x86_64, Fedora Core 3 ) started at 2007-09-20 03:05:06 BST 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 == 293 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) memcheck/tests/xml1 (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: Tom H. <th...@cy...> - 2007-09-20 02:11:30
|
Nightly build on gill ( x86_64, Fedora Core 2 ) started at 2007-09-20 03:00:03 BST 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 == 295 tests, 6 stderr failures, 1 stdout failure, 0 posttest failures == memcheck/tests/pointer-trace (stderr) memcheck/tests/stack_switch (stderr) memcheck/tests/x86/scalar (stderr) memcheck/tests/x86/scalar_supp (stderr) none/tests/fdleak_fcntl (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |
|
From: <js...@ac...> - 2007-09-20 01:11:36
|
Nightly build on g5 ( SuSE 10.1, ppc970 ) started at 2007-09-20 02:00:01 CEST 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 == 228 tests, 6 stderr failures, 2 stdout failures, 0 posttest failures == memcheck/tests/deep_templates (stdout) memcheck/tests/leak-cycle (stderr) memcheck/tests/leak-tree (stderr) memcheck/tests/pointer-trace (stderr) none/tests/faultstatus (stderr) none/tests/fdleak_cmsg (stderr) none/tests/mremap (stderr) none/tests/mremap2 (stdout) |