OVH Cloud OVH Cloud

Limiter le cache du système de fichier

8 réponses
Avatar
brillard.sebastien
Bonjour à tous,

J'ai ici une machine linux avec une base de données Oracle.
Le cache de mon système de fichier est important.
De plus il ne sert a rien a par cacher deux fois les donnees oracle.
Le problemes en plus est que le système swap au lieu de prendre les pages
dans le cache:

exemple:

procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy wa id
0 2 72028 15956 257132 634480 117 147 352 1933 305 599 27 1 64 8
3 0 71816 15892 257132 634800 42 0 129 1916 309 556 19 1 72 8
0 1 71756 17288 257132 634288 12 120 188 1661 266 556 18 1 56 25
0 1 71864 16128 257132 635872 13 30 350 1465 214 632 22 1 45 32
1 0 72380 15960 257132 635520 0 0 147 1174 235 481 10 1 61 27
1 2 72380 15824 257132 635656 0 83 223 1490 267 547 15 1 63 22
0 1 72380 15920 257132 636068 0 122 50 1156 255 499 14 1 40 45
0 1 72536 16096 257132 636164 0 93 93 1053 292 563 14 1 49 36
0 0 73056 15872 257132 635828 0 0 49 685 372 731 9 2 60 29
1 0 73052 15988 257132 635768 1 0 33 659 402 801 15 2 57 27
0 2 73052 16116 257132 635572 2 0 68 1360 223 352 27 1 26 46

Y a t'il pas un moyen pour réduire fortement la taille du cache ?
du genre avec : echo "x x x x x" > /proc/sys/vm/bdflush ?

Merci de votre aide!

Sébastien

8 réponses

Avatar
Rakotomandimby (R12y) Mihamina
( Thu, 24 Feb 2005 07:35:03 -0800 ) Sebastien :

Le problemes en plus est que le système swap au lieu de prendre les pages
dans le cache:
[...]
Y a t'il pas un moyen pour réduire fortement la taille du cache ?


Je ne suis pas une fleche dans ces histoires de cache, mais pourquoi ne
pas d'abord envisager d'annuler la swap, et voir ce que ça donne?

Je pense que le temps d'acces à ce "cache" est plus court que celui
d'accès à la swap, sauf si cache == swap.

--
L'ASPO a pour but de démocratiser l'acces a l'informatique. Une de ses
activité est l'infogerance (http://aspo.rktmb.org/activites/infogerance)
Tél: + 33 2 38 04 26 04 ou + 33 6 33 26 13 14 (France)

Avatar
l'indien
On Thu, 24 Feb 2005 07:35:03 -0800, Sebastien wrote:

Bonjour à tous,

J'ai ici une machine linux avec une base de données Oracle.
Le cache de mon système de fichier est important.
De plus il ne sert a rien a par cacher deux fois les donnees oracle.
Le problemes en plus est que le système swap au lieu de prendre les pages
dans le cache:

exemple:

procs memory swap io system cpu
r b swpd free buff cache si so bi bo in cs us sy wa id
0 2 72028 15956 257132 634480 117 147 352 1933 305 599 27 1 64 8
3 0 71816 15892 257132 634800 42 0 129 1916 309 556 19 1 72 8
0 1 71756 17288 257132 634288 12 120 188 1661 266 556 18 1 56 25
0 1 71864 16128 257132 635872 13 30 350 1465 214 632 22 1 45 32
1 0 72380 15960 257132 635520 0 0 147 1174 235 481 10 1 61 27
1 2 72380 15824 257132 635656 0 83 223 1490 267 547 15 1 63 22
0 1 72380 15920 257132 636068 0 122 50 1156 255 499 14 1 40 45
0 1 72536 16096 257132 636164 0 93 93 1053 292 563 14 1 49 36
0 0 73056 15872 257132 635828 0 0 49 685 372 731 9 2 60 29
1 0 73052 15988 257132 635768 1 0 33 659 402 801 15 2 57 27
0 2 73052 16116 257132 635572 2 0 68 1360 223 352 27 1 26 46

Y a t'il pas un moyen pour réduire fortement la taille du cache ?
du genre avec : echo "x x x x x" > /proc/sys/vm/bdflush ?


Est tu sur qu'il swappe vraiment ?
Ca parait douteux que linux swappe s'il a des caches alloués en grande
quantité.
Ce n'est pas la taille swappée qui compte, c'est le nombre de fautes de
pages. Un process peut très bien avoir de nombreuse pages swappées sans
utiliser un seul octet du swap et sans jamais faire de fautes de pages:
par exemple, toutes les pages de code qui n'ont jamais été executées
sont swappées dans le fichier executable lui même. Ainsi, le code qui
n'a pas été executé ne consome jamais de mémoire.
Tu peux voir celà avec top, en affichant le nombre de "page faults"
(commande f puis u) et en triant par le nombre de page faults
(commande O puis U).
Si ton process swappe vraiment, tu verras ce nombre augmenter très
rapidement. Sinon, c'est qu'il ne swappe pas.
Tu peux aussi avoir l'information dans /proc/<pid>/stat
C'est le 12è champ, si je ne me trompe pas.
Je ne crois pas que ps affiche cette information.

Avatar
Jérémy JUST
On 24 Feb 2005 07:35:03 -0800
(Sebastien) wrote:

J'ai ici une machine linux avec une base de données Oracle.
Le cache de mon système de fichier est important.
De plus il ne sert a rien a par cacher deux fois les donnees oracle.


Si la machine ne sert qu'à cette base, tu peux préciser à Oracle la
mémoire qu'il a le droit de prendre pour ses caches à lui. Ainsi, il
prendra plus et laissera moins au système, et tu n'auras plus ton souci
de double cache.

--
Jérémy JUST

Avatar
Sébastien
Il ne fait aucun doute que ma machine swap.
Car comme tu peux le voir sur l'extrait de la commande vmstat la colonne
so est différente de zero. De plus j'ai constaté que swapd augmente de
plusieurs dizaines de Mo durant l'activité de la base.

J'ai fait l'expérience suivante sur un autre linux en mettant mes
datafiles Oracle sur des raw devices et là tous les problèmes de swap
dissparaisse.

Mon explication: (à confirmer par un expert linux):
-Avec Oracle les données sont cachés par son propre cache.
-Le cache du système de fichier cache les données des fichiers de
données Oracle.
-Sur des gros accès aux données, le cache d'Oracle est insuffisant
(normal)! Seulement les pages utilisé pour ce cache sont tjs les mêmes
donc taux de repaging du pool des pages des datas du système bas !
-Le cache du système de fichier est de toute façon insuffisante par
rapport à la taille des datafiles donc taux de repaging élevé !
-Je pense que le système va privilégier le pool qui a le taux de
repaging le plus élevé ! donc il va privilégier le cache du fs au
détriments des datas ce qui provoque le swap du serveur !

Ce que je veux faire est de diminuer la taille max du cache du système de
fichier afin d'avoir une free list importante pour éviter le swap.
Avatar
Sébastien
Si j'annule le swap et q'un jour j'ai plus de mémoire => kernel panic
Alors que avec un swap présent il me reste une marge plus importante.
Mais effectivement sans swap le système serait bien obligé, je pense, à
prendre les pages dans le cache.
Avatar
JB
Sébastien wrote:
Il ne fait aucun doute que ma machine swap.
Car comme tu peux le voir sur l'extrait de la commande vmstat la colonne
so est différente de zero. De plus j'ai constaté que swapd augmente de
plusieurs dizaines de Mo durant l'activité de la base.

J'ai fait l'expérience suivante sur un autre linux en mettant mes
datafiles Oracle sur des raw devices et là tous les problèmes de swap
dissparaisse.

Mon explication: (à confirmer par un expert linux):
-Avec Oracle les données sont cachés par son propre cache.
-Le cache du système de fichier cache les données des fichiers de
données Oracle.
-Sur des gros accès aux données, le cache d'Oracle est insuffisant
(normal)! Seulement les pages utilisé pour ce cache sont tjs les mêmes
donc taux de repaging du pool des pages des datas du système bas !
-Le cache du système de fichier est de toute façon insuffisante par
rapport à la taille des datafiles donc taux de repaging élevé !
-Je pense que le système va privilégier le pool qui a le taux de
repaging le plus élevé ! donc il va privilégier le cache du fs au
détriments des datas ce qui provoque le swap du serveur !

Ce que je veux faire est de diminuer la taille max du cache du système de
fichier afin d'avoir une free list importante pour éviter le swap.




Oracle gére ses propres caches,
sa valeur est prédéfini dans le initnom_base.ora
celle-ci est visualisable avec un show parameters;
ces valeurs sont limitées par shmmax
dans les préconisation de la 10g pour Linux (version d'évaluation un an)
la taille réservée est de 2GB à la puissance de 2 prés (lier au 32 bits)
ces préconisations sont valables pour tous les SGBD
Oracle, Informix et autres
Ces préconisations sont valables pour AIX, Solaris et autres OS,
malheuresement je n'ai jamais su les boutons pour M$
A+
JB

Avatar
TiChou
Dans le message <news:,
*Sébastien* tapota sur f.c.o.l.configuration :

Si j'annule le swap et q'un jour j'ai plus de mémoire => kernel panic


Non.

--
TiChou

Avatar
l'indien
On Sun, 27 Feb 2005 10:22:10 +0100, Sébastien wrote:

Il ne fait aucun doute que ma machine swap.
Car comme tu peux le voir sur l'extrait de la commande vmstat la colonne
so est différente de zero.


C'est toujours le cas, puisque, lorqu'un process démarre, il est
entièrement swappé. Le fait que le process ait des pages swappées sur
le disque ne signifie pas qu'il swappe, encore une fois. Il est rare qu'un
process ai son nombre de pages swappées à zéro car certaines pages ne
servent jamais ou très rarement (tout ce qui sert à la gestion d'erreur
grave, par exemple, a de bonnes chances de ne jamais être effectivement
chargé en mémoire).
Le seul chiffre important, c'est le nombre de pages en "swap-out".
Il ne me semble pas que vmstat donne cette information. Par contre, tu
peux avoir une idée de ce chiffre en regardant le nombre de "major
page-faults", une fois que le process a atteint un régime permanent de
fonctionnement: au démarage, chaque accès à une nouvelle page
déclenche une faute de page, puisque le process démare entièrement
swappé.
En régime permanent, par contre, il ne devrait y avoir des fautes de page
que si des pages du process ont effectivement été discardées.

De plus j'ai constaté que swapd augmente de
plusieurs dizaines de Mo durant l'activité de la base.


Ce qui est tout à fait normal, que la base swappe ou pas:
comme toutes les pages sont swappées lorsqu'un process démare, il faut
bien les charger lors du premier accès.
Encore une fois, ça ne donne aucune information sur le fait que le
process swappe ou non.

Il est possible que Oracle swappe effectivement, mais aucune des données
que tu fournis ne permet de le savoir.


Ce que je veux faire est de diminuer la taille max du cache du système
de fichier afin d'avoir une free list importante pour éviter le swap.


Tu ne peux pas. De toute façon, le cache de Linux n'est jamais
prioritaire par rapport aux pages mappées des process. Ca ne servirait
sans doute pas à grand chose.

La bonne façon de faire, tu l'a vu toi même, c'est de faire en sorte
qu'Oracle utilise des devices raw. Dans ce cas, il se débrouille pour
gérer ses caches et le map des pages du disque lui même.
Il est clair que la gestion du cache de Linux n'est pas adapté aux
besoins d'une grosse base de données et qu'il est très innefficace
de stocker celle-ci au travers d'un filesystem (à moins d'avoir un fs
adapté, ce qui n'est pas le cas de Linux).