博客
关于我
避免物理内存碎片化
阅读量:79 次
发布时间:2019-02-26

本文共 1084 字,大约阅读时间需要 3 分钟。

Linux内核的物理内存管理系统在运行过程中一直面临着物理内存碎片化问题。尽管系统总可用物理内存量可能较大,但在长时间运行后,空闲的连续物理内存块可能变得非常小,导致申请大块连续物理内存时失败,尤其是在带有ATOMIC标记的分配操作中。

避免碎片

物理内存碎片化问题一直是Linux操作系统的主要缺陷之一。尽管已有多种解决方案,但没有哪种方法能彻底解决这一问题。memory buddy分配方案提供了一种解决思路。用户空间的物理内存页属于movable类型,可以通过更新页表项和数据复制实现分配,而不可移动的页面则固定在内存中,无法迁移。

页面分类

内核引入了页面迁移类型分类机制,将页面分为三类:

  • unmovable:位置固定,无法迁移,主要用于核心内核分配。
  • reclaimable:不能直接移动,但可以通过kswapd回收。
  • movable:可以随意迁移,用户空间应用程序的页属于此类。
  • 将页面分类后,内核将它们组织到不同的链表中,以减少不同类型页面之间的干扰。movable zone的概念被引入,其中movable zone是虚拟的,内核在运行时动态建立。这种分类方式能有效减少碎片化,优先分配unmovable页面,降低buddy分配失败的几率。

    数据结构与分类

    内核通过宏定义表示迁移类型:

    • MIGRATE_UNMOVABLE
    • MIGRATE_RECLAIMABLE
    • MIGRATE_MOVABLE

    fallbacks数组规定了不同类型页面链表的优先级顺序。当无法在指定类型中找到可用页面时,内核会依次尝试其他链表。这种方法能有效避免unmovable页面的碎片化问题。

    ZONE_MOVABLE

    ZONE_MOVABLE是一种虚拟内存区,主要用于可移动分配。其核心思想是将物理内存划分为两部分:

    • 一部分用于可移动分配。
    • 一部分用于不可移动分配。

    ZONE_MOVABLE内存可以从高端内存或普通内存中提取。其优点在于可移动分配不会影响不可移动区的碎片化。对于用户空间的页面映射和内核vmalloc分配等高需求场景,ZONE_MOVABLE提供了高效的内存分配策略。

    结论

    尽管ZONE_MOVABLE和页面分类方法显著缓解了物理内存碎片化问题,但仍存在不足之处。频繁的reclaimable分配会导致unmovable区的碎片化问题。因此,针对特定场景,可以采取以下优化措施:

  • 减少分配的连续页面数目。
  • 使用预分配策略,确保关键操作不会因分配失败而影响系统稳定性。
  • 这种方法虽然不完全解决物理内存碎片化问题,但能显著减少分配失败的可能性,提升系统性能。

    转载地址:http://tmjz.baihongyu.com/

    你可能感兴趣的文章
    Mysql启动失败解决过程
    查看>>
    MySQL启动失败:Can't start server: Bind on TCP/IP port
    查看>>
    mysql启动报错
    查看>>
    mysql启动报错The server quit without updating PID file几种解决办法
    查看>>
    MySQL命令行登陆,远程登陆MySQL
    查看>>
    mysql命令:set sql_log_bin=on/off
    查看>>
    mySQL和Hive的区别
    查看>>
    MySQL和Java数据类型对应
    查看>>
    mysql和oorcale日期区间查询【含左右区间问题】
    查看>>
    MYSQL和ORACLE的一些操作区别
    查看>>
    mysql和redis之间互相备份
    查看>>
    MySQL和SQL入门
    查看>>
    mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
    查看>>
    Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
    查看>>
    Mysql在Windows上离线安装与配置
    查看>>
    MySQL在渗透测试中的应用
    查看>>
    Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
    查看>>
    Mysql在离线安装时提示:error: Found option without preceding group in config file
    查看>>
    MySQL基于SSL的主从复制
    查看>>
    Mysql基本操作
    查看>>