更新时间:2025-08-12 GMT+08:00
配置内存透明大页
应用场景
透明大页 Transparent Huge Pages(THP)是Linux内核中的一种内存管理技术,旨在自动将多个小页面(通常是4KB)合并为一个大页面(通常是2MB)。其核心原理是通过动态调整页面大小来优化内存管理,减少页表查找次数和TLB未命中次数,从而提高内存访问效率。然而,在内存碎片化严重或内存整理开销较大的情况下,它可能会导致内存占用增加。
透明大页优势
透明大页缺点
透明大页配置策略建议
- 当应用程序频繁申请和释放小块内存(如4KB页面),透明大页(THP)的自动管理机制可能会频繁尝试合并和拆分页面。这种动态管理过程需要额外的计算资源,可能导致内存管理开销显著增加。此外,频繁的合并和拆分操作可能引发内存碎片化问题,进一步降低内存利用率。因此,在这种场景下,不建议开启透明大页功能,以避免性能下降。
- 如果应用程序对性能没有过高要求,但系统内存较为紧张,关闭透明大页可以有效降低内存占用。透明大页的分配机制可能导致实际内存使用量与应用程序需求不匹配,从而增加RSS(Resident Set Size)。关闭透明大页后,系统会使用传统的4KB小页面管理方式,虽然可能增加TLB未命中次数,但可以显著减少内存碎片化问题,降低内存占用,从而避免因内存不足引发的OOM(Out Of Memory)错误。
约束与限制
- CCI 2.0支持在创建负载时通过annotations配置透明大页策略,通过Deployment的YAML修改透明大页策略时,会造成POD的重建。
- 透明大页enabled策略为开启时:
- transparent_hugepage/defrag策略默认为madvise,仅针对madvise(MADV_HUGEPAGE)区域进行直接回收。
- transparent_hugepage/khugepaged/defrag策略默认为1,表示默认启用khugepaged内存碎片整理。
操作步骤
- 登录云容器实例 CCI2.0控制台。
- 左侧导航栏中选择“负载管理 > 无状态负载”,单击“YAML创建”。
- 配置deployment代码,示例如下所示:
kind: Deployment apiVersion: cci/v2 metadata: name: deploy-example namespace: test-namespace spec: replicas: 1 selector: matchLabels: app: deploy-example template: metadata: labels: app: deploy-example annotations: system.cci.io/transparent_hugepage.enabled: never spec: containers: - name: deploy-example image: nginx resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi dnsPolicy: Default imagePullSecrets: - name: imagepull-secret strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 maxSurge: 100%
表1 重要字段说明 字段名称
类型
说明
system.cci.io/transparent_hugepage.enabled
String
- always(默认值):系统全局开启THP功能。
- madvise:仅在通过madvise(MADV_HUGEPAGE)区域开启THP功能进行系统调用。
- never:系统全局关闭THP功能。
- 单击“确定”。
父主题: 负载管理