rlm_perl (threads) performance question

Apostolos Pantsiopoulos apant at kinetix.gr
Tue Oct 16 11:57:50 CEST 2007


I am using the rlm_perl module for accounting purposes.
I tried to benchmark the whole process by doing something like this :

sub accounting{

    start_benchmark();

    // acct start code here

    stop_benchmark();

    send_bench_results_using_udp();

}

sub stop_accounting{

    start_benchmark();

    // acct stop code here

    stop_benchmark();

    send_bench_results_using_udp();

}

I hope that the routines names I used are self-explanatory.
In my config I have 32 servers running, using 32 perl clones.

The results I get (after 2-3 k requests) are these :

Mean time for acct start : 0.005 secs
Mean time for acct stop : 0.01 secs

Since there is a 1:1 ratio of start/stop requests I guess that we can 
say that
for each request (regardless of its type) I should get a mean of 0.0075 
secs.
And this in turn should be giving about 130 req/sec.

But I am not getting this kind of performance.
I know that there is a handling overhead for each request. I don't know 
the exact
percentage of this overhead but for simplicity's sake lets be 
pessimistic and
consider it to be about 30%.
Now the performance should be something like 80 req/sec.
But I am not getting this kind of performance either.
In fact, as soon as my main radius reaches a number of 50 req/sec my NAS
starts sending requests to my backup radius.

Correct me if I am wrong :

If every perl clone can complete each request in X secs shouldn't 32 clones
complete 1/X*32 requests per second? Or something similar to that?
(even half of that would be great, considering the extra overhead for 
handling
these threads)

I used the debug output when my server served about 30-40 requests/sec 
and I noticed this

"perl_pool total/active/spare [32/0/32]"

With a utilisation such as that (30-40 req/secs) shouldn't more perl 
clones be active (unless the above
line means something else).

The problem does not seem to be the database. I made a simple
program that uses the exact same code as my radius perl script does and 
I can get
this kind of performance easily.

So what I am trying to say here is that I get this "feeling" that I do 
not get any concurrency
at all from my radius daemons. I checked my Perl installation an both 
threads and multiplicity is enabled :

usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define

Any help would be appreciated.

-- 
-------------------------------------------
Apostolos Pantsiopoulos
Kinetix Tele.com Support Center
email: apant at kinetix.gr, support at kinetix.gr
Tel. & Fax: +30 2310556134
Mobile : +30 6937069097
MSN : apant2 at hotmail.com
WWW: http://www.kinetix.gr/
------------------------------------------- 




More information about the Freeradius-Users mailing list