RPM Package Manager, CVS Repository
http://rpm5.org/cvs/
____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson
Root: /v/rpm/cvs Email: jbj@rpm5.org
Module: rpm Date: 19-Aug-2007 23:12:23
Branch: HEAD Handle: 2007081922122201
Modified files:
rpm CHANGES
rpm/lib poptALL.c rpmts.c
rpm/rpmdb header.c header_internal.h librpmdb.vers rpmdb.h
Log:
- enable Header performance metrics, tied to --stats.
Summary:
Revision Changes Path
1.1593 +1 -0 rpm/CHANGES
2.43 +6 -0 rpm/lib/poptALL.c
2.85 +10 -0 rpm/lib/rpmts.c
1.62 +53 -5 rpm/rpmdb/header.c
1.17 +2 -2 rpm/rpmdb/header_internal.h
1.13 +3 -1 rpm/rpmdb/librpmdb.vers
1.64 +1 -1 rpm/rpmdb/rpmdb.h
____________________________________________________________________________
patch -p0 <<'@@ .'
Index: rpm/CHANGES
============================================================================
$ cvs diff -u -r1.1592 -r1.1593 CHANGES
--- rpm/CHANGES 19 Aug 2007 19:45:46 -0000 1.1592
+++ rpm/CHANGES 19 Aug 2007 21:12:22 -0000 1.1593
@@ -1,4 +1,5 @@
4.5 -> 5.0:
+ - jbj: enable Header performance metrics, tied to --stats.
- jbj: add Header performance metrics, disabled for now.
- jbj: eliminate headerNVR, use headerNEVRA instead.
- jbj: eliminate the rpmrbFoo, use rpmcliInstallFoo instead.
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/poptALL.c
============================================================================
$ cvs diff -u -r2.42 -r2.43 poptALL.c
--- rpm/lib/poptALL.c 17 Aug 2007 16:04:50 -0000 2.42
+++ rpm/lib/poptALL.c 19 Aug 2007 21:12:23 -0000 2.43
@@ -119,6 +119,9 @@
extern int _rpmts_stats;
/*@unchecked@*/
+extern int _hdr_stats;
+
+/*@unchecked@*/
extern int _tar_debug;
/*@unchecked@*/
@@ -628,6 +631,9 @@
rpmIncreaseVerbosity();
}
+ /* Initialize header stat collection. */
+ _hdr_stats = _rpmts_stats;
+
return optCon;
}
/*@=globstate@*/
@@ .
patch -p0 <<'@@ .'
Index: rpm/lib/rpmts.c
============================================================================
$ cvs diff -u -r2.84 -r2.85 rpmts.c
--- rpm/lib/rpmts.c 1 Aug 2007 17:58:35 -0000 2.84
+++ rpm/lib/rpmts.c 19 Aug 2007 21:12:23 -0000 2.85
@@ -740,8 +740,16 @@
/*@globals fileSystem, internalState @*/
/*@modifies fileSystem, internalState @*/
{
+ extern rpmop _hdr_loadops;
+ extern rpmop _hdr_getops;
+
(void) rpmswExit(rpmtsOp(ts, RPMTS_OP_TOTAL), 0);
+ if (_hdr_loadops)
+ rpmswAdd(rpmtsOp(ts, RPMTS_OP_HDRLOAD), _hdr_loadops);
+ if (_hdr_getops)
+ rpmswAdd(rpmtsOp(ts, RPMTS_OP_HDRGET), _hdr_getops);
+
rpmtsPrintStat("total: ", rpmtsOp(ts, RPMTS_OP_TOTAL));
rpmtsPrintStat("check: ", rpmtsOp(ts, RPMTS_OP_CHECK));
rpmtsPrintStat("order: ", rpmtsOp(ts, RPMTS_OP_ORDER));
@@ -760,6 +768,8 @@
rpmtsPrintStat("dbput: ", rpmtsOp(ts, RPMTS_OP_DBPUT));
rpmtsPrintStat("dbdel: ", rpmtsOp(ts, RPMTS_OP_DBDEL));
rpmtsPrintStat("readhdr: ", rpmtsOp(ts, RPMTS_OP_READHDR));
+ rpmtsPrintStat("hdrload: ", rpmtsOp(ts, RPMTS_OP_HDRLOAD));
+ rpmtsPrintStat("hdrget: ", rpmtsOp(ts, RPMTS_OP_HDRGET));
}
rpmts rpmtsFree(rpmts ts)
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header.c
============================================================================
$ cvs diff -u -r1.61 -r1.62 header.c
--- rpm/rpmdb/header.c 19 Aug 2007 19:45:47 -0000 1.61
+++ rpm/rpmdb/header.c 19 Aug 2007 21:12:23 -0000 1.62
@@ -137,7 +137,15 @@
* Global header stats enabler.
*/
/*@unchecked@*/
-int _hdr_stats;
+int _hdr_stats = 0;
+/*@unchecked@*/
+static struct rpmop_s hdr_loadops;
+/*@unchecked@*/
+rpmop _hdr_loadops = &hdr_loadops;
+/*@unchecked@*/
+static struct rpmop_s hdr_getops;
+/*@unchecked@*/
+rpmop _hdr_getops = &hdr_getops;
/** \ingroup header
* Return header stats accumulator structure.
@@ -152,8 +160,8 @@
rpmop op = NULL;
if (_hdr_stats)
switch (opx) {
- case 18: op = &h->hops_load; break; /* RPMTS_OP_HDRLOAD */
- case 19: op = &h->hops_get; break; /* RPMTS_OP_HDRGET */
+ case 18: op = &h->h_loadops; break; /* RPMTS_OP_HDRLOAD */
+ case 19: op = &h->h_getops; break; /* RPMTS_OP_HDRGET */
}
return op;
}
@@ -234,6 +242,13 @@
}
h->origin = _free(h->origin);
+ if (_hdr_stats) {
+ if (_hdr_loadops) /* RPMTS_OP_HDRLOAD */
+ (void) rpmswAdd(_hdr_loadops, headerGetStats(h, 18));
+ if (_hdr_getops) /* RPMTS_OP_HDRGET */
+ (void) rpmswAdd(_hdr_getops, headerGetStats(h, 19));
+ }
+
/*@-refcounttrans@*/ h = _free(h); /*@=refcounttrans@*/
return h;
/*@=usereleased@*/
@@ -646,6 +661,7 @@
/*@requires maxSet(lengthPtr) >= 0 @*/
/*@ensures maxRead(result) == (*lengthPtr) @*/
{
+ void * sw;
int_32 * ei = NULL;
entryInfo pe;
char * dataStart;
@@ -661,6 +677,9 @@
int driplen, ndrips;
int legacy = 0;
+ if ((sw = headerGetStats(h, 18)) != NULL) /* RPMTS_OP_HDRLOAD */
+ (void) rpmswEnter(sw, 0);
+
/* Sort entries by (offset,tag). */
headerUnsort(h);
@@ -909,9 +928,12 @@
h->flags &= ~HEADERFLAG_SORTED;
headerSort(h);
+ if (sw != NULL) (void) rpmswExit(sw, len);
+
return (void *) ei;
errxit:
+ if (sw != NULL) (void) rpmswExit(sw, len);
/*@-usereleased@*/
ei = _free(ei);
/*@=usereleased@*/
@@ -1041,6 +1063,7 @@
Header headerLoad(/*@kept@*/ void * uh)
/*@modifies uh @*/
{
+ void * sw;
int_32 * ei = (int_32 *) uh;
int_32 il = ntohl(ei[0]); /* index length */
int_32 dl = ntohl(ei[1]); /* data length */
@@ -1069,6 +1092,8 @@
dataEnd = dataStart + dl;
h = xcalloc(1, sizeof(*h));
+ if ((sw = headerGetStats(h, 18)) != NULL) /* RPMTS_OP_HDRLOAD */
+ (void) rpmswEnter(sw, 0);
{ unsigned char * hmagic = (_newmagic ? meta_magic : header_magic);
(void) memcpy(h->magic, hmagic, sizeof(h->magic));
}
@@ -1205,6 +1230,9 @@
h->flags &= ~HEADERFLAG_SORTED;
headerSort(h);
+ if (sw != NULL)
+ (void) rpmswExit(sw, pvlen);
+
/*@-globstate -observertrans @*/
return h;
/*@=globstate =observertrans @*/
@@ -1930,12 +1958,16 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
+ void * sw;
const char * name = tagName(tag);
headerSprintfExtension exts = (headerSprintfExtension)headerCompoundFormats;
headerSprintfExtension ext;
int extNum;
int rc;
+ if ((sw = headerGetStats(h, 19)) != NULL) /* RPMTS_OP_HDRGET */
+ (void) rpmswEnter(sw, 0);
+
/* Search extensions for specific tag override. */
for (ext = exts, extNum = 0; ext != NULL && ext->type != HEADER_EXT_LAST;
ext = (ext->type == HEADER_EXT_MORE ? ext->u.more : ext+1), extNum++)
@@ -1954,6 +1986,8 @@
/* XXX Returned data is always allocated. */
+ if (sw != NULL) (void) rpmswExit(sw, 0);
+
return rc;
}
@@ -1978,7 +2012,14 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
- return intGetEntry(h, tag, type, (hPTR_t *)p, c, 0);
+ void * sw;
+ int rc;
+
+ if ((sw = headerGetStats(h, 19)) != NULL) /* RPMTS_OP_HDRGET */
+ (void) rpmswEnter(sw, 0);
+ rc = intGetEntry(h, tag, type, (hPTR_t *)p, c, 0);
+ if (sw != NULL) (void) rpmswExit(sw, 0);
+ return rc;
}
/** \ingroup header
@@ -2001,7 +2042,14 @@
/*@modifies *type, *p, *c @*/
/*@requires maxSet(type) >= 0 /\ maxSet(p) >= 0 /\ maxSet(c) >= 0 @*/
{
- return intGetEntry(h, tag, type, p, c, 1);
+ void * sw;
+ int rc;
+
+ if ((sw = headerGetStats(h, 19)) != NULL) /* RPMTS_OP_HDRGET */
+ (void) rpmswEnter(sw, 0);
+ rc = intGetEntry(h, tag, type, p, c, 1);
+ if (sw != NULL) (void) rpmswExit(sw, 0);
+ return rc;
}
int headerGetRawEntry(Header h, int_32 tag, int_32 * type, void * p, int_32 * c)
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/header_internal.h
============================================================================
$ cvs diff -u -r1.16 -r1.17 header_internal.h
--- rpm/rpmdb/header_internal.h 19 Aug 2007 19:45:47 -0000 1.16
+++ rpm/rpmdb/header_internal.h 19 Aug 2007 21:12:23 -0000 1.17
@@ -61,8 +61,8 @@
/*@only@*/ /*@null@*/
const char * origin; /*!< Header origin (e.g. path or URL). */
int_32 instance; /*!< Header instance (if from rpmdb). */
- struct rpmop_s hops_load;
- struct rpmop_s hops_get;
+ struct rpmop_s h_loadops;
+ struct rpmop_s h_getops;
/*@owned@*/
indexEntry index; /*!< Array of tags. */
int indexUsed; /*!< Current size of tag array. */
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/librpmdb.vers
============================================================================
$ cvs diff -u -r1.12 -r1.13 librpmdb.vers
--- rpm/rpmdb/librpmdb.vers 19 Aug 2007 19:45:47 -0000 1.12
+++ rpm/rpmdb/librpmdb.vers 19 Aug 2007 21:12:23 -0000 1.13
@@ -23,6 +23,8 @@
fpLookup;
fpLookupList;
_hdr_debug;
+ _hdr_getops;
+ _hdr_loadops;
_hdr_stats;
hdrVec;
headerCompoundFormats;
@@ -35,7 +37,6 @@
headerNEVRA;
hGetColor;
_init;
- rpm_mergesort;
_newmagic;
prDbiOpenFlags;
rdbOptions;
@@ -71,6 +72,7 @@
rpmdbSync;
rpmdbVerify;
rpmdbVerifyAllDBI;
+ rpm_mergesort;
rpmTagTable;
rpmTagTableSize;
rpmTags;
@@ .
patch -p0 <<'@@ .'
Index: rpm/rpmdb/rpmdb.h
============================================================================
$ cvs diff -u -r1.63 -r1.64 rpmdb.h
--- rpm/rpmdb/rpmdb.h 2 Aug 2007 17:15:42 -0000 1.63
+++ rpm/rpmdb/rpmdb.h 19 Aug 2007 21:12:23 -0000 1.64
@@ -60,7 +60,7 @@
typedef /*@abstract@*/ struct _dbiIndex * dbiIndex;
#if defined(_RPMDB_INTERNAL)
-#include "rpmsw.h"
+#include <rpmsw.h>
#if !defined(SWIG) /* XXX inline dbiFoo() need */
/** \ingroup dbi
* A single item from an index database (i.e. the "data returned").
@@ .
Received on Sun Aug 19 23:12:23 2007