[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [linux] a propos de memoire
Salut,
Gaetan GUYODO triggered a rno because of a nice memory hack :)
bon alors je vais te dire ce que moi j'en ai compris, en faisant un peu
abstraction de la mémoire tampon pour que ce soit plus simple. même classement
que d'habitude ;)
> - quand j'ouvre une appli, cela augmente la mémoire utilisée (par exemple de 6
> Mo). mais quand je ferme l'appli, ca ne me libère qu'une partie de ce que ça a
> consommé (1 ou 2 Mo par exemple). pourquoi ?
parce que les unices utilisent un modèle de mémoire dit 'toujours pleine',
c'est à dire que les programmes et données que tu lancent remplissent la
mémoire au fur et à mesure jusque à ce qu'elle soit pleine, de plus ce qui
pourrait resservir n'est pas rééllement effacé de la mémoire tant que tu n'a
pas besoin de mem pour autre chose. les données et progs sont ainsi **en
moyenne** plus rapidement accessibles car cela minimise les accès disques
nécéssaires.
(quand tu ferme un prog et que tu le relance toute une partie est toujours en
mem même si le prog est censé être mort)
c'est aussi un système de mémoire dit 'protégé' où chaque utilisateur dispose
de son propre espace mémoire, sans droit d'empieter sur celui des autres, delit
se nommant 'erreur de segmentation', et dont la peine prévue par le juge linux
est invariablement la mort du fautif, assortie d'une recopie de l'espace
mémoire du fautif dans un fichier nommé 'core'. c'est ce qu'on appelle 'ne pas
se laisser marcher sur les pieds'. non mais :) c'est beaucoup pour ça que linux
est stable, et aussi beaucoup pour ça qu'il est moins rapide que win j'imagine
(beaucoup de context switching).
> n'y a t'il pas moyen de "nettoyer" sa mémoire et d'en avoir le maximum de
> libre, j'utilise une grosse appli, qui consomme souvent beaucoup de
> ressources...
> - quand je lance un calcul, la mémoire se consomme, puis ça passe sur le
> swap... OK. mais à la fin, la mémoire se libère, et il reste quelques Mo sur le
> swap. pourquoi ?
je sais pas pourquoi il reste un peu sur la swap il faudrait regarder plus
précisement ce qui se passe.
bon une fois que le calcul gourmand en mémoire est fini ton prog doit
certainement reliberer la mémoire contenant les données temporaires
intermediaires ayant servi à faire le calcul.
lorsque un programme a besoin de plus de mémoire que ce qui n'est disponible,
le système swappe, c'est à dire qu'il recopie des portions de mémoire sur la
swap pour faire de la place en ram, et il fait celà selon trois niveau de
priorités differents en se basant sur la quantité restante ainsi que sur les
besoins.
en effet il doit rester en permanence une certaine quantité de mémoire vraiment
vide, sinon dès qu'on lancerait quelque chose de nouveau il faudrait commencer
par swapper... c'est la taille de ces 'blocs libres minimaux' qui determine
principalement la façon dont ton système swappera, mais aussi d'autres
paramètres comme la taille des blocs qui sont swappés.
on peux les changer en cours de fonctionnement sans rien recompiler, mais ce
sera perdu au prochain reboot (les fichiers dans /proc n'existent pas
vraiment).
les fichiers à modifier se trouvent dans /proc/sys/vm/ pour un noyau 2.2.17,
ceux qui t'interressent le plus sont 'freepages' (les blocs minimaux à laisser
libre en ram) et 'kswapd' (la taille des portions swappées)
on trouve dans ces fichiers trois nombres qui correspondent à des seuils qui
permettent au noyau de determiner la priorité à accorder aux opérations. ces
nombres sont exprimés en pages mémoire 1page=1024o=1Ko
chez moi freepages
256 512 768
et ça veut dire: si il n'y a plus que 768k de ram libre commence à swapper
tranquille en tache de fond, si plus que 512 swap intensif, et si il reste plus
que 256 le kernel devient le seul autorisé à allouer de la mémoire le temps
qu'il se depatouille de ce bazard.
c'est vraiment pas beaucoup :/ il attend le dernier moment pour swapper quoi en
gros...
avec un ordi qui n'aurait pas beaucoup de mem et sur lequel tu as l'habitude de
travailler avec des fichiers de tailles equivalentes il suffit de changer ces
valeurs pour grandement ameliorer la responsivité du système (sachant qu'avoir
suffisement de memoire pour ses besoins reste la vraie bonne solution, là c'est
la bidouille)
je dirais donc: regarde la taille du fichier généré temporairement par ton
appli et met un valeur légérement superieure à ça dans freepages: ça ne
swappera plus quand tu lancera le calcul. mais ça swappera peut être plus à
d'autres moments...
faut voir combien de mem tu as, la taille moyenne des fichiers que tu
manipule, et combien de mem il te faut quand tu as lancé tout les programmes
dont tu as l'habitude de te servir (en même temps) pour voir ce qui sera le
plus interressant et que ce soit equilibré. en tout cas vas y doucement, petit
à petit pour ne pas chanbouler l'equilibre trop.
quand j'ai decouvert ce système de mem je passait d'un amigaos(+patch
poolmem)sur 68030 à un linux sur 486 et ça me tuait que le pc, qui était censé
avoir deux fois plus de ram, être plus puissant etc, était incapable de charger
une photo sans swapper!
> - dans la liste des process, il y a 7 process à l'état zombie, ce sont des
> process KDE qui appartiennent à l'utilisateur actuellement ouvert (moi).
> qu'est-ce que c'est ?
c'est un processus mort dont le processus parent n'a pas encore été informé de
l'état de sortie, ie par exemple un programme A lancé par un programme B, A
aurait fini son job, mais B n'est pas encore au courant. A est mort mais il
existe encore un petit peu dans le système pour garder la valeur de sortie le
temps que B la récupère: A est un zombie.
bref c'est pas grave et ils disparaissent. et même si ils ne disparaissent pas
y'a un bug mais c'est pas super grave.
a+
--
rno
http://www.noospot42.f2s.com/
[ Soyez précis dans vos sujets svp afin de déterminer directement ]
[ le type de demande... ]
[ Pour vous (dés)inscrire, aller sur http://linuxbe.org/ml.php ]
[ http://LinuxBe.org Contact: listmaster@linuxbe.org ]