[tbnl-devel] Running TBNL Standalone

Bob Hutchison hutch at recursive.ca
Fri Mar 11 21:26:41 UTC 2005


On Mar 3, 2005, at 10:49 AM, Bob Hutchison wrote:

>
> On Mar 3, 2005, at 10:24 AM, Edi Weitz wrote:
>
>> On Thu, 3 Mar 2005 10:10:07 -0500, Bob Hutchison <hutch at recursive.ca> 
>> wrote:
>>
>>> Has anybody thought of how TBNL might be run without an apache
>>> server or mod_lisp involved? Why? I've got an application that would
>>> normally be run on a server, but it would be useful to have a
>>> standalone demo version. Setting up apache is not the kind of skill
>>> I'd expect from the end user of this particular application.
>>>
>>> It seems to me that somehow getting Araneida talking to TBNL would
>>> be one route -- fake mod_lisp in an Araneida handler or replace
>>> TBNL's modlisp.lisp would be two possibilities.
>>>
>>> I suppose aserve and cl-http are also possibilities, but I suspect
>>> that Araneida has something more to gain from TBNL.
>>
>> Sounds like an interesting idea.  I've never done this until now,
>> though.
>
> I think this is worth pursuing -- the more I think about it the more 
> I'm convinced. I think Araneida might be the way to go because both 
> packages will benefit. I want to avoid any changes to either Araneida 
> or TBNL at least for the first pass at this, so I guess that an 
> Araneida handler with a socket connection between them is an easy way 
> to achieve this. The socket can be eliminated later. Going to have to 
> worry about concurrent requests too...
>
> Now all I have to do is find the time.
>

I've found some time in the last couple of days and pretty much have 
this working with Araneida (in LispWorks at least). I've got to track 
down a few little problems but nothing much (e.g. a spurious 404 error 
when using FireFox that doesn't happen with other browsers, and some 
also spurious and intermittent socket errors).

While doing this I noticed something a little funny with the dates 
associated with If-modified-since. TBNL (rfc-1123-date) produces dates 
like "Tue,  1 Feb 2005 13:49:29 GMT" while Safari produces dates like 
"Tue, 01 Feb 2005 13:49:29 GMT" -- same date but you can't compare them 
as strings. If you look at rfc2616 section 3.3.1 there is an example 
that has the leading 0 on the day of month. Safari produces a header 
with the leading 0 for If-modified-since, so files in the first 9 days 
of any month will never match. FireFox appears to return whatever you 
send it, so it works there. I think this is probably a bug in TBNL.

This turned out to be fairly straight forward in the end -- I tried 
several strategies and think I have a pretty simple one. Unfortunately 
the question becomes what is Araneida adding to this other than 
handling the request parsing.

It is *very* fast on my machine. I've appended part of the output from 
the apache ab utility for the direct to Araneida and apache/mod_lisp 
configurations (unfortunately, if I increase the concurrency level to 
15 or more I get a lot of errors from Araneida). I don't have Araneida 
operating as a proxy behind apache at the moment so I have no 
benchmarks for that configuration (and this also means that I've not 
tested it). A similar application in Java (that is being replace by 
this CL version) can barely sustain 18 Kbytes/s (don't read too much 
into that number, the Java application runs much better if it is 
operating on something other than my notebook (Mac powerbook G4 1GHz 2G 
RAM) -- of course so might the lisp application). And remember, this is 
not a well conceived benchmark -- make of it what you will.

I'm going to download the most recent version of TBNL and integrate 
changes into that. There are not many and perhaps I can avoid them all. 
I'll get this cleaned up and then make it available.

Cheers,
Bob

Araneida (directly) -> TBNL -------------------------------------


Document Length:        4288 bytes

Concurrency Level:      10
Time taken for tests:   63.614 seconds
Complete requests:      5000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      22415000 bytes
HTML transferred:       21440000 bytes
Requests per second:    78.60 [#/sec] (mean)
Time per request:       127.23 [ms] (mean)
Time per request:       12.72 [ms] (mean, across all concurrent 
requests)
Transfer rate:          352.36 [Kbytes/sec] received

Connnection Times (ms)
               min  mean[+/-sd] median   max
Connect:        0    17  218.8      0  3016
Processing:    10   109   42.7    100   365
Waiting:        9   109   42.7    100   365
Total:         10   127  221.6    101  3144

Percentage of the requests served within a certain time (ms)
   50%    101
   66%    119
   75%    132
   80%    141
   90%    170
   95%    198
   98%    234
   99%    282
  100%   3144 (last request)


mod_lisp -> TBNL -------------------------------------

Document Length:        4288 bytes

Concurrency Level:      10
Time taken for tests:   96.451 seconds
Complete requests:      5000
Failed requests:        0
Broken pipe errors:     0
Total transferred:      22764006 bytes
HTML transferred:       21440000 bytes
Requests per second:    51.84 [#/sec] (mean)
Time per request:       192.90 [ms] (mean)
Time per request:       19.29 [ms] (mean, across all concurrent 
requests)
Transfer rate:          236.02 [Kbytes/sec] received

Connnection Times (ms)
               min  mean[+/-sd] median   max
Connect:        0     5   13.5      0   154
Processing:     8   187  222.2    107  2246
Waiting:        0   185  222.9    105  2245
Total:          8   192  221.5    115  2246

Percentage of the requests served within a certain time (ms)
   50%    115
   66%    180
   75%    248
   80%    291
   90%    445
   95%    614
   98%    890
   99%   1083
  100%   2246 (last request)




More information about the Tbnl-devel mailing list