/*
- * $Id: client_side.cc,v 1.262 1998/04/08 00:34:01 wessels Exp $
+ * $Id: client_side.cc,v 1.263 1998/04/08 19:28:47 wessels Exp $
*
* DEBUG: section 33 Client-side Routines
* AUTHOR: Duane Wessels
icp_ping_data *i;
#if SQUID_PEER_DIGEST
const HttpReply *reply = NULL;
+ int sst = 0; /* server-side service time */
+ HierarchyLogEntry *H;
#endif
Counter.client_http.requests++;
kb_incr(&Counter.client_http.kbytes_in, http->req_sz);
if (0 != i->stop.tv_sec && 0 != i->start.tv_sec)
statHistCount(&Counter.icp.query_svc_time, tvSubUsec(i->start, i->stop));
#if SQUID_PEER_DIGEST
- if (http->request->hier.alg == PEER_SA_ICP) {
+ H = &http->request->hier;
+ if (H->peer_select_start.tv_sec && H->store_complete_stop.tv_sec)
+ sst = tvSubMsec(H->peer_select_start, H->store_complete_stop);
+ if (H->alg == PEER_SA_ICP) {
statHistCount(&Counter.icp.client_svc_time, svc_time);
+ if (sst)
+ statHistCount(&Counter.icp.server_svc_time, svc_time);
Counter.icp.times_used++;
} else
- if (http->request->hier.alg == PEER_SA_DIGEST) {
+ if (H->alg == PEER_SA_DIGEST) {
statHistCount(&Counter.cd.client_svc_time, svc_time);
+ if (sst)
+ statHistCount(&Counter.cd.server_svc_time, svc_time);
Counter.cd.times_used++;
} else {
- assert(http->request->hier.alg == PEER_SA_NONE);
+ assert(H->alg == PEER_SA_NONE);
}
if (/* we used ICP or CD for peer selecton */
- http->request->hier.alg != PEER_SA_NONE &&
+ H->alg != PEER_SA_NONE &&
/* a CD lookup found peers with digests */
- http->request->hier.cd_lookup != LOOKUP_NONE &&
+ H->cd_lookup != LOOKUP_NONE &&
/* paranoid: we have a reply pointer */
(reply = storeEntryReply(http->entry))) {
const char *x_cache_fld = httpHeaderGetLastStr(&reply->header, HDR_X_CACHE);
const int real_hit = x_cache_fld && !strncmp(x_cache_fld, "HIT", 3);
- const int guess_hit = http->request->hier.cd_lookup == LOOKUP_HIT;
- peer *peer = peerFindByName(http->request->hier.host);
+ const int guess_hit = H->cd_lookup == LOOKUP_HIT;
+ peer *peer = peerFindByName(H->host);
- cacheDigestGuessStatsUpdate(&Counter.cd.guess_stats,
- real_hit, guess_hit);
+ cacheDigestGuessStatsUpdate(&Counter.cd.guess, real_hit, guess_hit);
if (peer)
cacheDigestGuessStatsUpdate(&peer->digest.stats.guess,
real_hit, guess_hit);
/*
- * $Id: peer_select.cc,v 1.45 1998/04/07 23:53:20 rousskov Exp $
+ * $Id: peer_select.cc,v 1.46 1998/04/08 19:28:48 wessels Exp $
*
* DEBUG: section 44 Peer Selection Algorithm
* AUTHOR: Duane Wessels
psstate->callback_data = callback_data;
cbdataLock(callback_data);
peerSelectCheckAS(psstate);
+#if SQUID_PEER_DIGEST
+ request->hier.peer_select_start = current_time;
+#endif
}
static void
/*
- * $Id: squid.h,v 1.171 1998/04/08 19:01:50 wessels Exp $
+ * $Id: squid.h,v 1.172 1998/04/08 19:28:49 wessels Exp $
*
* AUTHOR: Duane Wessels
*
* maintain a digest of cache contents and send the digest to neighbors upon
* request; if disabled we still can request digests from other caches
*/
-#define SQUID_MAINTAIN_CACHE_DIGEST 0
+#define SQUID_MAINTAIN_CACHE_DIGEST 1
/*
* ask peers about their digests and use them
* must be set before including structs.h
*/
-#define SQUID_PEER_DIGEST 0
+#define SQUID_PEER_DIGEST 1
#include "defines.h"
#include "enums.h"
/*
- * $Id: stat.cc,v 1.225 1998/04/07 23:58:31 rousskov Exp $
+ * $Id: stat.cc,v 1.226 1998/04/08 19:28:50 wessels Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
&f->cd.client_svc_time);
storeAppendPrintf(sentry, "cd.client_median_svc_time = %f seconds\n",
x / 1000.0);
+ x = statHistDeltaMedian(&l->cd.server_svc_time,
+ &f->cd.server_svc_time);
+ storeAppendPrintf(sentry, "cd.server_median_svc_time = %f seconds\n",
+ x / 1000.0);
x = statHistDeltaMedian(&l->icp.client_svc_time,
&f->icp.client_svc_time);
storeAppendPrintf(sentry, "icp.client_median_svc_time = %f seconds\n",
x / 1000.0);
+ x = statHistDeltaMedian(&l->icp.server_svc_time,
+ &f->icp.server_svc_time);
+ storeAppendPrintf(sentry, "icp.server_median_svc_time = %f seconds\n",
+ x / 1000.0);
#endif
storeAppendPrintf(sentry, "server.all.requests = %f/sec\n",
*/
statHistLogInit(&C->cd.client_svc_time, 300, 0.0, 3600000.0 * 30.0);
statHistLogInit(&C->icp.client_svc_time, 300, 0.0, 3600000.0 * 30.0);
+ statHistLogInit(&C->cd.server_svc_time, 300, 0.0, 3600000.0 * 30.0);
+ statHistLogInit(&C->icp.server_svc_time, 300, 0.0, 3600000.0 * 30.0);
#endif
}
#if SQUID_PEER_DIGEST
statHistClean(&C->cd.client_svc_time);
statHistClean(&C->icp.client_svc_time);
+ statHistClean(&C->cd.server_svc_time);
+ statHistClean(&C->icp.server_svc_time);
#endif
}
#if SQUID_PEER_DIGEST
statHistCopy(&dest->cd.client_svc_time, &orig->cd.client_svc_time);
statHistCopy(&dest->icp.client_svc_time, &orig->icp.client_svc_time);
+ statHistCopy(&dest->cd.server_svc_time, &orig->cd.server_svc_time);
+ statHistCopy(&dest->icp.server_svc_time, &orig->icp.server_svc_time);
#endif
}
/*
- * $Id: store.cc,v 1.401 1998/04/07 23:59:26 rousskov Exp $
+ * $Id: store.cc,v 1.402 1998/04/08 19:28:51 wessels Exp $
*
* DEBUG: section 20 Storage Manager
* AUTHOR: Harvest Derived
assert(e->mem_status == NOT_IN_MEMORY);
if (!storeEntryValidLength(e))
EBIT_SET(e->flag, ENTRY_BAD_LENGTH);
+#if SQUID_PEER_DIGEST
+ e->mem_obj->request->hier.store_complete_stop = current_time;
+#endif
InvokeHandlers(e);
storeCheckSwapOut(e);
}
lookup_t cd_lookup; /* cd prediction: none, miss, hit */
int n_choices; /* #peers we selected from (cd only) */
int n_ichoices; /* #peers with known rtt we selected from (cd only) */
+ struct timeval peer_select_start;
+ struct timeval store_complete_stop;
#endif
};
StatHist reply_svc_time;
#if SQUID_PEER_DIGEST
StatHist client_svc_time;
+ StatHist server_svc_time;
int times_used;
#endif
} icp;
kb_t memory;
cd_guess_stats guess;
StatHist client_svc_time;
+ StatHist server_svc_time;
} cd;
#endif
int page_faults;