I modified the test (described here: http://www.thenorth.com/apblog2.nsf/0/816E292DD0A455E385256E3F0079C823 ) to try to make it resist things like random server performance changes due to whatever else the machine is doing. I've also tried to eliminate a few other variables.
The four tests were performed all at once. Each was performed 10 times, but not in order. A loop to 40 was created, and a modulus function was used to determine which test ran (e.g. if counter equaled 23, then 23/4 = 5 r3, so test 3 was run). The times listed are cumulative from all tens runs of each test. That should have mixed it up enough.
I've put the results in order. You'll notice that pipelined communication to the Domino server is clearly indicated over multiple concurrent communication. Within that, however, is the interesting result that even pipelined there is about a small advantage to having multiple Domino sessions. Personally, I think this is a terribly small advantage and in a servlet environment where the concurrency will not be quite so exact the contention should be lessened enough to make this negligible.
My own conclusion from this, is that based on the compromises of code simplicity, performance, and stability a single pipelined I/O queue thread as a static class should be the best way to handle all the Domino I/O for a single server. At some point I'll test multiple server access through the DIIOP thread.
The three machines are all running the same jvm (1.4) though the code is compiled as 1.3 compatible classes.
The single processor machine is my workstation, a cheap 1.7ghz Celeron with 1gb of RAM.
The "faster" of the two duals is a Dual P4 700mhz with 1gb of RAM, but its running a bunch of other stuff too. Also, that was the same machine as the Domino server, which tosses in some weird possibilities for contention but matches the real world case of where many java agents and servlets run.
The slower of the two duals is a Dual P-II 350mhz with 512megs of RAM running Windows NT (Yeah, yeah, but its still nice machine).
Single Processor Machine:
Test 2: 34,220ms. Pipelined, two sessions.
Test 1: 42,423ms. Pipelined, one session.
Test 4: 47,722ms. Threaded, two sessions.
Test 3: 53,765ms. Threaded, one session.
Dual Processor Machine, same machine as Domino:
Test 2: 37,596ms. Pipelined, two sessions.
Test 1: 40,155ms. Pipelined, one session.
Test 4: 51,767ms. Threaded, two sessions.
Test 3: 53,032ms. Threaded, one session.
Slower dual processor machine:
Test 2: 43,327ms. Pipelined, two sessions.
Test 1: 45,576ms. Pipelined, one session.
Test 3: 57,874ms. Threaded, one session.
Test 4: 67,298ms. Threaded, two sessions.
Comment Entry |
Please wait while your document is saved.