If you're starting your MUX from scratch, all you need to do is specify in the Makefile whether you want to be disk based or memory based, and compile, following the instructions for creating a database. Converting from disk based to memory based, and vice versa, is a bit more difficult. Converting from memory based to disk based: ------------------------------------------ It is simple to convert your database to a disk based format, as follows: recompile with the the disk based options set in the Makefile. start up the game, log in as a wizard, and shut it down. Converting from disk based to memory based: ------------------------------------------ You need to use db_unload to convert your gdbm database to a flatfile, as follows: db_unload <gamename>.gdbm <gamename>.db.new <gamename>.db.FLAT You then need to remove <gamename>.db.new, <gamename>.db, <gamename>.gdbm.db, and <gamename>.gdbm. When that is done, rename <gamename>.db.FLAT to <gamename>.db.new. Start up the game. A comparison of disk based and memory based database storage methods. -------------------------------------------------------------------- 1. Memory based: - Advantages: - Eliminates the overhead of caching, and accessing the disk to read and write data. - Total database usage on disk is usually smaller that a disk-based setup. - A memory based setup dumps and loads using a flatfile, which is easier to manage and easily compressible when dumped by the MUX. - Disadvantages: - Memory usage grows as the size of the database grows. 2. Disk based: - Advantages: - Uses a fixed amount of memory independent of database size. - Faster database saves. - Disadvantages: - Slower performance due to the overhead of caching, and getting bits of data to/from disk. - Uses 3 files for the database, and usually takes up more disk space than a memory based system, and the main text database is not compressible at dump time. Memory based usage is preferred _if_ you have enough memory to support a growing database, however, when memory is at a premium and memory usage is the key point of whether you remain on your site or not, disk based usage is the way to go. Saving disk space: ----------------- - If you are using a disk based setup, consider converting to a memory based setup, which is much more efficient with disk space. - Enabling the config parameter 'compression', and specifying a 'compress_program' and 'uncompress_program' will save disk space under memory based usage and disk based usage, but it makes much more of a difference with memory based because it compresses the entire database. - Enabling radix compression (see README.COMPRESSION) will reduce the size of a disk based database AND its memory usage. On a memory based setup, it will only reduce memory usage. Saving memory: ------------- - If you are using a memory based setup, consider converting to disk based. - On a disk based setup, reduce the size of the cache, preferrably making it narrower (see README for tips on the cache) - On both disk and memory based setups, enable radix compression (see README.COMPRESSION) - Adjust HASH_FACTOR in config.h: 2 is recommended, altho 1 is usable and results in less memory usage. - Adjust OUTPUT_BLOCK_SIZE in config.h: this should be a power of 2, preferably in the ranger of 4096 to 16384. Any value over the config parameter 'output_limit' is wasted. You should juggle these options until you find a setup that works, and gives you the best performance. There is no 'right' way to set up a MUX, it always depends on the capabilities of the system you are running on, and how much of those capabilities you can use. Memory debugging: ---------------- If you turn on malloc debugging in the Makefile (-DMCHECK) you have a wide range of information to use in hunting down memory leaks or corruption. @stats/all displays statistics on memory usage. This is useful to check before and after executing a command to see if it leaks memory (altho you need to do it multiple times to make sure it's really leaking). It also enables memory tracing, where all allocation information is written to a file called mtrace.out in the game directory. The awk script mtrace.awk is included and analyzes mtrace.out for potential problems.