Alokovatelná paměť na proces

Kasparek Tomas kasparek na fit.vutbr.cz
Pondělí Duben 14 12:37:11 CEST 2003


Zdravím,

nemáte někdo zkušenosti s alokováním velkého množství paměti na Linuxech
(2.4) na x86 architekturách? Potřeboval bych informace o tom, kde přesně se
naráží na limity pokud alokuji >3GB.

Můj problém je v tom že bych potřeboval tu hranici posunout (aspoň o kousek
- tak na 3.2GB). Nevíte někdo o nějakém patchi do jádra který by posouval
PAGE_OFFSET nahoru?

Pokud zkusím alokovat po malých blocích tak se v součtu dostanu na 2933MB
alokovatelné paměti (2933x1MB). Je jedno jaký model paměti v jádře je -
tedy <4GB, 4GB, 64GB. Je mi jasné, že je to omezení LAP (logického
adresového prostoru) v součinosti s konfigurací 3:1 USER:KERNEL.

I pro dosaženou hodnotu mi však chybí vysvětlení - do 3GB chybí 139MB - z
/proc/XXX/maps a dalších je vidět, že knihovny a kód zabírají zhruba 1MB.
Pro tuhle úlohu by neměla vadit fragmentace - alokuje se jednou a po malých
blocích, LAP je rozbit málo (pouze kód, ld.so, libc.so). Zásobník také není
potřeba (ale nevím jaká je standardní velikost).

Díky za nakopnutí nebo odkazy na informace o alokaci v glibc/jádře.

Bye

Zde je testovací program:

<PRE>
#include <stdio.h>
#include <stdlib.h>

#define MB (1024*1024)

/* run as ./test-mem BLOCK_SIZE_IN_MB BLOCK_COUNT */

int main(int argc, char *argv[])
{
    unsigned long long mem=1*MB;
    unsigned long long i,count=1;
    char *buf = NULL;

    if (argc == 3) {
        mem = strtol(argv[1], NULL, 10);
        printf("mem=%llu\n", mem);
        mem *= MB;
        count = strtol(argv[2], NULL, 10);
    }

    printf("count=%llu mem=%llu (%llu KB, %llu MB)\n",
            count, mem, mem/1024, mem/(1024*1024));

    for(i = 0; i < count; i++){
        if ((buf = (char *)malloc(mem)) == NULL)
                {
                    printf("malloc error\n");
                        getchar();
                        return 1;
                }
                printf("i=%llu, total=%llu MB (addr=%X)\n", i, (i+1)*(mem/1024/1024), buf);
    }

    getchar();
    return 0;
}
</PRE>

--

	Tomas Kasparek (sioux), PhD student FIT VUT Brno
 	  tomas.kasparek@[seznam.cz,volny.cz]
	  kasparek na fit.vutbr.cz, linux na fit.vutbr.cz
	  http://www.fit.vutbr.cz/~kasparek



Další informace o konferenci Linux