This chapter reviews the resource management framework and describes a hypothetical server consolidation project. In this example, five applications are being consolidated onto a single system. The target applications have resource requirements that vary, different user populations, and different architectures.
Currently, each application exists on a dedicated server that is designed to meet the requirements of the application. The applications and their characteristics are identified in the following table.
|
Application Description |
Characteristics |
|---|---|
|
Application server |
Exhibits negative scalability beyond 2 CPUs |
|
Database instance for application server |
Heavy transaction processing |
|
Application server in test and development environment |
GUI-based, with untested code execution |
|
Transaction processing server |
Primary concern is response time |
|
Standalone database instance |
Processes a large number of transactions and serves multiple time zones |
The following configuration is used to consolidate the applications onto a single system.
The application server has a two–CPU processor set.
The database instance for the application server and the standalone database instance are consolidated onto a single processor set of at least four CPUs. The standalone database instance is guaranteed 75 percent of that resource.
The test and development application server requires the IA scheduling class to ensure UI responsiveness. Memory limitations are imposed to lessen the effects of bad code builds.
The transaction processing server is assigned a dedicated processor set of at least two CPUs, to minimize response latency.
Edit the project database file. Add entries to implement the required resource controls and to map users to resource pools, and then view the file.
# cat /etc/project . . . user.app_server:2001:Production Application Server:::project.pool=appserver_pool user.app_db:2002:App Server DB:::project.pool=db_pool,project.cpu-shares(privileged,1,deny) development:2003:Test and development::staff:project.pool=dev_pool, process.max-address-space=(privileged,536870912,deny) user.tp_engine:2004:Transaction Engine:::project.pool=tp_pool user.geo_db:2005:EDI DB:::project.pool=db_pool,project.cpu-shares=(privileged,3,deny) . . . |
The development team has to execute tasks in the development project because access for this project is based on a user's group ID (GID).
Create an input file named pool.host, which will be used to configure the required resource pools. View the file.
# cat pool.host create system host create pset default_pset (uint pset.min = 1) create pset dev_pset (uint pset.max = 2) create pset tp_pset (uint pset.min = 2) create pset db_pset (uint pset.min = 4; uint pset.max = 6) create pset app_pset (uint pset.min = 1; uint pset.max = 2) create pool default_pool (string pool.scheduler="TS"; boolean pool.default = true) create pool dev_pool (string pool.scheduler="IA") create pool appserver_pool (string pool.scheduler="TS") create pool db_pool (string pool.scheduler="FSS") create pool tp_pool (string pool.scheduler="TS") associate pool default_pool (pset default_pset) associate pool dev_pool (pset dev_pset) associate pool appserver_pool (pset app_pset) associate pool db_pool (pset db_pset) associate pool tp_pool (pset tp_pset) |
Type the following:
# poolcfg -f pool.host |
Make the configuration active.
# pooladm -c |
The framework is now functional on the system.
To view the framework configuration, type:
# pooladm
system host
int system.version 1
boolean system.bind-default true
string system.comment
pool default_pool
boolean pool.default true
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler TS
pset default_pset
pool dev_pool
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler IA
pset dev_pset
pool appserver_pool
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler TS
pset app_pset
pool db_pool
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler FSS
pset db_pset
pool tp_pool
boolean pool.default false
boolean pool.active true
int pool.importance 1
string pool.comment
string pool.scheduler TS
pset tp_pset
pset default_pset
int pset.sys_id -1
string pset.units population
boolean pset.default true
uint pset.max 4294967295
uint pset.min 1
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
pset dev_pset
int pset.sys_id 1
string pset.units population
boolean pset.default false
uint pset.max 2
uint pset.min 0
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
pset tp_pset
int pset.sys_id 2
string pset.units population
boolean pset.default false
uint pset.max 4294967295
uint pset.min 2
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
pset db_pset
int pset.sys_id 3
string pset.units population
boolean pset.default false
uint pset.max 6
uint pset.min 4
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
pset app_pset
int pset.sys_id 4
string pset.units population
boolean pset.default false
uint pset.max 2
uint pset.min 1
string pset.comment
boolean pset.escapable false
uint pset.load 0
uint pset.size 0
|
A graphic representation of the framework follows.

In the db_pool, the standalone database instance is guaranteed 75 percent of the CPU resource.