Consultor Eletrônico



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}'.