blob: f609e63cc864688c1f225684d43205b7b5953f72 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001SYNOPSIS
2 #include <driver_info.h>
3
4 mixed driver_info(int what)
5
6DESCRIPTION
7 Returns some internal information about the driver.
8 The argument <what> determines which information is returned.
9
10 It can be either a configuration option as given to
11 configure_driver() or one of the following options:
12
13
14
15 Driver Environment:
16
17 <what> == DI_BOOT_TIME:
18 The time() when the driver was started.
19
20
21
22 LPC Runtime status:
23
24 <what> == DI_CURRENT_RUNTIME_LIMITS:
25 Return an array with the current runtime limits.
26 The entries in the returned array are:
27
28 int[LIMIT_EVAL]: the max number of eval costs
29 int[LIMIT_ARRAY]: the max number of array entries
30 int[LIMIT_MAPPING_SIZE]: the max number of mapping values
31 int[LIMIT_MAPPING_KEYS]: the max number of mapping entries
32 (LIMIT_MAPPING is an alias for LIMIT_MAPPING_KEYS)
33 int[LIMIT_BYTE]: the max number of bytes handled with
34 one read_bytes()/write_bytes() call.
35 int[LIMIT_FILE]: the max number of bytes handled with
36 one read_file()/write_file() call.
37 int[LIMIT_CALLOUTS]: the number of callouts at one time.
38 int[LIMIT_COST]: how to account the current cost.
39 int[LIMIT_MEMROY]: the max. number of bytes which can be
40 _additionally_ allocated/used
41 _per top-level execution thread_
42
43 For all limits except LIMIT_COST a limit of '0' aka LIMIT_UNLIMITED
44 means 'no limit'.
45
46 The value for LIMIT_COST has these meanings:
47
48 value > 0: the execution will cost minimum(<value>, actual cost) .
49 value = 0: if the current LIMIT_EVAL is larger than the calling
50 LIMIT_EVAL, the evaluation will cost only 10; otherwise
51 the full cost will be accounted.
52 value < 0: (-value)% of the current evaluation cost will be
53 accounted; -100 obviously means 'full cost'.
54
55 <what> == DI_EVAL_NUMBER:
56 Return the current evaluation number.
57 The number is incremented for each top-level call. Top-level
58 calls are initiated by the driver, usually in reaction to an
59 external event:
60 - commands (added by add_action)
61 - heart_beat, reset, clean_up
62 - calls from call_out or input_to
63 - master applies triggered by external events
64 - calls of driver hooks in reaction to external events
65 - send_erq callbacks
66 - logon in interactives
67
68 The number can be used to detect cases where the same code is
69 executed twice in the same top level evaluation (say, heart_beat),
70 and also for time stamps for ordering some events.
71
72 Please note that the counter may overflow, especially on 32 bit
73 systems. As a result, it can also be negative.
74
75
76
77 Network configuration:
78
79 <what> == DI_MUD_PORTS:
80 Returns an array with all open ports, which the driver
81 listens for player connections on.
82
83 <what> == DI_UDP_PORT:
84 Returns the port number of the UDP socket.
85
86
87
88 Memory management:
89
90 <what> == DI_MEMORY_RESERVE_USER:
91 Current size of the user memory reserve.
92 The user memory reserve is allocated at startup and is used
93 when the driver runs out of memory.
94
95 <what> == DI_MEMORY_RESERVE_MASTER:
96 Current size of the master memory reserve.
97 The master memory reserve is allocated at startup and is used
98 when the driver runs out of memory while executing master
99 code.
100
101 <what> == DI_MEMORY_RESERVE_SYSTEM:
102 Current size of the system memory reserve.
103 The system memory reserve is allocated at startup and is used
104 when the driver runs out of memory while executing internal
105 operations.
106
107
108
109 Traces:
110
111 <what> == DI_TRACE_CURRENT:
112 Returns the current stack trace in array form.
113
114 If the array has more than one entries, the first entry is 0 or
115 the name of the object with the heartbeat which started the
116 current thread; all following entries describe the call stack
117 starting with the topmost function called.
118
119 All call entries are arrays themselves with the following elements:
120
121 int[TRACE_TYPE]: The type of the call frame:
122 TRACE_TYPE_SYMBOL (0): a function symbol (shouldn't happen).
123 TRACE_TYPE_SEFUN (1): a simul-efun.
124 TRACE_TYPE_EFUN (2): an efun closure.
125 TRACE_TYPE_LAMBDA (3): a lambda closure.
126 TRACE_TYPE_LFUN (4): a normal lfun.
127
128 mixed[TRACE_NAME]: The 'name' of the called frame:
129 _TYPE_EFUN: either the name of the efun, or the code of
130 the instruction for operator closures
131 _TYPE_LAMBDA: the numeric lambda identifier.
132 _TYPE_LFUN: the name of the lfun.
133
134 string[TRACE_PROGRAM]: The (file)name of the program holding
135 the code.
136
137 string[TRACE_OBJECT]: The name of the object for which the code
Arathornf76eb122022-01-09 13:19:39 +0100138 was executed. For lightweight objects
139 this is 0.
140
MG Mud User88f12472016-06-24 23:31:02 +0200141 int[TRACE_LOC]:
142 _TYPE_LAMBDA: current program offset from the start of the
143 closure code.
144 _TYPE_LFUN: the line number.
145
146 <what> == DI_TRACE_CURRENT_DEPTH:
147 Return the current number of frames on the control stack
148 (recursion depth).
149
150 <what> == DI_TRACE_CURRENT_AS_STRING:
151 Returns the current stack trace as a string.
152
153 <what> == DI_TRACE_LAST_ERROR:
154 Returns the stack trace of the last error in array form
155 (same format as DI_TRACE_CURRENT). Stack traces of errors
156 before the last GC might not be available anymore.
157
158 <what> == DI_TRACE_LAST_ERROR_AS_STRING:
159 Returns the stack trace of the last error as a string.
160
161 <what> == DI_TRACE_LAST_UNCAUGHT_ERROR:
162 Returns the stack trace of the last uncaught error in array form
163 (same format as DI_TRACE_CURRENT). Stack traces of errors
164 before the last GC might not be available anymore.
165
166 <what> == DI_TRACE_LAST_UNCAUGHT_ERROR_AS_STRING:
167 Returns the stack trace of the last uncaught error as a string.
168
169
170
171 LPC Runtime statistics:
172
173 <what> == DI_NUM_FUNCTION_NAME_CALLS:
174 Number of function calls by name (like call_other).
175
176 <what> == DI_NUM_FUNCTION_NAME_CALL_HITS:
177 Function calls by name are cached (to accelerate
178 lookup of the corresponding program code).
179 This returns the number of cache hits.
180
181 <what> == DI_NUM_FUNCTION_NAME_CALL_MISSES:
182 The number of function call cache misses.
183
184 <what> == DI_NUM_OBJECTS_LAST_PROCESSED:
185 Number of listed objects processed in the last backend cycle.
186
187 <what> == DI_NUM_HEARTBEAT_TOTAL_CYCLES:
188 Total number of heart_beats cycles so far.
189
190 <what> == DI_NUM_HEARTBEAT_ACTIVE_CYCLES:
191 Number of active heart_beat cycles executed so far
192 (ie. cycles in which at least one heart_beat() function
193 was called).
194
195 <what> == DI_NUM_HEARTBEATS_LAST_PROCESSED:
196 Number of heart_beats calls in the last backend cycle
197
198 <what> == DI_NUM_STRING_TABLE_STRINGS_ADDED:
199 Number of distinct strings added to the string table so far.
200
201 <what> == DI_NUM_STRING_TABLE_STRINGS_REMOVED:
202 Number of distinct strings removed from the string table so far.
203
204 <what> == DI_NUM_STRING_TABLE_LOOKUPS_BY_VALUE:
205 Number of string searches by value.
206
207 <what> == DI_NUM_STRING_TABLE_LOOKUPS_BY_INDEX:
208 Number of string searches by address.
209
210 <what> == DI_NUM_STRING_TABLE_LOOKUP_STEPS_BY_VALUE:
211 Number of lookup steps needed for string searches by value.
212
213 <what> == DI_NUM_STRING_TABLE_LOOKUP_STEPS_BY_INDEX:
214 Number of lookup steps needed for string searches by address.
215
216 <what> == DI_NUM_STRING_TABLE_HITS_BY_VALUE:
217 Number of successful lookups of strings by value.
218
219 <what> == DI_NUM_STRING_TABLE_HITS_BY_INDEX:
220 Number of successful lookups of strings by address.
221
222 <what> == DI_NUM_STRING_TABLE_COLLISIONS:
223 Number of distinct strings added to an existing hash chain so far.
224
225 <what> == DI_NUM_REGEX_LOOKUPS:
226 Number of requests for new regexps.
227
228 <what> == DI_NUM_REGEX_LOOKUP_HITS:
229 Number of requested regexps found in the table.
230
231 <what> == DI_NUM_REGEX_LOOKUP_MISSES:
232 Number of requested regexps not found in the table.
233
234 <what> == DI_NUM_REGEX_LOOKUP_COLLISIONS:
235 Number of requested new regexps which collided with a cached one.
236
237
238
239 Network statistics:
240
241 <what> == DI_NUM_MESSAGES_OUT:
242 Number of messages sent to a player.
243
244 <what> == DI_NUM_PACKETS_OUT:
245 Number of packets sent to a player.
246
247 <what> == DI_NUM_PACKETS_IN:
248 Number of packets received from a player.
249
250 <what> == DI_SIZE_PACKETS_OUT:
251 Number of bytes sent to a player.
252
253 <what> == DI_SIZE_PACKETS_IN:
254 Number of bytes received from a player.
255
256
257
258 Load:
259
260 <what> == DI_LOAD_AVERAGE_COMMANDS:
261 A float value that shows the number of executed player commands
262 per second.
263
264 <what> == DI_LOAD_AVERAGE_LINES:
265 A float value that shows the number of compiled code lines
266 per second.
267
268 <what> == DI_LOAD_AVERAGE_PROCESSED_OBJECTS:
269 A float value that shows the average number of objects processed
270 each backend cycle.
271
272 <what> == DI_LOAD_AVERAGE_PROCESSED_OBJECTS_RELATIVE:
273 Average number of objects processed each cycle, expressed
274 as percentage (0..1.0) of the number of present objects.
275
276 <what> == DI_LOAD_AVERAGE_PROCESSED_HEARTBEATS_RELATIVE:
277 Average number of heart_beats called each cycle, expressed
278 as fraction (0..1.0) of the number of active heartbeats.
279
280
281
282 Memory use statistics:
283
284 <what> == DI_NUM_ACTIONS:
285 Number of allocated actions.
286
287 <what> == DI_NUM_CALLOUTS:
288 Number of pending call_outs.
289
290 <what> == DI_NUM_HEARTBEATS:
291 Number of objects with a heartbeat.
292
293 <what> == DI_NUM_SHADOWS:
294 Number of allocated shadows.
295
296 <what> == DI_NUM_OBJECTS:
297 Number of objects.
298
299 <what> == DI_NUM_OBJECTS_SWAPPED:
300 Number of objects that are swapped-out.
301
302 <what> == DI_NUM_OBJECTS_IN_LIST:
303 Number of objects in the object list
304 (i.e. not destructed objects).
305
306 <what> == DI_NUM_OBJECTS_IN_TABLE:
307 Number of objects in the object table.
308
309 <what> == DI_NUM_OBJECTS_DESTRUCTED:
310 Number of destructed, but still referenced objects.
311 (Not counting DI_NUM_OBJECTS_NEWLY_DESTRUCTED).
312
313 <what> == DI_NUM_OBJECTS_NEWLY_DESTRUCTED:
314 Number of newly destructed objects (ie. objects destructed
315 in this execution thread, that will really be destroyed in
316 the next backend cycle).
317
318 <what> == DI_NUM_OBJECT_TABLE_SLOTS:
319 Number of hash slots provided by the object table.
320
321 <what> == DI_NUM_PROGS:
322 Size occupied by the object table.
323
324 <what> == DI_NUM_PROGS_SWAPPED:
325 Number of swapped-out program blocks
326
327 <what> == DI_NUM_PROGS_UNSWAPPED:
328 Number of programs that were swapped-out, are now swapped-in,
329 but still have allocated space in the swap file.
330
331 <what> == DI_NUM_ARRAYS:
332 Number of currently existing arrays.
333
334 <what> == DI_NUM_MAPPINGS:
335 Number of currently existing mappings.
336
337 <what> == DI_NUM_MAPPINGS_CLEAN:
338 Number of clean mappings (mappings without a hash part).
339
340 <what> == DI_NUM_MAPPINGS_HASH:
341 Number of hash mappings.
342
343 <what> == DI_NUM_MAPPINGS_HYBRID:
344 Number of hybrid mappings (mappings that have a
345 condensed and hash part).
346
347 <what> == DI_NUM_STRUCTS:
348 Number of currently existing structs.
349
350 <what> == DI_NUM_STRUCT_TYPES:
351 Number of currently existing struct types.
352
353 <what> == DI_NUM_VIRTUAL_STRINGS:
354 Number of currently existing virtual strings
355 (identical strings are counted separately).
356
357 <what> == DI_NUM_STRINGS:
358 Number of real strings (identical strings
359 are counted once).
360
361 <what> == DI_NUM_STRINGS_TABLED:
362 Number of directly tabled strings.
363
364 <what> == DI_NUM_STRINGS_UNTABLED:
365 Number of untabled strings.
366
367 <what> == DI_NUM_STRING_TABLE_SLOTS:
368 Number of hash slots in the string table.
369
370 <what> == DI_NUM_STRING_TABLE_SLOTS_USED:
371 Number of hash chains in the string table.
372
373 <what> == DI_NUM_REGEX:
374 Number of cached regular expressions.
375
376 <what> == DI_NUM_REGEX_TABLE_SLOTS:
377 Number of slots in the regexp cache table.
378
Zesstraa812fe62017-06-18 15:31:06 +0200379 <what> == DI_NUM_LVALUES
380 Number of lvalues (values referenced by &var).
381
MG Mud User88f12472016-06-24 23:31:02 +0200382 <what> == DI_SIZE_ACTIONS:
383 Total size of allocated actions.
384
385 <what> == DI_SIZE_CALLOUTS:
386 Total size of pending call_outs.
387
388 <what> == DI_SIZE_HEARTBEATS:
389 Total size of the heart_beat list.
390
391 <what> == DI_SIZE_SHADOWS:
392 Total size of allocated shadows.
393
394 <what> == DI_SIZE_OBJECTS:
395 Total size of objects (not counting the size of the values
396 of their variables).
397
398 <what> == DI_SIZE_OBJECTS_SWAPPED:
399 Total size of swapped-out variable blocks.
400
401 <what> == DI_SIZE_OBJECT_TABLE:
402 Size occupied by the object table.
403
404 <what> == DI_SIZE_PROGS:
405 Total size of all programs.
406
407 <what> == DI_SIZE_PROGS_SWAPPED:
408 Total size of swapped-out program blocks
409
410 <what> == DI_SIZE_PROGS_UNSWAPPED:
411 Total size of unswapped program blocks
412
413 <what> == DI_SIZE_ARRAYS:
414 Total size of all arrays (not counting additional sizes
415 of array element values).
416
417 <what> == DI_SIZE_MAPPINGS:
418 Total size of all mapping (not counting additional sizes
419 of contained values).
420
421 <what> == DI_SIZE_STRUCTS:
422 Total size of all structs (not counting additional sizes
423 of contained values).
424
425 <what> == DI_SIZE_STRUCT_TYPES:
426 Total size of all struct type definitions.
427
428 <what> == DI_SIZE_STRINGS:
429 Total size of all strings.
430
431 <what> == DI_SIZE_STRINGS_TABLED:
432 Total size of all tabled strings.
433
434 <what> == DI_SIZE_STRINGS_UNTABLED:
435 Total size of all untabled strings.
436
437 <what> == DI_SIZE_STRING_TABLE:
438 Size of the string table structure itself.
439
440 <what> == DI_SIZE_STRING_OVERHEAD:
441 Size of the overhead per string (compared to a raw string).
442
443 <what> == DI_SIZE_REGEX:
444 Total size of all cached regular expressions.
445
446 <what> == DI_SIZE_BUFFER_FILE:
447 The size of the memory buffer for file operations.
448
449 <what> == DI_SIZE_BUFFER_SWAP:
450 The size of the memory buffer for the swap file.
451
452
453
454 Memory swapper statistics:
455
456 <what> == DI_NUM_SWAP_BLOCKS:
457 Number of blocks in the swap file.
458
459 <what> == DI_NUM_SWAP_BLOCKS_FREE:
460 Number of free blocks in the swap file.
461
462 <what> == DI_NUM_SWAP_BLOCKS_REUSE_LOOKUPS:
463 Number of searches for blocks to reuse in the swap file.
464
465 <what> == DI_NUM_SWAP_BLOCKS_REUSE_LOOKUP_STEPS:
466 Total number of lookup steps in searches for blocks
467 to reuse in the swap file.
468
469 <what> == DI_NUM_SWAP_BLOCKS_FREE_LOOKUPS:
470 Number of searches for blocks to free in the swap file.
471
472 <what> == DI_NUM_SWAP_BLOCKS_FREE_LOOKUP_STEPS:
473 Total number of lookup steps in searches for blocks
474 to free in the swap file.
475
476 <what> == DI_SIZE_SWAP_BLOCKS:
477 Size of the swap file.
478
479 <what> == DI_SIZE_SWAP_BLOCKS_FREE:
480 Size of free blocks in the swap file.
481
482 <what> == DI_SIZE_SWAP_BLOCKS_REUSED:
483 Total reused space in the swap file.
484
485 <what> == DI_SWAP_RECYCLE_PHASE:
486 True if the swapper is currently recycling free block.
487
488
489
490 Memory allocator statistics:
491
492 <what> == DI_MEMORY_ALLOCATOR_NAME:
493 The name of the allocator: "sysmalloc", "smalloc", "slaballoc
494
495 <what> == DI_NUM_SYS_ALLOCATED_BLOCKS:
496 Number of memory blocks requested from the operating system.
497
498 <what> == DI_NUM_LARGE_BLOCKS_ALLOCATED:
499 Number of large allocated blocks.
500 (With smalloc: The large allocated blocks include
501 the small chunk blocks.)
502
503 <what> == DI_NUM_LARGE_BLOCKS_FREE:
504 Number of large free blocks.
505
506 <what> == DI_NUM_LARGE_BLOCKS_WASTE:
507 Number of unusable large memory fragments.
508
509 <what> == DI_NUM_SMALL_BLOCKS_ALLOCATED:
510 Number of small allocated blocks.
511
512 <what> == DI_NUM_SMALL_BLOCKS_FREE:
513 Number of small free blocks.
514
515 <what> == DI_NUM_SMALL_BLOCKS_WASTE:
516 Number of unusably small memory fragments.
517
518 <what> == DI_NUM_SMALL_BLOCK_CHUNKS:
519 Number of small chunk/slab blocks.
520 (That are large blocks that are used as a
521 base for small blocks.)
522
523 <what> == DI_NUM_UNMANAGED_BLOCKS:
524 Number of unmanaged (non-GC-able) allocations.
525
526 <what> == DI_NUM_FREE_BLOCKS_AVL_NODES:
527 Number of AVL nodes used to manage the large free
528 blocks. This value might go away again.
529
530 <what> == DI_SIZE_SYS_ALLOCATED_BLOCKS:
531 Total size of memory requested from the operating system.
532
533 <what> == DI_SIZE_LARGE_BLOCKS_ALLOCATED:
534 Total size of large allocated blocks.
535
536 <what> == DI_SIZE_LARGE_BLOCKS_FREE:
537 Total size of large free blocks.
538
539 <what> == DI_SIZE_LARGE_BLOCKS_WASTE:
540 Total size of unusable large memory fragments.
541
542 <what> == DI_SIZE_LARGE_BLOCK_OVERHEAD:
543 The overhead of every large block allocation.
544
545 <what> == DI_SIZE_SMALL_BLOCKS_ALLOCATED:
546 Total size of small allocated blocks.
547
548 <what> == DI_SIZE_SMALL_BLOCKS_FREE:
549 Total size of small free blocks.
550
551 <what> == DI_SIZE_SMALL_BLOCKS_WASTE:
552 Total size of unusably small memory fragments.
553
554 <what> == DI_SIZE_SMALL_BLOCK_OVERHEAD:
555 The overhead of every small block allocation.
556
557 <what> == DI_SIZE_SMALL_BLOCK_CHUNKS:
558 Total size of small chunk/slab blocks.
559
560 <what> == DI_SIZE_UNMANAGED_BLOCKS:
561 Total size of unmanaged (non-GC-able) allocations.
562
563 <what> == DI_SIZE_MEMORY_USED:
564 The amount of memory currently allocated from the allocator.
565
566 <what> == DI_SIZE_MEMORY_UNUSED:
567 The amount of memory allocated from the system, but
568 not used by the driver.
569
570 <what> == DI_SIZE_MEMORY_OVERHEAD:
571 Amount of memory used for the management of the memory.
572
573 <what> == DI_NUM_INCREMENT_SIZE_CALLS:
574 Number of requests to increase the size of a memory block.
575
576 <what> == DI_NUM_INCREMENT_SIZE_CALL_SUCCESSES:
577 Number of successful requests to increase the
578 size of a memory block.
579
580 <what> == DI_SIZE_INCREMENT_SIZE_CALL_DIFFS:
581 Total size of additionally allocated memory by
582 increasing already allocated memory blocks.
583
584 <what> == DI_NUM_REPLACEMENT_MALLOC_CALLS:
585 Number of allocations done through the
586 clib functions (if supported by the allocator).
587
588 <what> == DI_SIZE_REPLACEMENT_MALLOC_CALLS:
589 Total size of allocations done through the
590 clib functions (if supported by the allocator).
591
592 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALLS_FULL:
593 Total number of requests to defragment all small memory chunks.
594
595 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALLS_TARGETED:
596 Total number of requests to defragment small memory chunks
597 for a desired size.
598
599 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_CALL_TARGET_HITS:
600 Total number of successful requests to defragment small
601 memory chunks for a desired size.
602
603 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_INSPECTED:
604 Number of blocks inspected during defragmentations.
605
606 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_MERGED:
607 Number of blocks merged during defragmentations.
608
609 <what> == DI_NUM_MEMORY_DEFRAGMENTATION_BLOCKS_RESULTING:
610 Number of defragmented blocks (ie. merge results).
611
612 <what> == DI_MEMORY_EXTENDED_STATISTICS:
613 If the driver was compiled with extended memory statistics,
614 they are returned in this entry; if the driver was compiled
615 without the statistics, 0 is returned.
616
617 The array contains NUM+2 entries, where NUM is the number
618 of distinct small block sizes. Entry [NUM] describes the
619 statistics of oversized small blocks (smalloc) resp. for
620 all slabs (slaballoc), entry [NUM+1] summarizes all large
621 blocks. Each entry is an array of these fields:
622
623 int DIM_ES_MAX_ALLOC:
624 Max number of allocated blocks of this size.
625
626 int DIM_ES_CUR_ALLOC:
627 Current number of allocated blocks of this size.
628
629 int DIM_ES_MAX_FREE:
630 Max number of allocated blocks of this size.
631
632 int DIM_ES_CUR_FREE:
633 Current number of allocated blocks of this size.
634
635 float DIM_ES_AVG_XALLOC:
636 Number of explicit allocation requests per
637 second.
638
639 float DIM_ES_AVG_XFREE:
640 Number of explicit deallocation requests per
641 second.
642
643 int DIM_ES_FULL_SLABS:
644 Number of fully used slabs (slaballoc only).
645
646 int DIM_ES_FREE_SLABS:
647 Number of fully free slabs (slaballoc only).
648
649 int DIM_ES_TOTAL_SLABS:
650 Total number of slabs: partially used, fully used
651 and fully free (slaballoc only).
652
653 The allocation/deallocation-per-second statistics do
654 not cover internal shuffling of the freelists.
655
656 The slab statistics (entry [NUM], slaballoc only) shows
657 in the AVG statistics the frequence with which slabs were
658 allocated from resp. returned to the large memory pool.
659
660
661
662 Status texts:
663
664 <what> == DI_STATUS_TEXT_MEMORY:
665 A printable string containing information about
666 the memory usage.
667
668 <what> == DI_STATUS_TEXT_TABLES:
669 A printable string containing information about
670 the LPC runtime.
671
672 <what> == DI_STATUS_TEXT_SWAP:
673 A printable string containing information about
674 the swap system.
675
676 <what> == DI_STATUS_TEXT_MALLOC:
677 A printable string containing information about
678 memory allocations.
679
680 <what> == DI_STATUS_TEXT_MALLOC_EXTENDED:
681 A printable strings with extended memory statistics
682 (if the driver was compiled with them).
683
684
685HISTORY
686 Introduced in LDMud 3.5.0.
687
688SEE ALSO
689 configure_driver(E), object_info(E), interactive_info(E),
690 dump_driver_info(E)