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
(4) |
2
(3) |
3
(7) |
4
(7) |
5
(6) |
6
(5) |
|
7
(21) |
8
(14) |
9
(8) |
10
(10) |
11
(7) |
12
(4) |
13
|
|
14
(3) |
15
(11) |
16
(4) |
17
|
18
|
19
|
20
|
|
21
(3) |
22
(4) |
23
(2) |
24
(3) |
25
|
26
(4) |
27
(2) |
|
28
(6) |
29
|
30
(2) |
31
(7) |
|
|
|
|
From: <sv...@va...> - 2010-03-14 17:19:21
|
Author: sewardj
Date: 2010-03-14 17:19:02 +0000 (Sun, 14 Mar 2010)
New Revision: 11093
Log:
Inline most functions in VG_(use_CF_info). May or may not give a
3% performance increase for Helgrind in default (detailed-history)
mode.
Modified:
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/include/pub_tool_libcbase.h
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
===================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c 2010-03-14 15:53:53 UTC (rev 11092)
+++ trunk/coregrind/m_debuginfo/debuginfo.c 2010-03-14 17:19:02 UTC (rev 11093)
@@ -1896,7 +1896,8 @@
/* Evaluate the CfiExpr rooted at ix in exprs given the context eec.
*ok is set to False on failure, but not to True on success. The
caller must set it to True before calling. */
-static
+__attribute__((noinline))
+static
UWord evalCfiExpr ( XArray* exprs, Int ix,
CfiExprEvalContext* eec, Bool* ok )
{
@@ -2079,7 +2080,7 @@
}
-static CFSICacheEnt* cfsi_cache__find ( Addr ip )
+static inline CFSICacheEnt* cfsi_cache__find ( Addr ip )
{
UWord hash = ip % N_CFSI_CACHE;
CFSICacheEnt* ce = &cfsi_cache[hash];
@@ -2108,6 +2109,7 @@
}
+inline
static Addr compute_cfa ( D3UnwindRegs* uregs,
Addr min_accessible, Addr max_accessible,
DebugInfo* di, DiCfSI* cfsi )
@@ -2237,7 +2239,7 @@
ML_(ppDiCfSI)(di->cfsi_exprs, cfsi);
}
- VG_(memset)(&uregsPrev, 0, sizeof(uregsPrev));
+ VG_(bzero_inline)(&uregsPrev, sizeof(uregsPrev));
/* First compute the CFA. */
cfa = compute_cfa(uregsHere,
Modified: trunk/include/pub_tool_libcbase.h
===================================================================
--- trunk/include/pub_tool_libcbase.h 2010-03-14 15:53:53 UTC (rev 11092)
+++ trunk/include/pub_tool_libcbase.h 2010-03-14 17:19:02 UTC (rev 11093)
@@ -110,6 +110,36 @@
extern void* VG_(memset) ( void *s, Int c, SizeT sz );
extern Int VG_(memcmp) ( const void* s1, const void* s2, SizeT n );
+/* Zero out up to 8 words quickly in-line. Do not use this for blocks
+ of size which are unknown at compile time, since the whole point is
+ for it to be inlined, and then for gcc to remove all code except
+ for the relevant 'sz' case. */
+inline __attribute__((always_inline))
+static void VG_(bzero_inline) ( void* s, SizeT sz )
+{
+ if (LIKELY(0 == (((Addr)sz) & (Addr)(sizeof(UWord)-1)))
+ && LIKELY(0 == (((Addr)s) & (Addr)(sizeof(UWord)-1)))) {
+ UWord* p = (UWord*)s;
+ switch (sz / (SizeT)sizeof(UWord)) {
+ case 8: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = p[7] = 0UL; return;
+ case 7: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = p[6] = 0UL; return;
+ case 6: p[0] = p[1] = p[2] = p[3]
+ = p[4] = p[5] = 0UL; return;
+ case 5: p[0] = p[1] = p[2] = p[3] = p[4] = 0UL; return;
+ case 4: p[0] = p[1] = p[2] = p[3] = 0UL; return;
+ case 3: p[0] = p[1] = p[2] = 0UL; return;
+ case 2: p[0] = p[1] = 0UL; return;
+ case 1: p[0] = 1; return;
+ case 0: return;
+ default: break;
+ }
+ }
+ VG_(memset)(s, 0, sz);
+}
+
+
/* ---------------------------------------------------------------------
Address computation helpers
------------------------------------------------------------------ */
|
|
From: <sv...@va...> - 2010-03-14 15:54:10
|
Author: tom
Date: 2010-03-14 15:53:53 +0000 (Sun, 14 Mar 2010)
New Revision: 11092
Log:
Enabled getsid in ptrcheck. Fixe #230593.
Modified:
trunk/exp-ptrcheck/h_main.c
Modified: trunk/exp-ptrcheck/h_main.c
===================================================================
--- trunk/exp-ptrcheck/h_main.c 2010-03-14 15:09:27 UTC (rev 11091)
+++ trunk/exp-ptrcheck/h_main.c 2010-03-14 15:53:53 UTC (rev 11092)
@@ -2316,6 +2316,7 @@
# endif
ADD(0, __NR_getrlimit);
ADD(0, __NR_getrusage);
+ ADD(0, __NR_getsid);
# if defined(__NR_getsockname)
ADD(0, __NR_getsockname);
# endif
|
|
From: <sv...@va...> - 2010-03-14 15:09:49
|
Author: sewardj
Date: 2010-03-14 15:09:27 +0000 (Sun, 14 Mar 2010)
New Revision: 11091
Log:
Improve performance of the fallback path when a translation is not
found in the fast-cache.
* reduce max loading of the per-sector TT hash tables from 80% to 65%.
This reduces the number of required probes by a factor of 3.
* when searching for a translation, don't visit the sectors in a fixed
order. Instead, use an MTF array in which the most popular sectors
(in terms of most likely to hold the translation we're looking for)
are visited first. This reduces the number of required probes by
another factor of 2.
These improvements have no effect on small programs, but improve
scalability on big apps. For an application comprising 300k
translations, runtime on Memcheck is reduced by 3% and on None by
about 20%. The average number of probes per fast-cache miss is
reduced from around 22 to less than 5.
Modified:
trunk/coregrind/m_scheduler/scheduler.c
trunk/coregrind/m_transtab.c
Modified: trunk/coregrind/m_scheduler/scheduler.c
===================================================================
--- trunk/coregrind/m_scheduler/scheduler.c 2010-03-11 13:58:50 UTC (rev 11090)
+++ trunk/coregrind/m_scheduler/scheduler.c 2010-03-14 15:09:27 UTC (rev 11091)
@@ -852,7 +852,7 @@
/* Trivial event. Miss in the fast-cache. Do a full
lookup for it. */
found = VG_(search_transtab)( NULL, ip, True/*upd_fast_cache*/ );
- if (!found) {
+ if (UNLIKELY(!found)) {
/* Not found; we need to request a translation. */
if (VG_(translate)( tid, ip, /*debug*/False, 0/*not verbose*/,
bbs_done, True/*allow redirection*/ )) {
Modified: trunk/coregrind/m_transtab.c
===================================================================
--- trunk/coregrind/m_transtab.c 2010-03-11 13:58:50 UTC (rev 11090)
+++ trunk/coregrind/m_transtab.c 2010-03-14 15:09:27 UTC (rev 11091)
@@ -71,7 +71,7 @@
/* Because each sector contains a hash table of TTEntries, we need to
specify the maximum allowable loading, after which the sector is
deemed full. */
-#define SECTOR_TT_LIMIT_PERCENT 80
+#define SECTOR_TT_LIMIT_PERCENT 65
/* The sector is deemed full when this many entries are in it. */
#define N_TTES_PER_SECTOR_USABLE \
@@ -207,6 +207,13 @@
static Int tc_sector_szQ;
+/* A list of sector numbers, in the order which they should be
+ searched to find translations. This is an optimisation to be used
+ when searching for translations and should not affect
+ correctness. -1 denotes "no entry". */
+static Int sector_search_order[N_SECTORS];
+
+
/* Fast helper for the TC. A direct-mapped cache which holds a set of
recently used (guest address, host address) pairs. This array is
referred to directly from m_dispatch/dispatch-<platform>.S.
@@ -570,6 +577,44 @@
static Bool sanity_check_redir_tt_tc ( void );
static Bool sanity_check_fastcache ( void );
+static Bool sanity_check_sector_search_order ( void )
+{
+ Int i, j, nListed;
+ /* assert the array is the right size */
+ vg_assert(N_SECTORS == (sizeof(sector_search_order)
+ / sizeof(sector_search_order[0])));
+ /* Check it's of the form valid_sector_numbers ++ [-1, -1, ..] */
+ for (i = 0; i < N_SECTORS; i++) {
+ if (sector_search_order[i] < 0 || sector_search_order[i] >= N_SECTORS)
+ break;
+ }
+ nListed = i;
+ for (/* */; i < N_SECTORS; i++) {
+ if (sector_search_order[i] != -1)
+ break;
+ }
+ if (i != N_SECTORS)
+ return False;
+ /* Check each sector number only appears once */
+ for (i = 0; i < N_SECTORS; i++) {
+ if (sector_search_order[i] == -1)
+ continue;
+ for (j = i+1; j < N_SECTORS; j++) {
+ if (sector_search_order[j] == sector_search_order[i])
+ return False;
+ }
+ }
+ /* Check that the number of listed sectors equals the number
+ in use, by counting nListed back down. */
+ for (i = 0; i < N_SECTORS; i++) {
+ if (sectors[i].tc != NULL)
+ nListed--;
+ }
+ if (nListed != 0)
+ return False;
+ return True;
+}
+
static Bool sanity_check_all_sectors ( void )
{
Int sno;
@@ -587,10 +632,13 @@
return False;
if ( !sanity_check_fastcache() )
return False;
+ if ( !sanity_check_sector_search_order() )
+ return False;
return True;
}
+
/*-------------------------------------------------------------*/
/*--- Add/find translations ---*/
/*-------------------------------------------------------------*/
@@ -703,6 +751,9 @@
Sector* sec;
vg_assert(isValidSector(sno));
+ { Bool sane = sanity_check_sector_search_order();
+ vg_assert(sane);
+ }
sec = §ors[sno];
if (sec->tc == NULL) {
@@ -742,6 +793,14 @@
sec->tt[i].n_tte2ec = 0;
}
+ /* Add an entry in the sector_search_order */
+ for (i = 0; i < N_SECTORS; i++) {
+ if (sector_search_order[i] == -1)
+ break;
+ }
+ vg_assert(i >= 0 && i < N_SECTORS);
+ sector_search_order[i] = sno;
+
if (VG_(clo_verbosity) > 2)
VG_(message)(Vg_DebugMsg, "TT/TC: initialise sector %d\n", sno);
@@ -786,6 +845,14 @@
}
}
+ /* Sanity check: ensure it is already in
+ sector_search_order[]. */
+ for (i = 0; i < N_SECTORS; i++) {
+ if (sector_search_order[i] == sno)
+ break;
+ }
+ vg_assert(i >= 0 && i < N_SECTORS);
+
if (VG_(clo_verbosity) > 2)
VG_(message)(Vg_DebugMsg, "TT/TC: recycle sector %d\n", sno);
}
@@ -794,6 +861,10 @@
sec->tt_n_inuse = 0;
invalidateFastCache();
+
+ { Bool sane = sanity_check_sector_search_order();
+ vg_assert(sane);
+ }
}
static void invalidate_icache ( void *ptr, Int nbytes )
@@ -986,14 +1057,13 @@
kstart = HASH_TT(guest_addr);
vg_assert(kstart >= 0 && kstart < N_TTES_PER_SECTOR);
- /* Search in all the sectors. Although the order should not matter,
- it might be most efficient to search in the order youngest to
- oldest. */
- sno = youngest_sector;
+ /* Search in all the sectors,using sector_search_order[] as a
+ heuristic guide as to what order to visit the sectors. */
for (i = 0; i < N_SECTORS; i++) {
- if (sectors[sno].tc == NULL)
- goto notfound; /* sector not in use. */
+ sno = sector_search_order[i];
+ if (UNLIKELY(sno == -1))
+ return False; /* run out of sectors to search */
k = kstart;
for (j = 0; j < N_TTES_PER_SECTOR; j++) {
@@ -1007,6 +1077,14 @@
§ors[sno].tt[k].count );
if (result)
*result = (AddrH)sectors[sno].tt[k].tcptr;
+ /* pull this one one step closer to the front. For large
+ apps this more or less halves the number of required
+ probes. */
+ if (i > 0) {
+ Int tmp = sector_search_order[i-1];
+ sector_search_order[i-1] = sector_search_order[i];
+ sector_search_order[i] = tmp;
+ }
return True;
}
if (sectors[sno].tt[k].status == Empty)
@@ -1019,10 +1097,6 @@
/* If we fall off the end, all entries are InUse and not
matching, or Deleted. In any case we did not find it in this
sector. */
-
- notfound:
- /* move to the next oldest sector */
- sno = sno==0 ? (N_SECTORS-1) : (sno-1);
}
/* Not found in any sector. */
@@ -1498,6 +1572,10 @@
}
}
+ /* Initialise the sector_search_order hint table. */
+ for (i = 0; i < N_SECTORS; i++)
+ sector_search_order[i] = -1;
+
/* Initialise the fast caches. If not profiling (the usual case),
we have to explicitly invalidate the fastN cache as
invalidateFastCache() won't do that for us. */
|