While virtual memory makes it possible for computers to more
easily handle larger and more complex applications, as with any
powerful tool, it comes at a price. The price in this case is one
of performance — a virtual memory operating system has a lot
more to do than an operating system incapable of supporting virtual
memory. This means that performance is never as good with virtual
memory as it is when the same application is 100%
memory-resident.
However, this is no reason to throw up one's hands and give up.
The benefits of virtual memory are too great to do that. And, with
a bit of effort, good performance is possible. The thing that must
be done is to examine those system resources impacted by heavy use
of the virtual memory subsystem.
For a moment, take what you have read in this chapter and
consider what system resources are used by extremely heavy page
fault and swapping activity:
-
RAM — It stands to reason that available RAM is low
(otherwise there would be no need to page fault or swap).
-
Disk — While disk space might not be impacted, I/O
bandwidth (due to heavy paging and swapping) would be.
-
CPU — The CPU is expending cycles doing the processing
required to support memory management and setting up the necessary
I/O operations for paging and swapping.
The interrelated nature of these loads makes it easy to
understand how resource shortages can lead to severe performance
problems.
All it takes is a system with too little RAM, heavy page fault
activity, and a system running near its limit in terms of CPU or
disk I/O. At this point, the system is thrashing, with poor
performance the inevitable result.
At best, the overhead from virtual memory support presents a
minimal additional load to a well-configured system:
-
RAM — Sufficient RAM for all working sets with enough left
over to handle any page faults
-
Disk — Because of the limited page fault activity, disk
I/O bandwidth would be minimally impacted
-
CPU — The majority of CPU cycles are dedicated to actually
running applications, instead of running the operating system's
memory management code
From this, the overall point to keep in mind is that the
performance impact of virtual memory is minimal when it is used as
little as possible. This means the primary determinant of good
virtual memory subsystem performance is having enough RAM.
Next in line (but much lower in relative importance) are
sufficient disk I/O and CPU capacity. However, keep in mind that
these resources only help the system performance degrade more
gracefully from heavy faulting and swapping; they do little to help
the virtual memory subsystem performance (although they obviously
can play a major role in overall system performance).