Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Linux巨大页面和子级在fork()之后通过SIGBUS终止_C_Linux_Fork_Huge Pages - Fatal编程技术网

C Linux巨大页面和子级在fork()之后通过SIGBUS终止

C Linux巨大页面和子级在fork()之后通过SIGBUS终止,c,linux,fork,huge-pages,C,Linux,Fork,Huge Pages,在Linux中,通过虚拟文件提供对hugepages的访问 系统规模庞大。libhugetlbfs库接口与 hugetlbfs提供更方便的特定应用程序级别 服务 libhugetlbfs可用于使现有应用程序使用hugepages 对于它的所有malloc()调用 要使用automatic hugepage malloc()功能运行程序,我设置了以下环境变量: 设置LD_PRELOAD=libhugetlbfs.so 将LD_LIBRARY_PATH设置为包含libhugetlbfs.so的目录

在Linux中,通过虚拟文件提供对hugepages的访问 系统规模庞大。libhugetlbfs库接口与 hugetlbfs提供更方便的特定应用程序级别 服务

libhugetlbfs可用于使现有应用程序使用hugepages 对于它的所有malloc()调用

要使用automatic hugepage malloc()功能运行程序,我设置了以下环境变量:

  • 设置LD_PRELOAD=libhugetlbfs.so
  • 将LD_LIBRARY_PATH设置为包含libhugetlbfs.so的目录
  • 设置HUGETLB_MORECORE=yes
  • 现在,我的新进程对所有malloc()内存使用巨大的页面(如果可用)。但是,当它执行fork()系统调用时,如果系统上没有足够的大型页面,则子系统将被SIGBUS终止。发生这种情况的原因是,当子级尝试更新malloc的内存中的某个内存位置时,会发生页面错误。由于写时复制机制,系统尝试将新的巨大页面分配给子级以解决页面错误。但由于没有大页面可用,内核会生成SIGBUS并出错


    如果您能提供任何帮助/指示,帮助我解决SIGBUS造成的child丑陋终止和导致core的问题。

    内存可用,但无法使用大量页面。我希望在没有大页面的情况下,应该使用常规大小的内存页面。请让我知道问题的哪一部分不清楚。我将试着重述一遍。好的,重述一下这个问题:一个程序分配了hugepages,然后分叉。当子级开始修改页面时,它会耗尽空间,因为系统无法分配新的hugepage,而不是从常规内存创建页面。是。谢谢你的总结。