C++ 将原始插座与Hugepages组合时出现问题

C++ 将原始插座与Hugepages组合时出现问题,c++,linux,sockets,mmap,raw-sockets,C++,Linux,Sockets,Mmap,Raw Sockets,我想在linux(Ubuntu18.04)中用我的原始UDP套接字读取器拥有一个大页面(2MByte)的环形缓冲区。我可以创建原始套接字: socket\u fd=socket(AF\u数据包,SOCK\u原始,0) 我可以使用mmap创建一个普通内存(4KB页面)环形缓冲区: void * rxring_buffer = mmap(nullptr, size_in_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, socket_fd, 0); 然而

我想在linux(Ubuntu18.04)中用我的原始UDP套接字读取器拥有一个大页面(2MByte)的环形缓冲区。我可以创建原始套接字:

socket\u fd=socket(AF\u数据包,SOCK\u原始,0)

我可以使用mmap创建一个普通内存(4KB页面)环形缓冲区:

    void * rxring_buffer = mmap(nullptr, size_in_bytes, PROT_READ | PROT_WRITE, MAP_SHARED, socket_fd, 0);
然而,我看不到使用hugepage环形缓冲区的明显途径。我最初的尝试是将MAP_HUGETLB与mmap结合使用。但是,从中可以看出,该选项似乎仅适用于不允许文件(或套接字)备份的MAP_ANONYMOUS

我可以通过以下方式创建巨大的共享内存缓冲区:

    int mem_fd = open("/mnt/huge/hugepagefs", O_CREAT | O_RDWR, 0755);
    void * big_buff_ptr = mmap(nullptr, size_in_bytes,
                        PROT_READ | PROT_WRITE,
                        MAP_SHARED, mem_fd, 0));
但我没有看到将其分配给套接字环缓冲区的路径

有没有办法将hugepage共享内存分配给环形缓冲区