diary at Telent Netowrks

Fun with threads#

Fri, 28 Feb 2003 03:17:54 +0000

Fun with threads. No, really. No sarcasm.

So after cleaning up the CVS mess left over from yesterday's merging exercise, I checked out a fresh copy of Araneida, built a new threaded SBCL, and hacked around a little.

  1. When using apachebench for microbenchmarking your web server, the easiest way to get a really good requests/second figure is of course to use a really small file. I was seeing 90-130 requests/second at times, but each response is something like 240 bytes long, so, well, yeah.

  2. When ab complains about failed requests due to "length", what it means is that some of the documents returned were of different length to the first response. Obviously if your test document is anything like this one, you can expect 91 alleged failed requests in the first test in a fresh image.

  3. So, as you'd guessed, I'm using apachebench as a basic smoke test to flush out the most obvious threading issues in SBCL. So far I found

    • that my spinlock_get in C actually didn't (didn't spin or lock, in fact),
    • that there was some thread-unsafe code to allocate new buffers for file-streams,
    • that my db-sockets hack to allocate new sockaddrs in Lisp space really needed to be protected with without-gcing,
    • but that it wouldn't have made much difference if it had been, because without-gcing doesn't actually disable garbage collection any longer.

    Fixed the first three, kludged around the last - now it would work if atomic-incf were actually atomic instead of just a placeholder for incf.

    All told it's going pretty well right now, so there's bound to be some horrible problem cropping up soon.

This annoys me -#

Fri, 28 Feb 2003 04:13:28 +0000

This annoys me -

68.74.156.60 - - [28/Feb/2003:02:08:44 +0000] "POST /edit/db-sockets HTTP/1.1" 200 164 "-" "websphinx.Crawler" www.cliki.net "-" 0 seconds
68.74.156.60 - - [28/Feb/2003:02:09:21 +0000] "POST /edit/Graphics%20Toolkit HTTP/1.1" 200 178 "-" "websphinx.Crawler" www.cliki.net "-" 1 seconds
68.74.156.60 - - [28/Feb/2003:02:09:48 +0000] "POST /edit/CORBA HTTP/1.1" 200 154 "-" "websphinx.Crawler" www.cliki.net "-" 1 seconds

This lame excuse for a web crawler is editing cliki pages. Automatically. Specifically, it's stripping out carriage returns from the body, which as you can imagine makes it difficult to see where the paragraph breaks are.

I don't know if the fault here is with WebSPHINX itself or someone's custom crawler based on it, but if people are going to write software that doesn't actually work, they should not let it out on the internet. Really.

Oh, and I might also point out that the pages in question contain

<meta NAME="ROBOTS" CONTENT="noindex,nofollow"></meta>

in the head element, so robots really have no business being there anyway.

Some aspects of CLX are deeply tedious to experiment with, because#

Tue, 04 Mar 2003 00:34:08 +0000

Some aspects of CLX are deeply tedious to experiment with, because changing them requires hacking around with macros, then you need to rebuild all of CLX to make it notice the macro definitions have changed.

But still, after a couple of pints I don't care quite as much

Here's a screenshot (which I admit is dull and ugly and when will CLIM hackers learn that picking a font other than Courier is 80% of the work of producing kewl screeenshots) showing McCLIM running in SBCL/native threads. Some work is still needed: it busy-waits. CLX has some horrible horrible locking macros.

psql: FATAL: cannot write init file -- relation tuple form#

Fri, 07 Mar 2003 00:50:48 +0000

psql: FATAL:  cannot write init file -- relation tuple form

Would it have hurt so much at least to say where this init file was going to be written? Maybe also the value of errno? It turns out to mean "/var is full" .

I don't know why I bothered to set this machine up with more than one partition anyway ...

To those of my readers who don't as a matter of course go on and check#

Mon, 10 Mar 2003 18:55:45 +0000

To those of my readers who don't as a matter of course go on and check Shaver's diary and links therefrom

I might add that pervasive use of getters/setters feels a lot less ugly in a language where the syntax to update an attribute looks just like a method call anyway -

(creditcard-number my-card) => "4123412341234129" ; a slot read
(creditcard-type my-card) => "VISA"               ; a function call
(setf (creditcard-number my-card) "5455555555555555") ; a slot write
(setf (creditcard-type my-card) "mastercard")     ; an error
;;; ... but, oh, look
(creditcard-type my-card) => "Mastercard"         ; it already knew

Actually, I lied. The particular system I took those examples from uses MOPpery to store all its data in a Postgres database anyway, so none of the above is necessarily a straightforward assignment under the covers.

Actually, I lied twice. Those aren't my (or, as far as I know, anybody's) real credit card numbers either. Sorry, folks.

One of the things I am really looking forward to, given a natively#

Tue, 11 Mar 2003 06:36:01 +0000

One of the things I am really looking forward to, given a natively threaded Lisp implementation, is the possibility of writing, acquiring or just plain waiting for a text editor that can be customized in a slightly saner language than elisp. In particular, right now, I would like a comint mode that either (1) only retains n line sof output, or (2) (preferably) doesn't eat 30% of my cpu appending lines to the comint buffer when it gets large. Where large is around 250k lines, at the moment.

I hate having to reboot my emacs.

Wheee#

Fri, 14 Mar 2003 15:37:18 +0000

Wheee!

SBCL threads now runs (or perhaps, walks) Closure. A screenshot, for the unbelievers

Now I need to scatter patches and things around the place so that anyone else can run it too.

comp.lang.lisp is having its annual "free#

Tue, 18 Mar 2003 15:30:49 +0000

comp.lang.lisp is having its annual "free software is a bad thing" debate again.

I think I must have been busy lately#

Fri, 28 Mar 2003 00:22:26 +0000

I think I must have been busy lately. I just can't remember much of what I've been doing.

Not that this is the problem that keeping an online diary is supposed to solve, or anything. Oh well. Speaking of online diaries, Is the active user-base of Advogato incompetent? Well, yes. I was going to post a followup saying "I used to hesitate before posting Advogato articles because they'd get taken apart by knowledgeable people, but now I don't bother to post them at all because they get taken apart by people who just don't have a clue." But then I realised that it would get taken apart by people who just don't have a clue. As Mark Jason Dominus said, "Forget what I said about the damn iterator pattern, already"

06:54:53 <Krystof> so the big question is: "what does the next
version get called?"
06:55:07 <Krystof> 0.7.14.1? 0.8.0pre.1?
06:57:10 <Krystof> (well, maybe that's not the big question)
06:59:16 <wnewman> I haven't noticed any response to my mention of
0.8.0 on the mailing list, so it seems to be only you and I who care.
07:00:40 <wnewman> If the SB-PCL:CLASS stuff lands, and Dan either
puts in threads or doesn't care, it's OK with me if the next release
is 0.8.0, and it's ok with me if it takes more than a month.
07:00:40 <wnewman> which hopefully gives everyone concerned enough
leeway

New SBCL (0.7.14) was released on Monday, and was probably notable chiefly for being, as you see here, the last release before 0.8. Unless you're using bit vectors, in which case you could get some kind of 100x speedup, which I think is worth noting. 0.8 will have better PCL integration, and (experimental probably-not-enabled-by-default) native threads on x86 Linux. Yes, that's right, it's merge time. Mostly this is an exercise in arranging the source such that threaded and unithread sbcl can be built from the same code base, and (for bonus points) that the code in question is reasonably free of Weapons of Mass #define

Also London and Oxford meetings of (minimally overlapping) subsets of the UK-Lispers list. At (or arguably, after) the latter of these, Christophe fixed SXHASH on PPC, so it no longer returns 0 for symbols whose names are less than 4 characters long.

Started cycling again last weekend, for the first time since, um, last August. The saddle on my bike is less comfortable than I remembered it as having been, but I expect I'll get used to it again.

It's summer#

Sun, 30 Mar 2003 03:12:47 +0000

It's summer. So says my laptop, anyway. I can't remember what timezone this colo box thinks it's in, though.

Spent some time yesterday and today attempting to determine why SBCL unithread-build-of-threaded-code didn't: a variety of silly bugs which nobody is interested in reading about