PDA

View Full Version : xfree86 e virtual mem


malanaz
20-05-2003, 10:46
Ciao ho notato che xfree86 usa 272m di memoria VIRT
785 root 13 -10 273m 16m 3940 S 1.7 3.3 2:03.01 XFree86
1026 malanaz 12 0 17412 13m 11m S 1.0 2.6 0:00.77 kdeinit
1031 malanaz 13 0 936 936 740 R 1.0 0.2 0:03.14 top
Volevo sapere cosa vuol dire e se è possibile?
Ho debian sid e xfree86 4.3
Grazie

ilsensine
20-05-2003, 10:51
273 M: totale memoria virtuale mappata dal processo
16 M: totale memoria _fisica_ utilizzata dal processo e dalle librerie che usa
273 mi sembra un pò alto, ma a parte questo è "normale" leggere un valore elevato in quel campo. Forse hai una scheda video con 128 MB di memoria?

malanaz
20-05-2003, 11:11
No ho un geforce 32mb ddr cmq ho la risoluzione dello schermo a 1280x1024x24 forse è quello?
A questo punto ti kiedo un'altra cosa ma un valore così alto nella memoria virtuale mi consuma memoria per le altre applicazioni o no?
Grazie

ilsensine
20-05-2003, 11:13
No. Non confondere "memoria virtuale mappata" con "memoria fisica". A una pagina di memoria virtuale può corrispondere:
- una pagina fisica (è l'unico caso in cui "consumi memoria")
- un file
- una pagina finita in swap
- uno spazio di i/o di un dispositivo
- assolutamente nulla (utile per tecniche quali la COW)
- varie ed eventuali

Ciascun programma sotto linux ha a disposizione normalmente 3gb di indirizzi virtuali da utilizzare per quello che vuole, indipendentemente dalla memoria fisica del sistema.

Mason
20-05-2003, 11:34
cos'e la cow?

ilsensine
20-05-2003, 11:38
COW = copy-on-write; ovvero alloca pagine fisiche solo quando il processo ne fa uso.
Se conosci un pò di c prova ad eseguire questo programmino, e a controllare con top la memoria che utilizza:

#include <stdlib.h>
#include <stdio.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define SIZE (64*1024*1024)

int main() {
char *ptr;
int x;
int fd;
fd = open("/dev/zero", O_RDWR);
if(fd<0) {
perror("open");
return -1;
}
printf("controlla con top e premi <invio>\n");
getchar();
ptr = (char *) mmap(NULL, SIZE, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0);
if(-1==(int)ptr) {
perror("mmap");
return -1;
}
printf("memoria mappata - controlla con top e premi <invio>\n");
getchar();
for(x=0; x<SIZE; x+= 4096)
ptr[x] = 1; // COW in action :-)
printf("memoria allocata - controlla con top e premi <invio>\n");
getchar();
munmap(ptr, SIZE);
printf("memoria rilasciata - controlla con top e premi <invio>\n");
getchar();
close(fd);
return 0;
}

Mason
20-05-2003, 11:56
un bel man mmap mi sembra la soluzione,
cosi ad occhio o capito piu o meno ma devo leggermi il man
ma il 4096 e la dimensione standard delle pagine?
da quanto ho capito allochi virtualmente 64 mb poi inizi ad ogni pagina a scriverci un 1,li dovrebbe creare la memoria fisica per ogni pagina e gestirla come memoria normalmente(possibilita di swapp ecc)

la diversita con una normale malloc e che la malloc la crea subito...e giusto quello che ho capito?

ilsensine
20-05-2003, 12:09
malloc usa la chiamata di sistema brk per allocare memoria, che è gestita un pò diversamente da mmap. Inizialmente la malloc non crea neanche le pagine di memoria virtuale mappate, in quanto modificando il limite tramite brk il kernel sa automaticamente quale regione appartiene (apparterrà fisicamente dopo un tentativo di accesso) al programma.

HexDEF6
20-05-2003, 12:24
Ho notato pure io l'uso di tutta quella memoria... potrebbe essere dovuta all'AGP aperture size???
E inoltre prova a staccare i driver nvidia, vedrai che ti cala di circa 100Mb! (almeno cosi mi e' capitato!)

Ciao

ilsensine
20-05-2003, 12:27
Originally posted by "HexDEF6"

Ho notato pure io l'uso di tutta quella memoria... potrebbe essere dovuta all'AGP aperture size???
Avevo una mezza idea in proposito, ma non posso dirlo di sicuro.

E inoltre prova a staccare i driver nvidia, vedrai che ti cala di circa 100Mb! (almeno cosi mi e' capitato!)

Manco Dio In Cielo e Cristo Re In Terra sanno cosa combinano i driver nvidia...

ilsensine
20-05-2003, 12:31
Originally posted by "ilsensine"


Avevo una mezza idea in proposito, ma non posso dirlo di sicuro.

mmm a una seconda analisi non credo...ho 256 MB di apertura e xfree mi ha mappato solo 98MB

HexDEF6
20-05-2003, 12:33
Originally posted by "ilsensine"


Manco Dio In Cielo e Cristo Re In Terra sanno cosa combinano i driver nvidia...

:D :D :D :D :D :D

Ciao

malanaz
21-05-2003, 09:08
I driver nvidia mi servono per quake3... Cmq se ho capito bene non è un problema per la memoria fisica (ogni tanto ho bisogno di girare programmi che occupano pure 300/400 Mb), quindi non me ne preoccuperò.
Grazie

ilsensine
21-05-2003, 10:01
Quando ci sono i driver nvidia in mezzo non puoi essere sicuo di niente...