← Back to team overview

sslug-teknik team mailing list archive

Re: SV: Allokering af store mængder hukommelse

 

On 12/12/2011 09:42 PM, Jan Holst Jensen wrote:
> Det er jo kun omkring 8 GB, så jeg ville da smide det hele op i RAM.
> Hvis altså du har 8 G i maskinen :-). Der er jo ingen problemer med at
> addressere det med 64-bit kode.
> Memory mapper du en fil kan det blive rigtig langsomt hvis du hopper tilfældigt rundt i strukturen. Selv med alle data i RAM bør du stadig forsøge at få algoritmen til at tilgå memory så lineært og blokvist du kan for at maximere brugen af cache.
Super. Det prøvede jeg så, men det ser ud til at jeg ikke kan allokere
så meget:

$ uname -m
x86_64
$ uname -r
2.6.38-13-generic
$ ulimit -m
unlimited
$ ulimit -v
unlimited
$ cat test.c
#include <sys/mman.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>

int main(int argc, const char *argv[]) {
    void * ptr = NULL;
    long amount = atol(argv[1]);

    printf("Allocating %ld bytes\n", amount);
    ptr = malloc(amount);
    printf("Malloc: %p\n", ptr);
    if (ptr) {
        free(ptr);
    }

    ptr = mmap(NULL, amount, PROT_READ|PROT_WRITE, MAP_PRIVATE |
MAP_ANONYMOUS, -1, 0);
    printf("Mmap: %p\n", ptr);
    if (ptr) {
        munmap(ptr, amount);
    }
   
    return 0;
}
$ gcc -o test test.c
$ ./test $((1024*1024*1024*8))
Allocating 8589934592 bytes
Malloc: (nil)
Mmap: 0xffffffffffffffff
$ ./test $((1024*8))
Allocating 8192 bytes
Malloc: 0xc29010
Mmap: 0x7fe31c404000
$


Jeg binær søgte mig frem til at jeg fejler ved lidt over 4.9G:

$ cat bound.sh
#!/bin/bash

lower_bound=4096
upper_bound=$((1024*1024*1024*8))

while test $lower_bound -lt $upper_bound; do
    middle=$(((lower_bound+upper_bound) / 2))
    if ./test $middle >/dev/null; then
        lower_bound=$middle
    else
        upper_bound=$middle
    fi
done
echo $lower_bound
$ ./bound.sh
4908842715
$ ./bound.sh
4908988122
$ ./bound.sh
4909340387
$

Er der noget, jeg har overset ?

Attachment: signature.asc
Description: OpenPGP digital signature


Follow ups

References