Kbase P57546: New HP Setting, SCHED_NOAGE, Might Reduce CPU Bottlenecks
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  9/11/2008 |
|
Status: Unverified
GOAL:
New HP Setting, SCHED_NOAGE, Might Reduce CPU Bottlenecks
FACT(s) (Environment):
HP-UX
Progress/OpenEdge Versions
FIX:
SCHED_NOAGE is a new HP policy which can increase performance on machines where CPU bottlenecks are occurring.
It is recommended that all Progress processes, broker, servers, self-service clients, and pagewriters should have SCHED_NOAGE applied to them.
Priority inversion is a situation in which a lower-priority process interrupts or blocks a higher-priority process from running.
The HP policy SCHED_NOAGE prevents a process from having its priority degrade
over time as the process is running. This policy has been successful in almost eliminating priority inversions against database applications, Java and multi-threaded programs that use mutexes or spinlocks.
Reduction or elimination of these priority inversions can increase performance.
A database experiencing one or both of these symptoms might benefit from setting 'SCHED_NOAGE'.
Symptoms:
-- TXE locks are being held by processes for more than a fraction of a second.
-- Very high -spin settings are being required in order to reduce latch timeouts.
To set the SCHED_NOAGE policy do the following:
1) Check your version.
HP/UX 11.11 and higher already has SCHED_NOAGE. Earlier versions of HP/UX might require additional OS patches. Please check with your OS vendor for additional
assistance in determining if your OS requires a patch.
2) This code can be run in the backgroup periodically to reset the permissions of any processes which are considered to be Progress processes.
# Begin file sched_noage script
#!/bin/sh
#If any probuild executables are made then they should also be searched for and added to the pslist variable.
PROSRV=${PROSRV-_mprosrv}
PROEXE=${PROEXE-_progres}
PROSHUT=${PROSHUT-_mprshut}
PROAPSV=${PROAPSV-_proapsv}
PROUTIL=${PROUTIL-_proutil}
pslist=`ps -ef|grep -v grep|grep -i $PROEXE|awk '{print $2}'`
pslist="$pslist `ps -ef|grep -v grep|grep -i $PROSRV|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i $PROSHUT|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i $PROUTIL|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i $PROAPSV|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i _rfutil|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i _dbutil|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i _sqlsrv2|awk '{print $2}'`"
pslist="$pslist `ps -ef|grep -v grep|grep -i java|awk '{print $2}'`"
for i in $pslist
do
{
rtsched -s SCHED_NOAGE -p 178 -P $i
}
done
#end sched_noage script
---------------------------------------------------------------------
3) Processes run within the SCHED_NOAGE shell will not have their
priority changed while the process is running.
Example:
$ sched_noage $$
$ proserve...
NOTE: All Progress processes can be 'SCHED_NOAGE'd after they
start by periodically running the program on the output of
'ps ax | grep {progress executables}'.