FreeRadius DHCP Performance

O'Connell, Ryan ryan.oconnell at viasat.com
Thu Jan 28 19:14:13 CET 2016


Thanks Alan.  I am using INNODB and default indexes (default schema from mods-config).  I put 65k ip’s in the pool so that I could let the test run for a bit but that’s definitely contributing to the performance bottleneck.  If I drop the number to 5k I can do a bit more (5/sec).

As a next step, I added an index to include the pool_name but unfortunately the results are the same.

---- from “show create table radius.radippool” ----
 radippool | CREATE TABLE `radippool` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `pool_name` varchar(30) NOT NULL,
  `framedipaddress` varchar(15) NOT NULL DEFAULT '',
  `nasipaddress` varchar(15) NOT NULL DEFAULT '',
  `calledstationid` varchar(30) NOT NULL,
  `callingstationid` varchar(30) NOT NULL,
  `expiry_time` datetime DEFAULT NULL,
  `username` varchar(64) NOT NULL DEFAULT '',
  `pool_key` varchar(30) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `radippool_poolname_expire` (`pool_name`,`expiry_time`),
  KEY `framedipaddress` (`framedipaddress`),
  KEY `radippool_nasip_poolkey_ipaddress` (`nasipaddress`,`pool_key`,`framedipaddress`),
  KEY `radippool_nasip_poolkey_ipaddress_pool_name` (`nasipaddress`,`pool_key`,`framedipaddress`,`pool_name`)
) ENGINE=InnoDB AUTO_INCREMENT=152091 DEFAULT CHARSET=latin1 |



Even with some improvements to MySQL it sounds like Redis is a much better option so I’ll explore that instead.  Thanks again for your feedback.

-Ryan


On 1/28/16, 9:34 AM, "Freeradius-Users on behalf of Alan DeKok" <freeradius-users-bounces+ryan.oconnell=viasat.com at lists.freeradius.org on behalf of aland at deployingradius.com> wrote:

>On Jan 28, 2016, at 12:24 PM, O'Connell, Ryan <ryan.oconnell at viasat.com> wrote:
>> 
>> Curious if any has ballpark figures for any testing they have done with a "stand alone” FreeRadius DHCP server (3.0.10).  I have setup a host with a local instance of MySQL (FR & MySQL on same Cent7 host) as well as FR pointing to a “physical” MySQL server with a massive amount of resources and write capability via a SAN.  Irrespective of this, I seem to be topping out at 3 req/sec which seems strange.
>
>  How is MySQL configured?  Which DB back-end are you using?  i.e. MyISAM, etc. How many IPs are in the pool?  Is the pool indexed?
>
>>  When the server starts to fail, I start seeing errors like:
>> 
>> Sat Jan 23 12:19:51 2016 : ERROR: (60870) dhcp_sqlippool: ERROR: rlm_sql_mysql: ERROR 1205 (Lock wait timeout exceeded; try restarting transaction): HY000
>> Sat Jan 23 12:19:51 2016 : WARNING: (60870) WARNING: Module rlm_sqlippool became unblocked for request 60870
>
>  Because the SQL server is taking too long to respond.
>
>> Consistent with the errors in the radius log, the MySQL log has errors similar to this.
>> 
>> 2016-01-23 12:19:52 7270 [ERROR] /usr/sbin/mysqld: Sort aborted: Lock wait timeout exceeded; try restarting transaction
>> 2016-01-23 12:19:52 7270 [ERROR] /usr/sbin/mysqld: Lock wait timeout exceeded; try restarting transaction
>
>  Which probably means that the query is locking the entire table, and later queries get delayed / blocked.
>
>> I’ve tried adjusting the number of servers up and down from tens to hundreds (I know this isn’t a solution per se but just commenting that this has been done) while also adjusting my.cnf and sysctl (open files / processes) but the behavior is the same.    I have also tried moving the MySQL data to a ramdisk since this is just a test but irrespective of whether a high I/) SAN or ramdisk is used, the performance is the same.  Has anyone achieved better performance than this?  I found comments from the past talking about the mac2ip performance being really high but I can’t seem to figure out what I’m missing to make dhcp_sqlippool go faster.  I’m using “dhcperf” as the test but have also tried other simulators.  Here’s the server startup.  There is no selection logic so just a single pool.
>
>  The issue is in MySQL.  For whatever reason, it can't handle the load.  How to fix that is largely up to MySQL...
>
>  We've tested the v3.1.x HEAD with Redis as an IP pool back-end.  It's benchmarked at 10K IPs per second per redis node.  i.e. a cluster with 4 nodes can do 40K IP assignments per second.
>
>  I'm not aware of many *commercial* DHCP servers which can do that.
>
>  Alan DeKok.
>
>
>-
>List info/subscribe/unsubscribe? See https://urldefense.proofpoint.com/v2/url?u=http-3A__www.freeradius.org_list_users.html&d=BQIGaQ&c=jcv3orpCsv7C4ly8-ubDob57ycZ4jvhoYZNDBA06fPk&r=mk1f51ecxdtt3uuBHl3z6AGjtjTaZoY_CcDahijuiOc&m=ZcqmlImt9Do22a7dtDSnjvZJoyqWZcy337FHY6VabPQ&s=soYhLRbEmwBq2-5biOtQqklq2JxqyKsAcgtleHtxb28&e= 



More information about the Freeradius-Users mailing list