Things in the server code room over the past year (but really, the past month more than anything else) have been hectic, but I suppose that the changes should also be listed here as well, for posterity.
Overall, on Star Conquest, this pretty much meant a 66% reduction in CPU utilization, though before all of the performance improvement changes were put in we were running over 120 simultaneous AI pilots in a sector without the server missing a beat.
Still, we could probably use an upgrade some time in the future.
Detailed changes after the break.
- In order to be more ‘hip‘ and ‘web 2.0‘ and ‘responsible‘ we actually started using a version control system, which probably would have been vastly useful before but that’s just how the sloth goes sometimes.
- Some time since the post in August of last year we added scattered_isa() which is sort of a bulk/multi-target isa operation. It’s actually a lot more useful than it probably sounds at first.
- Updated the autoconf scripts to work with modern versions of autoconf.
- Removed pgperf and changed the build environment to work with modern versions of gperf, which now has case insensitive operation — pgperf hasn’t compiled properly in some time, as far as I know.
- The server was rebased to the experimental LambdaMOO 1.8.4, which had some pretty significant fixes overall — primarily in memory leaks and increased performance.
- The RNG engine was switched from libc’s built-in random() to SFMT, and now it operates in pool generation mode, which makes random number generation overall DRAMATICALLY faster. Also included is the generation of a ‘true’ floating point random number function. Overall, this is more of an improvement in performance than it sounds — even in the first version without pooling there was a 5% increase in random() speed, but the pooled mode is where stuff really shines.
- Improved the floating point suspend stack over previous builds; it’s now accurate (in theory) to the microsecond, whereas before the MOO couldn’t handle much more beyond a tenth of a second in accuracy, and as server load increased, it became increasingly inaccurate. We feel that in a game like Star Conquest, these sorts of problems are unacceptable.
- Several other new builtins, including a noise generation function.
- By default, the server now sends TCP keepalive packets on all connections.
- Improved the speed of isa(), scattered_isa(), and noise().
- memory_usage() now works on any Linux machine (though it might not work quite properly on a FreeBSD machine)