Problèmes de CPU avec ASE 12.5.4 ESD5 et ESD6 sous Solaris

Introduction

Un problème a été identifié avec les versions 12.5.4 ESD#5 et ESD#6 d'Adaptive Server Enterprise sur les plateformes Sun Solaris. Cette note technique décrit le problème, les symptômes, les contournements.

Description du problème

Les deux ESD 5 et 6 d'ASE 12.5.4 peuvent utiliser plus de temps CPU système sur les plateformes solaris que le versions précédentes. Ceci est du à une amélioration implémentée dans Adaptive Server pour permettre les vérifications afin de corriger les adresses mémoire avant d'utiliser certaines structures mémoires. Cette vérification améliore la stabilité et la fiabilité d'Adaptive Server. Le mécanisme utilisé est l'appel à la fonction système brk( ) afin d'obtenir l'adresse courante maximum pour l'espace mémoire du programme.

Sur Solaris, le temps pris pour exécuter l'appel système est assez important pour impacter toute l'utilisation système CPU. Sur les autres plateformes, l'appel est peu coûteux.

Symptômes

L'utilisation extrême de la CPU ne peut être vue que par des outils systèmes comme top, sar ou vmstat. Ces symptômes ne peuvent être vus par sp_sysmon compte tenu du niveau système de ces appels dans le code d'Adaptive Server.

Si la charge du serveur est élevée de telle manière que le temps supplémentaire créé de la contention CPU, le problème peut impacter la performance globale du serveur et les temps de réponse.

Pour identifier si un serveur rencontre ce problème, utiliser la commande truss avec l'option -c sur les process dataserver pour vérifier les appels systèmes brk().

Voici un exemple d'un serveur rencontrant ce problème :

% truss -c -p 1234
^C

1234 est le PID du dataserver Sybase.


signals        ------------
SIGALRM                 189
SIGUSR2                   7
total:                  196

syscall          seconds  calls  errors
write               .197   1559
open                .073    230
close               .002     12
brk                4.143  86656
fstat               .254   6823
kill                .040    623
ioctl               .247   4159
fcntl               .025    687
lwp_unpark          .000      7
getmsg              .101   2230     209
putmsg              .075    241
poll                .116   2125       2
sigprocmask        2.043  64476
setcontext          .000      7
sigtimedwait        .043    189
kaio                .006     22
kaio                .017    533
                -------- ------    ----
sys totals:        7.389 170579     211
usr time:          1.216
elapsed:          18.860

Il faut noter le haut pourcentage (4.143 sur 7.839 secondes) passé pour l'appel à brk(). Un serveur ne rencontrant pas ce problème verra un pourcentage bien plus faible, voire négligeable.

Contournements et solution

Le seul contournement possible dans les versions ESD5 et ESD6 consiste à réduire le paramètre "number of user connections".

Ce problème est adressé par la demande de changement (CR - Change request) n°480690.

Le patch conserve le mécanisme de vérification des adresses mémoires valides, mais réduit grandement l'utilisation de l'appel système brk ( ).

Le patch est disponible dans la version 12.5.4 ESD#7.