From 31b518fcf184ba122b6faab54e2e4fa0d37605a3 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Tue, 14 Aug 2012 17:25:44 -0500 Subject: [PATCH] viced: Move host quota calculation Calculate this during initialization, not every time we want to use it. Change-Id: I931d2f3f0b4b99add682c098dd51f03c9942f5b4 Reviewed-on: http://gerrit.openafs.org/9710 Reviewed-by: Derrick Brashear Tested-by: BuildBot --- src/viced/host.c | 20 +++++++------------- src/viced/host.h | 2 +- src/viced/viced.c | 13 ++++++++++++- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/viced/host.c b/src/viced/host.c index 33ff9c830..c24841c97 100644 --- a/src/viced/host.c +++ b/src/viced/host.c @@ -69,6 +69,7 @@ int rxcon_ident_key; int rxcon_client_key; static struct rx_securityClass *sc = NULL; +static int h_quota_limit; /* arguments for PerHost_EnumerateClient enumeration */ struct enumclient_args { @@ -1606,18 +1607,8 @@ removeInterfaceAddr_r(struct host *host, afs_uint32 addr, afs_uint16 port) static int h_threadquota(int waiting) { - if (lwps > 64) { - if (waiting > 5) - return 1; - } else if (lwps > 32) { - if (waiting > 4) - return 1; - } else if (lwps > 16) { - if (waiting > 3) - return 1; - } else { - if (waiting > 2) - return 1; + if (waiting > h_quota_limit) { + return 1; } return 0; } @@ -2185,8 +2176,11 @@ h_GetHost_r(struct rx_connection *tcon) /* not reentrant */ void -h_InitHostPackage(void) +h_InitHostPackage(int hquota) { + opr_Assert(hquota > 0); + h_quota_limit = hquota; + memset(&nulluuid, 0, sizeof(afsUUID)); rxcon_ident_key = rx_KeyCreate((rx_destructor_t) free); rxcon_client_key = rx_KeyCreate((rx_destructor_t) 0); diff --git a/src/viced/host.h b/src/viced/host.h index 82338699e..06776a2fe 100644 --- a/src/viced/host.h +++ b/src/viced/host.h @@ -225,7 +225,7 @@ extern void h_GetHostNetStats(afs_int32 * a_numHostsP, afs_int32 * a_sameNetOrSu afs_int32 * a_diffSubnetP, afs_int32 * a_diffNetworkP); extern int h_NBLock_r(struct host *host); extern void h_DumpHosts(void); -extern void h_InitHostPackage(void); +extern void h_InitHostPackage(int hquota); extern void h_CheckHosts(void ); extern void h_AddHostToAddrHashTable_r(afs_uint32 addr, afs_uint16 port, struct host * host); extern void h_AddHostToUuidHashTable_r(afsUUID * uuid, struct host * host); diff --git a/src/viced/viced.c b/src/viced/viced.c index e47bcbcb3..537607402 100644 --- a/src/viced/viced.c +++ b/src/viced/viced.c @@ -153,6 +153,7 @@ static int panic_timeout = 2 * 60; static int panic_timeout = 30 * 60; #endif +static int host_thread_quota; int rxpackets = 150; /* 100 */ int nSmallVns = 400; /* 200 */ int large = 400; /* 200 */ @@ -1433,6 +1434,16 @@ ParseArgs(int argc, char *argv[]) if (auditFileName) osi_audit_file(auditFileName); + if (lwps > 64) { + host_thread_quota = 5; + } else if (lwps > 32) { + host_thread_quota = 4; + } else if (lwps > 16) { + host_thread_quota = 3; + } else { + host_thread_quota = 2; + } + return (0); } /*ParseArgs */ @@ -2064,7 +2075,7 @@ main(int argc, char *argv[]) } init_sys_error_to_et(); /* Set up error table translation */ - h_InitHostPackage(); /* set up local cellname and realmname */ + h_InitHostPackage(host_thread_quota); /* set up local cellname and realmname */ InitCallBack(numberofcbs); ClearXStatValues(); -- 2.39.5