2016-11-24 3 views
1

У меня есть следующий огромная страница создать исходный код в Linux:Создать огромную страницу разделяемой память для IPC в Linux

int iTotalByte = sizeof(datafeed)* ARRAYSIZE ; 
conf = (datafeed*) mmap(0, iTotalByte , (PROT_READ | PROT_WRITE), MAP_PRIVATE|MAP_ANONYMOUS|MAP_POPULATE|MAP_HUGETLB , -1 , 0) ; 
if(conf == MAP_FAILED) 
{ 
    printf(" mmap error ....\n") ; 
    exit(0) ; 
} 

и она работает хорошо, numastat -m увидит огромную таблицу страниц, сколько MB создать приложение.

Ниже источник я создаю общую память, используемую для IPC:

int shm_fd; 
if((shm_fd = shm_open(THE_FILE, (O_CREAT | O_EXCL | O_RDWR), 
        (S_IREAD | S_IWRITE))) > 0) { 
    ; /* We are the first instance */ 
} 
else if((shm_fd = shm_open(THE_FILE, (O_CREAT | O_RDWR), 
        (S_IREAD | S_IWRITE))) < 0) 
{ 
    printf("Could not create shm object. %s\n", strerror(errno)); 
    exit(0) ; 
} 
int iTotalByte = sizeof(datafeed)*ARRAYSIZE ; 
ftruncate(shm_fd, iTotalByte); 
conf = (datafeed*) mmap(0, iTotalByte , (PROT_READ | PROT_WRITE), MAP_SHARED, shm_fd, 0) ; 
if(conf == MAP_FAILED) 
{ 
    printf(" mmap error ....\n") ; 
    exit(0) ; 
} 

Этот источник создает общую память THE_FILE, используемый для IPC в /dev/shm/, многие процессы могут сделать IPC через THE_FILE разделяемой памяти.

Интересно, существует ли способ, которым я могу объединить общую память в /dev/shm /, и это огромная страница в то же время?! означает, что мне нравится эта огромная память, которая будет использоваться для IPC среди процессов, не просто используется для потоков в одном процессе.

Edit:

https://lwn.net/Articles/375098/

http://lxr.free-electrons.com/source/Documentation/vm/hugetlbpage.txt?v=2.6.32

есть пример кода работы, как ожидалось.

https://lwn.net/Articles/374424/

https://lwn.net/Articles/375096/

https://lwn.net/Articles/376606/

https://lwn.net/Articles/378641/

https://lwn.net/Articles/379748/

также помогают много для понимания огромных страниц.

ответ

1

Учитывая, что вы сделали правильно, настройки страниц, страница размеры и т.д.

sysctl vm.nr_hugepages=1024 

проверить его:

cat /proc/meminfo | grep Huge 
AnonHugePages:   0 kB 
HugePages_Total: 1024 
HugePages_Free:  986 
HugePages_Rsvd:  261 
HugePages_Surp:  0 
Hugepagesize:  2048 kB 

Put что-то вроде этого в файле/и т.д./Fstab

hugetlbfs /mnt/hugepages hugetlbfs gid=2000,uid=2000 0 0 

затем используйте/mnt/огромные страницы вместо/dev/shm, и вы делаете IPC через общую память при поддержке 2M superpage s.

Смежные вопросы