Quest Software Max-IT

 

  • Overview
  • Max-IT (VM)
  • Max-IT (CPU)
  • Licensing
  • Resources

Max-IT improves application response times and increases overall server capacity by streamlining and optimizing the use of virtual memory and CPU resources.

Max-IT consists of two main functional modules:

  • Max-IT (VM) - significantly increases the performance and capacity of a Terminal Server by performing two well-documented optimization techniques.
  • Max-IT (CPU) - improves application response times by ensuring that users and programs receive their rightful (fair) share of the CPU resources, and without being stifled by rogue (runaway) programs.

 

Max-IT (VM)

Max-IT (VM) significantly increases the performance and capacity of a Terminal Server by performing two well-documented optimization techniques:

  • Module rebasing: a process by which colliding DLLs are identified and relocated to unique base addresses within the virtual memory spaces of their respective programs. This powerful technique drastically reduces virtual memory requirements, page file usage, and I/O operations.
  • Module binding: further complements module rebasing by fine-tuning the “import section” of a given module according to the new base addresses of the rebased DLLs. This powerful technique accelerates application load times and yields further reductions in virtual memory requirements and page file usage.

 

  • The Facts
  • The Problem
  • The Solution & Benefits

Every executable and DLL module has a preferred base address which represents the “ideal” location where the module should get mapped to inside the process’s address space.

Typically, when a programmer builds a DLL module, the linker sets the preferred base address at 0x10000000. This can be easily verified by using the Visual Studio’s DumpBin utility or Sysinternals’ Process Explorer.

Figure 1 illustrates the problem. Let's say you want to run an executable that requires two DLLs. The loader maps the first DLL at its preferred base address of 0x10000000. It then attempts to map the second DLL at the same preferred base address of 0x10000000., but will fail because the first DLL is already mapped at this address. As a remedy, the loader must “relocate” the second DLL module by placing it somewhere else inside the process’s address space. It must also perform the necessary DLL code fix-ups.


Figure 1 – An example of a DLL collision

Relocating DLLs and performing the necessary fix-up operations is absolutely taxing on a system. The loader has to relocate hundreds of DLLs and modify a significant portion of each DLL’s code. This leads to more memory consumption and excessive copy-on-write operations.

This run-time overhead can be very damaging to the performance of a system and must be avoided at all costs. When multiplied by the number of users on a Terminal Server, this overhead can have devastating implications on performance and application response times.

Go to top

The Solution

  • Continuously monitor which DLLs are being loaded by applications and identify the “colliding” DLLs.
  • Permanently rebase the colliding DLLs and perform the necessary code fix-up operations.

The Benefits

  • The loader will no longer have to relocate or fix up the DLLs that have been optimized by Max-IT (VM).
  • Less physical memory will be consumed
  • Working set trimming will no longer require that working sets be swapped out to the paging file (copy-on-write) before the trimming can occur.
  • The overhead associated with relocation and fix-up operations is significantly reduced. When multiplied by the number of users on a Terminal Server, the savings can be significant, resulting in an overall capacity increase in the order of 25- 30 percent.

Figure 2 illustrates the memory savings achieved by Max-IT(VM).


Figure 2 – Max-IT’s rebasing and binding can yield significant memory savings in a Terminal Services environment. The larger the number of applications and users, the more significant the performance improvements.

Go to top

 

 

Max-IT (CPU) improves application response times by ensuring that users and programs receive their rightful (fair) share of the CPU resources, and without being stifled by rogue (runaway) programs.

 

  • The Facts
  • The Problem
  • The Solution
  • Due to design limitations and lazy programming techniques, many applications often exhibit adverse behavioral trends; they monopolize the server’s processors and deny other running applications their rightful share of CPU cycles. Such applications are often referred to as “rogue” or “runaway” applications.
  • By definition, a rogue or runaway application is one whose thread(s) use up excessive amounts of CPU resources. In other words, they consistently remain in the RUNNING state for the entire lifetime of their allotted time slices. A time slice is often referred as “quantum”, and its value is typically 10 to 15 milliseconds (hardware-dependent) under Windows 2000/2003.
  • The Windows scheduler does not include a fair-sharing mechanism; hence, it does not prevent rogue applications from consuming all the CPU time.
  • “Priority boosting” performed by Windows’ built-in balance set manager does not effectively address CPU starvation caused by runaway applications, especially in Terminal Server environments.
  • From a CPU management perspective, the thread priorities of interest are WAITING, READY, and RUNNING. In the case of a word processor, the latter could be waiting for user input. As soon as it receives input, it is ready to run. And as soon as the processor becomes free, it will run
  • Given two threads in the READY state, the scheduler will ALWAYS favor the process with the higher priority level over the other.

Consider the case of two running (single-threaded) applications, a well-behaved word processor (figure 3) and a runaway CPU spinner (figure 4). Assuming a quantum length of 10 milliseconds, each thread is eligible to use the CPU for up to 10 ms at a time (the time slice). A thread could potentially use up its entire time slice if it has enough work to do to fill up the time slice. Being a runaway application, the CPU spinner will steadily use the CPU for the duration of its time slice. Being a well-behaved application, the word processor will almost never use up its time slice. Instead, its CPU requirements are conservative as it will only consume a small to moderate portion of its time slice (if any). Occasionally, it may not even have anything to do (e.g., waiting on user input) and will remain in the WAITING state until something happens (e.g., user input is received).


Figure 3 – A well-behaved application


Figure 4 – An ill-behaved (aka. runaway or rogue) application

 

Max-IT (CPU) ensures that each running process will get its fair share of CPU resources, enabling it to run smoothly and co-exist alongside CPU-hungry and rogue applications. At the most basic level, Max-IT (CPU) achieves fair-sharing across all running processes as follows:

  • A fixed share of CPU resources is reserved to NT Authority (the operating system). By default, this share is 20 percent.
  • The “target percent CPU time” is then computed as (100 - Reserved) / (number of active processes), where Reserved is the percent CPU share reserved for NT Authority.
  • The “average percent CPU time” is calculated for each active process.
  • Processes whose “average percent CPU time” has fallen below the “target percent CPU time” will get their priority levels set to NORMAL.
  • Processes whose “average percent CPU time” has risen above the “target percent CPU time” will get their priority levels set to BELOW NORMAL.
  • Processes whose “average percent CPU time” has fallen to zero get their priority levels set to ABOVE NORMAL.
  • The above process is then repeated every several hundred milliseconds. The default setting is 100 milliseconds.

Max-IT (CPU) also makes use of proprietary and sophisticated techniques above and beyond what is described above. These techniques further improve the application response times and enhance the end-user’s experience.

 

 

 

Licensing

  • Standalone per-server license
  • Per concurrent user - Part of the vWorkspace Power Tools Edition
  • Per concurrent user - Part of the vWorkspace (Enterprise Edition)

Download

View Demo Movie