native-turbo特性

简介

大型程序的代码段、数据段可达数百MB,关键业务流程TLB miss较高。内核页表大小对性能有影响。

为了方便用户使用大页,native-turbo特性实现了加载程序时自动使用大页的功能,可以针对代码段、数据段使用大页。

使用方法

  1. 打开特性开关

    该特性有两级开关,sysctl fs.exec-use-hugetlb用于控制本系统是否打开该特性(由root用户控制,0不打开,1打开,其他值非法)。

    如果不打开该开关,即使用户设置了环境变量也不会使用该特性,内核会忽略相关流程。

    系统打开该特性后,普通用户可以通过环境变量HUGEPAGE_PROBE自行决定运行的程序是否需要使用大页(1使用,不设置或其他值不使用)。

    sysctl fs.exec-use-hugetlb=1 #主程序使用大页
    export HUGEPAGE_PROBE=1 #动态库使用大页
    

    动态库大页也可以使用LD_HUGEPAGE_LIB=1环境变量强制所有段使用大页。

  2. 标记需要使用大页的段,默认标记所有段,-x表示仅代码段,-d清除已有标记。

    hugepageedit [-x] [-d] app
    

    该工具由glibc-devel包提供。

  3. 启动程序

    ./app

约束限制

  1. 程序与动态库必须按照2M对齐编译,可通过添加如下gcc编译参数实现:

    -zcommon-page-size=0x200000 -zmax-page-size=0x200000
    
  2. 使用前需要预留足够的大页,否则程序会执行失败。

    如果使用cgruop,请注意hugetlb的限制,如果限制小于所需大页数量,可能导致运行时崩溃。

  3. 由于进程页表改为2M,mprotect等系统调用的参数需要按2M对齐,否则会执行失败。

  4. 不支持libcareplus热补丁机制。

  5. 多个进程间无法共享大页,会消耗多倍内存。

文档捉虫

“有虫”文档片段

问题描述

提交类型 issue
有点复杂...
找人问问吧。
PR
小问题,全程线上修改...
一键搞定!
问题类型
规范和低错类

● 错别字或拼写错误;标点符号使用错误;

● 链接错误、空单元格、格式错误;

● 英文中包含中文字符;

● 界面和描述不一致,但不影响操作;

● 表述不通顺,但不影响理解;

● 版本号不匹配:如软件包名称、界面版本号;

易用性

● 关键步骤错误或缺失,无法指导用户完成任务;

● 缺少必要的前提条件、注意事项等;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

正确性

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 命令、命令参数等错误;

● 代码片段错误;

● 命令无法完成对应功能;

● 界面错误,无法指导操作;

风险提示

● 对重要数据或系统存在风险的操作,缺少安全提示;

内容合规

● 违反法律法规,涉及政治、领土主权等敏感词;

● 内容侵权;

您对文档的总体满意度

非常不满意
非常满意
提交
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。