|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Alexandre BREBANTÉtudiant Inscription : août 2011 Messages : 4 ![]() |
Bonjour, ou bonsoir (selon l'heure de votre lecture) à tous et toutes.
Voila, j'effectue un stage en recherche au CHU d'Angers en médecine nucléaire. Nous sommes dans le besoin de simuler la réponse impulsionnelle d'une machine de TEP (Tomography à Emission de Positrons) et c'est là que les choses se compliquent. La génération d'une matrice de réponse impulsionnelle (nous l’appellerons RI) est extrêmement gourmande, pour une image 10*10 la matrice comporte déjà "x" colonnes (autant que de pixels) pour des milliers de lignes (qui dépendent des paramètres de la machine : rayon de giration, profondeur des collimateurs etc etc). Je vous laisse imaginer le délire complet qu'atteint ceci pour une matrice 64*64. Et bien non je ne vous laisserez guère le temps de vous projeter dans une belle et onirique interprétation car cela plante !. La mémoire est entièrement grignotée et nous récupérons une jolie erreur. Actuellement, notre pc est équipé de 3 go de RAM et tourne sous Fedora 15. Alors voici ma question ! Peut-on gérer manuellement la SWAP afin de délocaliser une partie de la mémoire qu'utilise le processus de génération de la RI ? Je m'explique plus en détail : j'ai cru comprendre en parcourant le web que la SWAP engrange les processus qui sont dégagés par la RAM faute de mémoire vive disponible. Notre cas est un peu différent car il semblerait que tout le processus mange à lui seul la mémoire. Pourrait-on décider de swapper le processus dès son exécution (nous ne sommes pas regardant sur la durée d'exécution pour le moment, mais sur la faisabilité) ? Ou une partie de ce processus ?(mais j'avoue trouvée l'idée infaisable, comment spliter un processus en 2) J'avais également trouvé un petit tuto pour décider du seuil d'utilisation de la RAM à partir duquel le système doit swapper, je l'avais abaissé à 20% mais il ne semble pas vouloir swapper pour autant ! A l'heure où je vous parle le système est en train de générer une RI en consommant (ça n'est pas fini) 40% de la RAM et la SWAP est à 0.0% d'utilisation. J'avoue être plongé entre la perplexité et la confusion quand à cela. Alors pour résumer notre problème : quelles sont les alternatives qui nous sont offertes : 1 - Acheter de la RAM 2 - Utiliser la SWAP d'une façon que j'ignore mais que vous connaissez surement ! 3 - Toute autre solution non citée précédemment. Je vous remercie grandement d'avoir pris la peine de me lire jusqu'au bout et je reste en stand-by afin de lire vos réactions et éventuellement vos questions. EDIT : je me permet de vous poster le résultat de la dernière tentative : "Memory error" Nous codons sous python 2.7, je sais que python à la fâcheuse aptitude de gérer la mémoire de façon autonome sans laisser l'utilisateur y laisser mettre son nez (à l'inverse de C qui permet à l'utilisateur de gérer manuellement la mémoire). Mais voici le graphique de l'utilisation de notre mémoire, une chose étonnante est que nous plafonnons à 75% d'utilisation de la RAM (pour une utilisation SWAP anecdotique). Comment diantre une erreur de mémoire peut-elle survenir alors que 25% semblent être encore disponibles ? Le crash mémoire apparaît au moment de la chute brutale 5s avant la prise de vue.
|
|
|
10
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
le swap a plusieurs roles entre autre d'être un complément à la ram mais aussi un buffer etc...etc...etc....
ça s'auto gére la mémoire réservée se libère quand il y en a besoin pour un processus avant d'utiliser le swap et ainsi de suite... par contre il arrive pour certaines configuration de devoir avoir plusieurs espaces de swap sur une même machine (1 par disque physique) pour utiliser plusieurs applications très consommatrices. (ou un disque dédié entièrement à ça, mais on trouve plus de petits disques ultra rapides de 4.7G) C'est la première solution quand à couper un processus en sous processus c'est du threading ça implique la ré-écriture complète du programme concerné. ------------- ensuite le cas d'erreur ne veux pas dire "full memory" mais bien "memory error" donc un échec à l'écriture ou à la lecture ou même un timeout. ça n'a strictement rien à voir avec le VOLUME de mémoire. (fausse piste amha) Par contre il est probable, que ce soit un problème de performance matérielle en terme de vitesse de lecture/écriture, ce qui peut être protégé par un snapshot de la mémoire de temps à autre par l'application et restauré... genre 2 ou 3 * par périodes ouvrées, et ça peut être réalisé par un programme externe, ce qui donc n'implique pas de recoder l'application. Après ça peut aussi avoir d'autres causes mais je connais pas ton environnement donc.... |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Alexandre BREBANTÉtudiant Inscription : août 2011 Messages : 4 ![]() |
Bonjour,
Nul besoin de cacher que réécrire le programme pour utiliser des threads me botte ! Je suis un homme de défi mais il faut savoir ne pas tous les accépter. En revanche, le memory error serait donc un soucis d'écriture/lecture plutôt qu'un soucis de volume. Cela pourrait-il venir du fait qu'au moment ou il plante il est dans une phase de "test". Le script test des rangs de matrice (ce qui peut vite devenir conséquent avec de grosses matrices). Concrètement pourquoi un tel crash apparaît ? Tailles de matrices trop importantes ? La vitesse de lecture/écriture influent sur les performances mais pourquoi pousseraient-elles au crash ? Pourrais-tu, si tu le veux bien, m'en dire un peu plus sur le snapshot de mémoire ? Quelle est en détail son fonctionnement, son utilité, sa mise en oeuvre ? J'ai trouvé ceci en parcourant le web : http://vpourchet.wordpress.com/2010/...les-snapshots/ qui semble expliquer ce dont tu parlais mais si je saisi bien cela revient à virtualiser l'environnement ? Merci d'avance de cette réponse ô combien utile. |
|
|
10
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
le snapshot mémoire ça prend une image et ça l'acquitte comme valide régulièrement et donc si un soft pert un acknowledgement d'écriture ou autre, le deamon remets le dernier état mémoire connu valide et renvoi tous les acknowledgements correspondant aux softs.
Après plus en détails j'en sais rien... mais ça permet pour certains programmes instables de ne pas planter. malgré les problèmes rencontrés. ========== L'erreur d'écriture à mon avis est plus un problème d'acquittement que d'écriture (ou de lecture hein...) qu'une vrai erreur dans l"écriture en elle même. mais ça change rien au problème au final. |
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Alexandre BREBANTÉtudiant Inscription : août 2011 Messages : 4 ![]() |
N'existe-il pas une limite soft pour les processus ?
Avant d'atteindre la limite hard qui serait 100% de la mémoire, linux ne bloquerait-il pas les processus en les bridant de façon software à x% d'utilisation de la RAM (x : ratio max d'utilisation pour un processus)? Ce qui pourrait expliquer pourquoi le programme "planterait" avec une utilisation trop importante de la mémoire par un seul processus. |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
Citation:
|
|
|
|
00
|
|
|
#7 |
|
Invité régulier
![]() Alexandre BREBANTÉtudiant Inscription : août 2011 Messages : 4 ![]() |
Si quelqu'un dans l'assistance a des éléments de réponse quant à la possibilité d'une bridage software des processus, qu'il n'hésite pas à se manifester.
Cordialement, |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com