OVH Cloud OVH Cloud

Gestion memoire sur une machine bi/quadriproc

36 réponses
Avatar
Deepthroat
Bonjour,

j'ai quelques machines bi et quadriproc qui tournent avec un linux smp
(uniquement des mandrake 9.2), et j'ai un soucis sur la gestion de la
memoire.

Quand un utilisateur lance un calcul occupant beaucoup de memoire, la
machine n'occupe jamais toute la memoire dispo mais sature sur une
barette (1Go ou 512Mo).

Existe t'il un moyen pour permettre à un processus d'occuper toute la
memoire ?

Merci

10 réponses

1 2 3 4
Avatar
Laurent Wacrenier
Deepthroat écrit:
Pas de 64bits chez nous.
En fait nos equipes ont des acces a des centres de calculs mais pour
depanner et diversent raisons, certaines machines multiproc sont utiles
en local, mais elles ne sont pas suffisemment optimisées apparemment.


De toute façon, une architecture 32 bits ne permettra d'addresser que
4 Go. Pour plus de finesse dans les calculs, il faudra passer à 64
bits ou gerer soi même de la mémoire partagées qu'on allouera et
désasallouera en fonction des besoins, mais les performances seront
médiocres et la programation sera complexe (surtout en Fortran).

Avatar
Manu
Laurent Wacrenier wrote:
Et bien, 1 Go + 1 octet a pu être alloué avec succès.

Apparement, l'allocateur dynamique pose ses pointeurs autour
de 0x40000000 (1 Go), possible que le système ne puisse gérer
des segments plus gros.


Le problème se situe plus du coté des variables statiques à mon avis.
Il faudrait faire un test avec un tableau du style:
char tab[1024][1024][1024];

Je suis prêt à parier que le programme en question est écrit en Fortran
et il me semble qu'en Fortran tout est en statique.

Ici sur la même machine, l'allocation dynamique de 1Go fonctionne alors
que le même en statique segfault.

Avatar
Manu
Deepthroat wrote:

Je suis prêt à parier que le programme en question est écrit en
Fortran et il me semble qu'en Fortran tout est en statique.



C'est du fortran oui.


Il semblerait que se soit un bug du chargeur Linux et que en compilant
en statique (option -s ou -static) cela passe.
Je confirme la chose sur du code C...


Avatar
Jean-Marc Bourguet
Deepthroat writes:

OK, et quidd du 36bits (j'ai lu ca a plusieurs endroits) ?


Si c'est ce a quoi je pense (et donc pas d'utilisation d'un PDP-10 :-)
ca permet d'avoir plus de 4G de memoire pour le processeur, mais un
process ne peut en adresser que 4GB.

A+

--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
VANHULLEBUS Yvan
Laurent Wacrenier <lwa@ teaser . fr> writes:

Deepthroat écrit:
[....]

Que donne ce programe, une fois compilé ?

#include <stdlib.h>
#include <stdio.h>
void main(void) {
void *x = mallloc(1024 * 1024 * 1024 + 1)
printf("x=%pn", x);
}


[ tmp]# ./a.out
x=0x40158008


Et bien, 1 Go + 1 octet a pu être alloué avec succès.


Oui et non.

A une epoque ou je faisais quelques tests memoire, je m'etais rendu
compte que le fait d'allouer un gros bloc de memoire, puis de liberer
celle ci et quitter ne faisait pas de "reelle allocation de memoire
physique en RAM".

Un effet de bord facile a constater etait que ma consommation de
memoire cache etait encore importante juste apres la fin du programme
(alors que ca aurait du creer un vide).


J'avais change le binaire pour faire une lecture et/ou ecriture de
chaque octet de la zone allouee, et c'est seulement la que j'ai
constate une grosse chute d'utilisation memoire juste apres la fin
d'execution de ce programme (logique, pour allouer cette memoire
*vraiment utilisee*, le systeme purgeait beaucoup de memoire cache).



A +

VANHU.



Avatar
Laurent Wacrenier
VANHULLEBUS Yvan écrit:
A une epoque ou je faisais quelques tests memoire, je m'etais rendu
compte que le fait d'allouer un gros bloc de memoire, puis de liberer
celle ci et quitter ne faisait pas de "reelle allocation de memoire
physique en RAM".


L'allocateur ne va pas poker des trucs dans la RAM. La mémoire
accessible est la mémoire virtuelle (RAM + swap), de manière
transparente. Le système utilise une stratégie pour mettre en RAM ce
dont le programme a besoin quand il en a besoin et le remettre en swap
quand il ne s'en sert plus.

Avatar
VANHULLEBUS Yvan
Laurent Wacrenier <lwa@ teaser . fr> writes:

VANHULLEBUS Yvan écrit:
A une epoque ou je faisais quelques tests memoire, je m'etais rendu
compte que le fait d'allouer un gros bloc de memoire, puis de liberer
celle ci et quitter ne faisait pas de "reelle allocation de memoire
physique en RAM".


L'allocateur ne va pas poker des trucs dans la RAM. La mémoire
accessible est la mémoire virtuelle (RAM + swap), de manière
transparente. Le système utilise une stratégie pour mettre en RAM ce
dont le programme a besoin quand il en a besoin et le remettre en swap
quand il ne s'en sert plus.


Yep.

Il n'empeche que faire un gros malloc ne "suffit" pas forcement pour
verifier qu'une machine (hard+soft) est capable de manipuler
reellement cette quantite de memoire.....


Mais bon, il est probable que le test confirme quand meme que c'est
pas ca, c'est surtout que ca me derange pas d'avoir tort, mais
seulement quand j'ai raison :-)


A +

VANHU.


Avatar
manu
JKB wrote:

Si ce n'est pas indiscret, que fait le programme en question, parce
j'ai du mal à imaginer un exécutable de plus d'un giga...


Oh, les trucs mal programmés, c'est pourtant pas ca qui manque...

--
Emmanuel Dreyfus
Le cahier de l'admin BSD 2eme ed. est dans toutes les bonnes librairies
http://www.eyrolles.com/Informatique/Livre/9782212114638/livre-bsd.php


Avatar
JKB
Le 23-03-2005, à propos de
Re: Gestion memoire sur une machine bi/quadriproc,
Emmanuel Dreyfus écrivait dans fr.comp.os.unix :
JKB wrote:

Si ce n'est pas indiscret, que fait le programme en question, parce
j'ai du mal à imaginer un exécutable de plus d'un giga...


Oh, les trucs mal programmés, c'est pourtant pas ca qui manque...


Disons que j'ai déjà programmé des trucs en Fortran et mémoire
statique comme un goret faute de temps, et un giga, je trouve que
cela commence à faire beaucoup (pourtant, en traitement du
signal...).

JKB

--
En plus c'est simple, je fais ce genre de trucs en g77 depuis des années :
il suffit d'écrire un wrapper en C. Et comme ça, j'ai le meilleur des deux
mondes : la rigueur quasi-monacale du Fortran, et l'exubérance pétulante du C.


Avatar
Deepthroat

Oh, les trucs mal programmés, c'est pourtant pas ca qui manque...


Ce ne sont pas des 'hello world'. Les gens avec qui je travaille ne
peuvent alleger leur code, ni les resultats. Faut savoir qu'en mecaflu,
que ce soit de la simulation numerique ou de la PIV, les outils
informatiques utilisés ont tout de suite besoin d'etre enormes. (genre
une manip de PIV sur 2 Jours qui genere 3To de fichier)

1 2 3 4