У меня есть следующий огромная страница создать исходный код в 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/
также помогают много для понимания огромных страниц.