[asterisk-commits] murf: branch murf/bug11210 r99222 - in /team/murf/bug11210: channels/ configs/
SVN commits to the Asterisk project
asterisk-commits at lists.digium.com
Tue Jan 22 10:39:02 CST 2008
Author: murf
Date: Sat Jan 19 13:24:14 2008
New Revision: 99222
URL: http://svn.digium.com/view/asterisk?view=rev&rev=99222
Log:
Made IAX hash table sizes settable via the config file.
Modified:
team/murf/bug11210/channels/chan_iax2.c
team/murf/bug11210/configs/iax.conf.sample
Change Statistics:
team/murf/bug11210/channels/chan_iax2.c | 67 +++++++++++++----
team/murf/bug11210/configs/iax.conf.sample | 37 +++++++++
2 files changed, 89 insertions(+), 15 deletions(-)
Modified: team/murf/bug11210/channels/chan_iax2.c
URL: http://svn.digium.com/view/asterisk/team/murf/bug11210/channels/chan_iax2.c?view=diff&rev=99222&r1=99221&r2=99222
==============================================================================
--- team/murf/bug11210/channels/chan_iax2.c (original)
+++ team/murf/bug11210/channels/chan_iax2.c Sat Jan 19 13:24:14 2008
@@ -655,18 +655,20 @@
* containers is considered random, so you will not be able to depend on
* the order the entires are specified in iax.conf for matching order. */
#ifdef LOW_MEMORY
-#define MAX_PEER_BUCKETS 17
+static int hash_peer_size = 17;
+static int hash_user_size = 17;
+static int hash_findcallno_size = 17;
+static int hash_findcallno3_size = 17;
+static int hash_findcallno4_size = 17;
#else
-#define MAX_PEER_BUCKETS 563
+static int hash_peer_size = 563;
+static int hash_user_size = 563;
+static int hash_findcallno_size = 563;
+static int hash_findcallno3_size = 151;
+static int hash_findcallno4_size = 61;
#endif
+
static struct ao2_container *peers;
-
-#define MAX_USER_BUCKETS MAX_PEER_BUCKETS
-
-#define MAX_FINDCALL1_BUCKETS 563
-#define MAX_FINDCALL2_BUCKETS 563
-#define MAX_FINDCALL3_BUCKETS 153
-#define MAX_FINDCALL4_BUCKETS 153
static struct ao2_container *users;
@@ -11012,6 +11014,41 @@
} else {
amaflags = format;
}
+ } else if (!strcasecmp(v->name, "hash_user")) {
+ int i;
+ if (sscanf(v->value, "%d", &i) > 2) {
+ hash_user_size = i;
+ } else {
+ ast_log(LOG_WARNING, "Invalid hash_user size '%s' at line %d -- should be much larger than 2\n", v->value, v->lineno);
+ }
+ } else if (!strcasecmp(v->name, "hash_peer")) {
+ int i;
+ if (sscanf(v->value, "%d", &i) > 2) {
+ hash_peer_size = i;
+ } else {
+ ast_log(LOG_WARNING, "Invalid hash_peer size '%s' at line %d -- should be much larger than 2\n", v->value, v->lineno);
+ }
+ } else if (!strcasecmp(v->name, "hash_calls")) {
+ int i;
+ if (sscanf(v->value, "%d", &i) > 2) {
+ hash_findcallno_size = i;
+ } else {
+ ast_log(LOG_WARNING, "Invalid hash_calls size '%s' at line %d -- should be much larger than 2\n", v->value, v->lineno);
+ }
+ } else if (!strcasecmp(v->name, "hash_transfers")) {
+ int i;
+ if (sscanf(v->value, "%d", &i) > 2) {
+ hash_findcallno3_size = i;
+ } else {
+ ast_log(LOG_WARNING, "Invalid hash_transfers size '%s' at line %d -- should be much larger than 2\n", v->value, v->lineno);
+ }
+ } else if (!strcasecmp(v->name, "hash_media")) {
+ int i;
+ if (sscanf(v->value, "%d", &i) > 2) {
+ hash_findcallno4_size = i;
+ } else {
+ ast_log(LOG_WARNING, "Invalid hash_media size '%s' at line %d -- should be much larger than 2\n", v->value, v->lineno);
+ }
} else if (!strcasecmp(v->name, "language")) {
ast_copy_string(language, v->value, sizeof(language));
} else if (!strcasecmp(v->name, "maxauthreq")) {
@@ -11940,28 +11977,28 @@
int x = 0;
struct iax2_registry *reg = NULL;
- peers = ao2_container_alloc(MAX_PEER_BUCKETS, peer_hash_cb, peer_cmp_cb);
+ peers = ao2_container_alloc(hash_peer_size, peer_hash_cb, peer_cmp_cb);
if (!peers)
return AST_MODULE_LOAD_FAILURE;
- users = ao2_container_alloc(MAX_USER_BUCKETS, user_hash_cb, user_cmp_cb);
+ users = ao2_container_alloc(hash_user_size, user_hash_cb, user_cmp_cb);
if (!users) {
ao2_ref(peers, -1);
return AST_MODULE_LOAD_FAILURE;
}
- findcall1 = ao2_container_alloc(MAX_FINDCALL1_BUCKETS, findcall1_hash_cb, findcall1_cmp_cb);
+ findcall1 = ao2_container_alloc(hash_findcallno_size, findcall1_hash_cb, findcall1_cmp_cb);
if (!findcall1) {
ao2_ref(peers, -1);
ao2_ref(users, -1);
return AST_MODULE_LOAD_FAILURE;
}
- findcall2 = ao2_container_alloc(MAX_FINDCALL2_BUCKETS, findcall2_hash_cb, findcall2_cmp_cb);
+ findcall2 = ao2_container_alloc(hash_findcallno_size, findcall2_hash_cb, findcall2_cmp_cb);
if (!findcall1) {
ao2_ref(peers, -1);
ao2_ref(users, -1);
ao2_ref(findcall1, -1);
return AST_MODULE_LOAD_FAILURE;
}
- findcall3 = ao2_container_alloc(MAX_FINDCALL3_BUCKETS, findcall3_hash_cb, findcall3_cmp_cb);
+ findcall3 = ao2_container_alloc(hash_findcallno3_size, findcall3_hash_cb, findcall3_cmp_cb);
if (!findcall1) {
ao2_ref(peers, -1);
ao2_ref(users, -1);
@@ -11969,7 +12006,7 @@
ao2_ref(findcall2, -1);
return AST_MODULE_LOAD_FAILURE;
}
- findcall4 = ao2_container_alloc(MAX_FINDCALL4_BUCKETS, findcall4_hash_cb, findcall4_cmp_cb);
+ findcall4 = ao2_container_alloc(hash_findcallno4_size, findcall4_hash_cb, findcall4_cmp_cb);
if (!findcall1) {
ao2_ref(peers, -1);
ao2_ref(users, -1);
Modified: team/murf/bug11210/configs/iax.conf.sample
URL: http://svn.digium.com/view/asterisk/team/murf/bug11210/configs/iax.conf.sample?view=diff&rev=99222&r1=99221&r2=99222
==============================================================================
--- team/murf/bug11210/configs/iax.conf.sample (original)
+++ team/murf/bug11210/configs/iax.conf.sample Sat Jan 19 13:24:14 2008
@@ -246,6 +246,43 @@
; See 'qualify' for individual peers to turn on for just a specific peer.
;
autokill=yes
+;
+; hash table sizes
+;
+; hash tables are used for quick lookups of peers, users, and ongoing calls
+; hash sizes, for best results, should be prime numbers.
+; If you set too small a hash size, the system will not break, it will just slow
+; down by degrees.
+;
+; hash_user tells the driver how big to make the user hash table. It should be a number
+; slightly larger than the total number of users (and friends) in your config file.
+; by default, it is set to 563, which should handle smaller to medium sized sites.
+; in small memory situations, it defaults to 17.
+;hash_user = 563
+;
+; hash_peer tells the driver how big to make the peer hash table. It should be a number
+; slightly larger than the total number of peers (and friends) in your config file.
+; by default, it is set to 563, which should handle smaller to medium sized sites.
+; in small memory situations, it defaults to 17.
+;hash_peer = 563
+;
+; hash_calls tells the driver how big to make the callno hash table. It should be a number
+; slightly larger than the total number of simultaneous calls possible.
+; by default, it is set to 563, which should handle smaller to medium sized sites.
+; in small memory situations, it defaults to 17.
+;hash_calls = 563
+;
+; hash_transfers tells the driver how big to make the transfer hash table. It should be a number
+; slightly larger than the total number of simultaneous transfers possible.
+; by default, it is set to 151, which should handle smaller to medium sized sites.
+; in small memory situations, it defaults to 17.
+;hash_transfers = 151
+;
+; hash_media tells the driver how big to make the transfer media hash table. It should be a number
+; slightly larger than the total number of simultaneous transfers in MEDIAPASS mode that are possible.
+; by default, it is set to 61, which should handle smaller to medium sized sites.
+; in small memory situations, it defaults to 17.
+;hash_media = 61
;
; codecpriority controls the codec negotiation of an inbound IAX call.
; This option is inherited to all user entities. It can also be defined
More information about the asterisk-commits
mailing list