Next: Use of Performance Reflection
Up: Using Performance Reflection in
Previous: Introduction
We propose adding a performance reflection facility to the OS kernel
to collect performance metrics using timers, event counters, and some programmed hooks.
These metrics can estimate overhead and productivity.
First, some metrics represent costs:
For example, the TLB and data cache miss rates measure the overhead that the system incurs in running the applications. We use these metrics to estimate overhead.
Second, some metrics count useful work:
For example,
the number of instructions executed,
the floating point operation (FLOP) rate,
bytes transferred to I/O devices,
and the percentage of time the CPU spends in user mode
are measures of useful work done.
We use these metrics to estimate productivity.
cartoonThe relationship between overhead and productivity.0.40
We use the relationship
between overhead and productivity
to determine if there is a need to tune the system.
Figure 1 shows three schematic plots
that represent different relationships between overhead and productivity.
In the first plot, both overhead and productivity are increasing,
indicating that the load on the system is increasing and the system is behaving well.
The second plot shows that the productivity is decreasing whereas the overhead is increasing.
This corresponds to an undesired condition,
such as thrashing when the system is in overload.
Finally in the third plot, both overhead and productivity are decreasing,
indicating a normal behavior as the system load decreases.
There are different ways of estimating productivity and overhead.
It is not necessary to use any specific metric for these estimates.
It is also possible to compute some metrics indirectly [1] if they are not available from the hardware. For example,
the Cycles Per Instruction (CPI), which is a common measure of processor productivity, can be computed over some interval by taking the
ratio of the number of cycles to the number of instructions graduated.
While many different kinds of events can be counted, the number of distinct measures of productivity counted either by hardware counters or the OS is small, perhaps including instructions, FLOPs, and bytes/packets transferred over I/O devices. Similarly, a small set of cost/overhead measures (cycles, L2 cache misses, TLB misses, interrupts) is sufficient. The kernel can use its own heuristics, or it can be guided by application advice provided through an interface similar to madvise(3).
Productivity estimates can
be enhanced with application cooperation. A variable shared between the application and kernel can be used by the application to inform the kernel of its rate of progress [6].
For example, a multi-threaded network server, such as a Web server or a file server,
can use the number of requests
served as its measure of progress and requests per unit time
as its productivity metric.
Next: Use of Performance Reflection
Up: Using Performance Reflection in
Previous: Introduction
Sameh Mohamed Elnikety
2003-06-15