10.7. The system monitor

The Self system contains a system monitor to display information about the internal workings of the system such as memory management and compilation. It is invoked with _Spy: true (there is are shortcuts in the shell, spyOn and spyOff). When it is active, the system monitor takes over a portion of your screen with a window that looks like this:


The indicators in the left part of the display correspond to various internal activities and events. On the very left are the CPU bars which show how much CPU is used in various parts of the system. The following table lists the individual indicators:

Table 10.2 The system monitor display: indicators
CPU Bar What It Means
VM CPU time spent executing in the VM, i.e. for primitives, garbage collection etc.
Lkup CPU time used by compile-time and run-time lookups.
Comp CPU time spent by the Self compilers. The black part stands for time consumed by the non-inling compiler (NIC), the gray part for the simple inlining compiler (SIC).
Self CPU time spent executing compiled Self code. The black part stands for time consumed by unoptimized (NIC) code, the gray part for optimized (SIC) code.
CPU This bar displays the percentage of the CPU that the Self process is getting (a completely filled bar equals 100% CPU utilization by Self). Black stands for user time, gray for system time.
Dot Below the CPU bar is a small dot which moves whenever a process switch takes place.

Indicator What It Means
X-compiling Y The X compiler (where X is either “nic” or “sic”) is compiling the method named Y into machine code.
scavenge The Self object memory is being scavenged. A scavenge is a fast, partial garbage collection (see [Ung84] , [Ung86] , [Lee88] ).
GC The Self object memory is being fully garbage-collected.
flushing Self is flushing the code cache.
compacting Self is compacting the code cache.
reclaiming Self is reclaiming space in the code cache to make room for a new method.
sec reclaim Self is flushing some methods in the code cache because there is not enough room in one of the secondary caches (the caches holding the debugging and dependency information).
ic flush Self is flushing all inline caches.
LRU sweep Self is examining methods in the code cache to determine whether they have been used recently.
page N N page faults occurred during the last time interval (N is not displayed if N=1). The time interval currently is 1/25 of a second.
read Self is blocked reading from a “slow” device, e.g., the keyboard or mouse.
write Self is blocked writing to a “slow” device, e.g., the screen.
disk in/out Self is doing disk I/O.
UNIX Self is blocked in some UNIX system call other than read or write.
idle Self has nothing to do. (shows up only when using processes.)

The middle part of the display contains some information on VM memory usage displayed in textual form, as described below:

Table 10.3 VM memory status information
Name Description
RSRC Size and utilization of the resource area (an area of memory used for temporary storage by the compiler and by primitives).
C-Heap Number of bytes allocated on the C heap by Self (excluding the memory and code spaces and the resource area).

The memory status portion of the system monitor consists of bars representing memory spaces and their utilization; all bars are drawn to scale relative to one another, their areas being proportional to the actual sizes of the memory spaces. The next table explains the details of this part of the system monitor’s display.

Table 10.4 The system monitor display: memory status
Space Description
object memory The four (or more) bars represent (from top to bottom) eden, the two survivor spaces, and subsequent bars are segments of old space. The left and right parts of each bar represent the space used by “plain” objects and byte vectors, respectively. The above picture shows a situation in which about half of old space is filled with plain objects and about 25% is filled with byte vectors. A fraction of old space’s used portions is currently paged out (gray areas). Below the old space is a ruler, marked in 1Mb intervals, showing the total allocated in old space (extending line at the left). To the right is a red bar representing how much of old space is reserved for use by the Virtual Machine, and a yellow bar representing the low space threshold (when crossed, the scheduler is notified and a garbage colelction may take place).
code cache These four bars represent the cache holding compiled methods with their associated debugging and dependency information. The bar labelled ‘code’ represents the cache containing the actual machine code for methods (including some headers and relocation information); it is divided into code generated by the primary (non-inlining) compiler, or NIC, and code generated by the secondary, smarter compiler (SIC). The cache represented by the bar labelled ‘deps’ contains dependency information for the compiled methods, and the cache represented by the bar labelled ‘debug’ contains the debugging information. The three-way split reduces the working set size of the code cache. The cache represented by the bar labelled ‘PICs’ contains polymorphic inline caches.

Color Meaning
black Allocated, residing in real memory.
gray Allocated, paged out.
white Unallocated memory.