SYNOPSIS
        #include <driver_info.h>

        mixed driver_info(int what)

DESCRIPTION
        Returns some internal information about the driver.
        The argument <what> determines which information is returned.

        It can be either a configuration option as given to
        configure_driver() or one of the following options:



        Driver Environment:

        <what> == DI_BOOT_TIME:
          The time() when the driver was started.



        LPC Runtime status:

        <what> == DI_CURRENT_RUNTIME_LIMITS:
          Return an array with the current runtime limits.
          The entries in the returned array are:

            int[LIMIT_EVAL]:         the max number of eval costs
            int[LIMIT_ARRAY]:        the max number of array entries
            int[LIMIT_MAPPING_SIZE]: the max number of mapping values
            int[LIMIT_MAPPING_KEYS]: the max number of mapping entries
               (LIMIT_MAPPING is an alias for LIMIT_MAPPING_KEYS)
            int[LIMIT_BYTE]:         the max number of bytes handled with
                                     one read_bytes()/write_bytes() call.
            int[LIMIT_FILE]:         the max number of bytes handled with
                                     one read_file()/write_file() call.
            int[LIMIT_CALLOUTS]:     the number of callouts at one time.
            int[LIMIT_COST]:         how to account the current cost.
            int[LIMIT_MEMROY]:       the max. number of bytes which can be 
                                     _additionally_ allocated/used 
                                     _per top-level execution thread_

          For all limits except LIMIT_COST a limit of '0' aka LIMIT_UNLIMITED
          means 'no limit'.

          The value for LIMIT_COST has these meanings:

            value > 0: the execution will cost minimum(<value>, actual cost) .
            value = 0: if the current LIMIT_EVAL is larger than the calling
                       LIMIT_EVAL, the evaluation will cost only 10; otherwise
                       the full cost will be accounted.
            value < 0: (-value)% of the current evaluation cost will be
                       accounted; -100 obviously means 'full cost'.

        <what> == DI_EVAL_NUMBER:
          Return the current evaluation number.
          The number is incremented for each top-level call. Top-level
          calls are initiated by the driver, usually in reaction to an
          external event:
              - commands (added by add_action)
              - heart_beat, reset, clean_up
              - calls from call_out or input_to
              - master applies triggered by external events
              - calls of driver hooks in reaction to external events
              - send_erq callbacks
              - logon in interactives

          The number can be used to detect cases where the same code is
          executed twice in the same top level evaluation (say, heart_beat),
          and also for time stamps for ordering some events.

          Please note that the counter may overflow, especially on 32 bit
          systems. As a result, it can also be negative.



        Network configuration:

        <what> == DI_MUD_PORTS:
          Returns an array with all open ports, which the driver
          listens for player connections on.

        <what> == DI_UDP_PORT:
          Returns the port number of the UDP socket.



        Memory management:

        <what> == DI_MEMORY_RESERVE_USER:
          Current size of the user memory reserve.
          The user memory reserve is allocated at startup and is used
          when the driver runs out of memory.

        <what> == DI_MEMORY_RESERVE_MASTER:
          Current size of the master memory reserve.
          The master memory reserve is allocated at startup and is used
          when the driver runs out of memory while executing master
          code.

        <what> == DI_MEMORY_RESERVE_SYSTEM:
          Current size of the system memory reserve.
          The system memory reserve is allocated at startup and is used
          when the driver runs out of memory while executing internal
          operations.



        Traces:

        <what> == DI_TRACE_CURRENT:
          Returns the current stack trace in array form.

          If the array has more than one entries, the first entry is 0 or
          the name of the object with the heartbeat which started the
          current thread; all following entries describe the call stack
          starting with the topmost function called.

          All call entries are arrays themselves with the following elements:

               int[TRACE_TYPE]: The type of the call frame:
                   TRACE_TYPE_SYMBOL (0): a function symbol (shouldn't happen).
                   TRACE_TYPE_SEFUN  (1): a simul-efun.
                   TRACE_TYPE_EFUN   (2): an efun closure.
                   TRACE_TYPE_LAMBDA (3): a lambda closure.
                   TRACE_TYPE_LFUN   (4): a normal lfun.

               mixed[TRACE_NAME]: The 'name' of the called frame:
                   _TYPE_EFUN:   either the name of the efun, or the code of
                                 the instruction for operator closures
                   _TYPE_LAMBDA: the numeric lambda identifier.
                   _TYPE_LFUN:   the name of the lfun.

               string[TRACE_PROGRAM]: The (file)name of the program holding
                                      the code.

               string[TRACE_OBJECT]:  The name of the object for which the code
                                      was executed.
               int[TRACE_LOC]:
                   _TYPE_LAMBDA: current program offset from the start of the
                                 closure code.
                   _TYPE_LFUN:   the line number.

        <what> == DI_TRACE_CURRENT_DEPTH:
          Return the current number of frames on the control stack
          (recursion depth).

        <what> == DI_TRACE_CURRENT_AS_STRING:
          Returns the current stack trace as a string.

        <what> == DI_TRACE_LAST_ERROR:
          Returns the stack trace of the last error in array form
          (same format as DI_TRACE_CURRENT). Stack traces of errors
          before the last GC might not be available anymore.

        <what> == DI_TRACE_LAST_ERROR_AS_STRING:
          Returns the stack trace of the last error as a string.

        <what> == DI_TRACE_LAST_UNCAUGHT_ERROR:
          Returns the stack trace of the last uncaught error in array form
          (same format as DI_TRACE_CURRENT). Stack traces of errors
          before the last GC might not be available anymore.

        <what> == DI_TRACE_LAST_UNCAUGHT_ERROR_AS_STRING:
          Returns the stack trace of the last uncaught error as a string.



        LPC Runtime statistics:

        <what> == DI_NUM_FUNCTION_NAME_CALLS:
          Number of function calls by name (like call_other).

        <what> == DI_NUM_FUNCTION_NAME_CALL_HITS:
          Function calls by name are cached (to accelerate
          lookup of the corresponding program code).
          This returns the number of cache hits.

        <what> == DI_NUM_FUNCTION_NAME_CALL_MISSES:
          The number of function call cache misses.

        <what> == DI_NUM_OBJECTS_LAST_PROCESSED:
          Number of listed objects processed in the last backend cycle.

        <what> == DI_NUM_HEARTBEAT_TOTAL_CYCLES:
          Total number of heart_beats cycles so far.

        <what> == DI_NUM_HEARTBEAT_ACTIVE_CYCLES:
          Number of active heart_beat cycles executed so far
          (ie. cycles in which at least one heart_beat() function
          was called).

        <what> == DI_NUM_HEARTBEATS_LAST_PROCESSED:
          Number of heart_beats calls in the last backend cycle

        <what> == DI_NUM_STRING_TABLE_STRINGS_ADDED:
          Number of distinct strings added to the string table so far.

        <what> == DI_NUM_STRING_TABLE_STRINGS_REMOVED:
          Number of distinct strings removed from the string table so far.

        <what> == DI_NUM_STRING_TABLE_LOOKUPS_BY_VALUE:
          Number of string searches by value.

        <what> == DI_NUM_STRING_TABLE_LOOKUPS_BY_INDEX:
          Number of string searches by address.

        <what> == DI_NUM_STRING_TABLE_LOOKUP_STEPS_BY_VALUE:
          Number of lookup steps needed for string searches by value.

        <what> == DI_NUM_STRING_TABLE_LOOKUP_STEPS_BY_INDEX:
          Number of lookup steps needed for string searches by address.

        <what> == DI_NUM_STRING_TABLE_HITS_BY_VALUE:
          Number of successful lookups of strings by value.

        <what> == DI_NUM_STRING_TABLE_HITS_BY_INDEX:
          Number of successful lookups of strings by address.

        <what> == DI_NUM_STRING_TABLE_COLLISIONS:
          Number of distinct strings added to an existing hash chain so far.

        <what> == DI_NUM_REGEX_LOOKUPS:
          Number of requests for new regexps.

        <what> == DI_NUM_REGEX_LOOKUP_HITS:
          Number of requested regexps found in the table.

        <what> == DI_NUM_REGEX_LOOKUP_MISSES:
          Number of requested regexps not found in the table.

        <what> == DI_NUM_REGEX_LOOKUP_COLLISIONS:
          Number of requested new regexps which collided with a cached one.



        Network statistics:

        <what> == DI_NUM_MESSAGES_OUT:
          Number of messages sent to a player.

        <what> == DI_NUM_PACKETS_OUT:
          Number of packets sent to a player.

        <what> == DI_NUM_PACKETS_IN:
          Number of packets received from a player.

        <what> == DI_SIZE_PACKETS_OUT:
          Number of bytes sent to a player.

        <what> == DI_SIZE_PACKETS_IN:
          Number of bytes received from a player.



        Load:

        <what> == DI_LOAD_AVERAGE_COMMANDS:
          A float value that shows the number of executed player commands
          per second.

        <what> == DI_LOAD_AVERAGE_LINES:
          A float value that shows the number of compiled code lines
          per second.

        <what> == DI_LOAD_AVERAGE_PROCESSED_OBJECTS:
          A float value that shows the average number of objects processed
          each backend cycle.

        <what> == DI_LOAD_AVERAGE_PROCESSED_OBJECTS_RELATIVE:
          Average number of objects processed each cycle, expressed
          as percentage (0..1.0) of the number of present objects.

        <what> == DI_LOAD_AVERAGE_PROCESSED_HEARTBEATS_RELATIVE:
          Average number of heart_beats called each cycle, expressed
          as fraction (0..1.0) of the number of active heartbeats.



        Memory use statistics:

        <what> == DI_NUM_ACTIONS:
          Number of allocated actions.

        <what> == DI_NUM_CALLOUTS:
          Number of pending call_outs.

        <what> == DI_NUM_HEARTBEATS:
          Number of objects with a heartbeat.

        <what> == DI_NUM_SHADOWS:
          Number of allocated shadows.

        <what> == DI_NUM_OBJECTS:
          Number of objects.

        <what> == DI_NUM_OBJECTS_SWAPPED:
          Number of objects that are swapped-out.

        <what> == DI_NUM_OBJECTS_IN_LIST:
          Number of objects in the object list
          (i.e. not destructed objects).

        <what> == DI_NUM_OBJECTS_IN_TABLE:
          Number of objects in the object table.

        <what> == DI_NUM_OBJECTS_DESTRUCTED:
          Number of destructed, but still referenced objects.
          (Not counting DI_NUM_OBJECTS_NEWLY_DESTRUCTED).

        <what> == DI_NUM_OBJECTS_NEWLY_DESTRUCTED:
          Number of newly destructed objects (ie. objects destructed
          in this execution thread, that will really be destroyed in
          the next backend cycle).

        <what> == DI_NUM_OBJECT_TABLE_SLOTS:
          Number of hash slots provided by the object table.

        <what> == DI_NUM_PROGS:
          Size occupied by the object table.

        <what> == DI_NUM_PROGS_SWAPPED:
          Number of swapped-out program blocks

        <what> == DI_NUM_PROGS_UNSWAPPED:
          Number of programs that were swapped-out, are now swapped-in,
          but still have allocated space in the swap file.

        <what> == DI_NUM_ARRAYS:
          Number of currently existing arrays.

        <what> == DI_NUM_MAPPINGS:
          Number of currently existing mappings.

        <what> == DI_NUM_MAPPINGS_CLEAN:
          Number of clean mappings (mappings without a hash part).

        <what> == DI_NUM_MAPPINGS_HASH:
          Number of hash mappings.

        <what> == DI_NUM_MAPPINGS_HYBRID:
          Number of hybrid mappings (mappings that have a
          condensed and hash part).

        <what> == DI_NUM_STRUCTS:
          Number of currently existing structs.

        <what> == DI_NUM_STRUCT_TYPES:
          Number of currently existing struct types.

        <what> == DI_NUM_VIRTUAL_STRINGS:
          Number of currently existing virtual strings
          (identical strings are counted separately).

        <what> == DI_NUM_STRINGS:
          Number of real strings (identical strings
          are counted once).

        <what> == DI_NUM_STRINGS_TABLED:
          Number of directly tabled strings.

        <what> == DI_NUM_STRINGS_UNTABLED:
          Number of untabled strings.

        <what> == DI_NUM_STRING_TABLE_SLOTS:
          Number of hash slots in the string table.

        <what> == DI_NUM_STRING_TABLE_SLOTS_USED:
          Number of hash chains in the string table.

        <what> == DI_NUM_REGEX:
          Number of cached regular expressions.

        <what> == DI_NUM_REGEX_TABLE_SLOTS:
          Number of slots in the regexp cache table.

        <what> == DI_SIZE_ACTIONS:
          Total size of allocated actions.

        <what> == DI_SIZE_CALLOUTS:
          Total size of pending call_outs.

        <what> == DI_SIZE_HEARTBEATS:
          Total size of the heart_beat list.

        <what> == DI_SIZE_SHADOWS:
          Total size of allocated shadows.

        <what> == DI_SIZE_OBJECTS:
          Total size of objects (not counting the size of the values
          of their variables).

        <what> == DI_SIZE_OBJECTS_SWAPPED:
          Total size of swapped-out variable blocks.

        <what> == DI_SIZE_OBJECT_TABLE:
          Size occupied by the object table.

        <what> == DI_SIZE_PROGS:
          Total size of all programs.

        <what> == DI_SIZE_PROGS_SWAPPED:
          Total size of swapped-out program blocks

        <what> == DI_SIZE_PROGS_UNSWAPPED:
          Total size of unswapped program blocks

        <what> == DI_SIZE_ARRAYS:
          Total size of all arrays (not counting additional sizes
          of array element values).

        <what> == DI_SIZE_MAPPINGS:
          Total size of all mapping (not counting additional sizes
          of contained values).

        <what> == DI_SIZE_STRUCTS:
          Total size of all structs (not counting additional sizes
          of contained values).

        <what> == DI_SIZE_STRUCT_TYPES:
          Total size of all struct type definitions.

        <what> == DI_SIZE_STRINGS:
          Total size of all strings.

        <what> == DI_SIZE_STRINGS_TABLED:
          Total size of all tabled strings.

        <what> == DI_SIZE_STRINGS_UNTABLED:
          Total size of all untabled strings.

        <what> == DI_SIZE_STRING_TABLE:
          Size of the string table structure itself.

        <what> == DI_SIZE_STRING_OVERHEAD:
          Size of the overhead per string (compared to a raw string).

        <what> == DI_SIZE_REGEX:
          Total size of all cached regular expressions.

        <what> == DI_SIZE_BUFFER_FILE:
          The size of the memory buffer for file operations.

        <what> == DI_SIZE_BUFFER_SWAP:
          The size of the memory buffer for the swap file.



        Memory swapper statistics:

        <what> == DI_NUM_SWAP_BLOCKS:
          Number of blocks in the swap file.

        <what> == DI_NUM_SWAP_BLOCKS_FREE:
          Number of free blocks in the swap file.

        <what> == DI_NUM_SWAP_BLOCKS_REUSE_LOOKUPS:
          Number of searches for blocks to reuse in the swap file.

        <what> == DI_NUM_SWAP_BLOCKS_REUSE_LOOKUP_STEPS:
          Total number of lookup steps in searches for blocks
          to reuse in the swap file.

        <what> == DI_NUM_SWAP_BLOCKS_FREE_LOOKUPS:
          Number of searches for blocks to free in the swap file.

        <what> == DI_NUM_SWAP_BLOCKS_FREE_LOOKUP_STEPS:
          Total number of lookup steps in searches for blocks
          to free in the swap file.

        <what> == DI_SIZE_SWAP_BLOCKS:
          Size of the swap file.

        <what> == DI_SIZE_SWAP_BLOCKS_FREE:
          Size of free blocks in the swap file.

        <what> == DI_SIZE_SWAP_BLOCKS_REUSED:
          Total reused space in the swap file.

        <what> == DI_SWAP_RECYCLE_PHASE:
          True if the swapper is currently recycling free block.



        Memory allocator statistics:

        <what> == DI_MEMORY_ALLOCATOR_NAME:
          The name of the allocator: "sysmalloc", "smalloc", "slaballoc

        <what> == DI_NUM_SYS_ALLOCATED_BLOCKS:
          Number of memory blocks requested from the operating system.

        <what> == DI_NUM_LARGE_BLOCKS_ALLOCATED:
          Number of large allocated blocks.
          (With smalloc: The large allocated blocks include
          the small chunk blocks.)

        <what> == DI_NUM_LARGE_BLOCKS_FREE:
          Number of large free blocks.

        <what> == DI_NUM_LARGE_BLOCKS_WASTE:
          Number of unusable large memory fragments.

        <what> == DI_NUM_SMALL_BLOCKS_ALLOCATED:
          Number of small allocated blocks.

        <what> == DI_NUM_SMALL_BLOCKS_FREE:
          Number of small free blocks.

        <what> == DI_NUM_SMALL_BLOCKS_WASTE:
          Number of unusably small memory fragments.

        <what> == DI_NUM_SMALL_BLOCK_CHUNKS:
          Number of small chunk/slab blocks.
          (That are large blocks that are used as a
          base for small blocks.)

        <what> == DI_NUM_UNMANAGED_BLOCKS:
          Number of unmanaged (non-GC-able) allocations.

        <what> == DI_NUM_FREE_BLOCKS_AVL_NODES:
          Number of AVL nodes used to manage the large free
          blocks. This value might go away again.

        <what> == DI_SIZE_SYS_ALLOCATED_BLOCKS:
          Total size of memory requested from the operating system.

        <what> == DI_SIZE_LARGE_BLOCKS_ALLOCATED:
          Total size of large allocated blocks.

        <what> == DI_SIZE_LARGE_BLOCKS_FREE:
          Total size of large free blocks.

        <what> == DI_SIZE_LARGE_BLOCKS_WASTE:
          Total size of unusable large memory fragments.

        <what> == DI_SIZE_LARGE_BLOCK_OVERHEAD:
          The overhead of every large block allocation.

        <what> == DI_SIZE_SMALL_BLOCKS_ALLOCATED:
          Total size of small allocated blocks.

        <what> == DI_SIZE_SMALL_BLOCKS_FREE:
          Total size of small free blocks.

        <what> == DI_SIZE_SMALL_BLOCKS_WASTE:
          Total size of unusably small memory fragments.

        <what> == DI_SIZE_SMALL_BLOCK_OVERHEAD:
          The overhead of every small block allocation.

        <what> == DI_SIZE_SMALL_BLOCK_CHUNKS:
          Total size of small chunk/slab blocks.

        <what> == DI_SIZE_UNMANAGED_BLOCKS:
          Total size of unmanaged (non-GC-able) allocations.

        <what> == DI_SIZE_MEMORY_USED:
          The amount of memory currently allocated from the allocator.

        <what> == DI_SIZE_MEMORY_UNUSED:
          The amount of memory allocated from the system, but
          not used by the driver.

        <what> == DI_SIZE_MEMORY_OVERHEAD:
          Amount of memory used for the management of the memory.

        <what> == DI_NUM_INCREMENT_SIZE_CALLS:
          Number of requests to increase the size of a memory block.

        <what> == DI_NUM_INCREMENT_SIZE_CALL_SUCCESSES:
          Number of successful requests to increase the
          size of a memory block.

        <what> == DI_SIZE_INCREMENT_SIZE_CALL_DIFFS:
          Total size of additionally allocated memory by
          increasing already allocated memory blocks.

        <what> == DI_NUM_REPLACEMENT_MALLOC_CALLS:
          Number of allocations done through the
          clib functions (if supported by the allocator).

        <what> == DI_SIZE_REPLACEMENT_MALLOC_CALLS:
          Total size of allocations done through the
          clib functions (if supported by the allocator).

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALLS_FULL:
          Total number of requests to defragment all small memory chunks.

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALLS_TARGETED:
          Total number of requests to defragment small memory chunks
          for a desired size.

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALL_TARGET_HITS:
          Total number of successful requests to defragment small
          memory chunks for a desired size.

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_INSPECTED:
          Number of blocks inspected during defragmentations.

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_MERGED:
          Number of blocks merged during defragmentations.

        <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_RESULTING:
          Number of defragmented blocks (ie. merge results).

        <what> == DI_MEMORY_EXTENDED_STATISTICS:
          If the driver was compiled with extended memory statistics,
          they are returned in this entry; if the driver was compiled
          without the statistics, 0 is returned.

          The array contains NUM+2 entries, where NUM is the number
          of distinct small block sizes. Entry [NUM] describes the
          statistics of oversized small blocks (smalloc) resp. for
          all slabs (slaballoc), entry [NUM+1] summarizes all large
          blocks. Each entry is an array of these fields:

               int DIM_ES_MAX_ALLOC:
                       Max number of allocated blocks of this size.

               int DIM_ES_CUR_ALLOC:
                       Current number of allocated blocks of this size.

               int DIM_ES_MAX_FREE:
                       Max number of allocated blocks of this size.

               int DIM_ES_CUR_FREE:
                       Current number of allocated blocks of this size.

               float DIM_ES_AVG_XALLOC:
                       Number of explicit allocation requests per
                       second.

               float DIM_ES_AVG_XFREE:
                       Number of explicit deallocation requests per
                       second.

               int DIM_ES_FULL_SLABS:
                       Number of fully used slabs (slaballoc only).

               int DIM_ES_FREE_SLABS:
                       Number of fully free slabs (slaballoc only).

               int DIM_ES_TOTAL_SLABS:
                       Total number of slabs: partially used, fully used
                       and fully free (slaballoc only).

           The allocation/deallocation-per-second statistics do
           not cover internal shuffling of the freelists.

           The slab statistics (entry [NUM], slaballoc only) shows
           in the AVG statistics the frequence with which slabs were
           allocated from resp. returned to the large memory pool.



        Status texts:

        <what> == DI_STATUS_TEXT_MEMORY:
          A printable string containing information about
          the memory usage.

        <what> == DI_STATUS_TEXT_TABLES:
          A printable string containing information about
          the LPC runtime.

        <what> == DI_STATUS_TEXT_SWAP:
          A printable string containing information about
          the swap system.

        <what> == DI_STATUS_TEXT_MALLOC:
          A printable string containing information about
          memory allocations.

        <what> == DI_STATUS_TEXT_MALLOC_EXTENDED:
          A printable strings with extended memory statistics
          (if the driver was compiled with them).


HISTORY
        Introduced in LDMud 3.5.0.

SEE ALSO
        configure_driver(E), object_info(E), interactive_info(E),
        dump_driver_info(E)
