OK6410A 开发板 (八) 81 linux-5.11 OK6410A 内存管理存在的问题及解决方案(补丁)总览

本文探讨了内存管理中存在的问题,如内存碎片、内存不足和TLB命中率降低等,并提出了解决方案。内存碎片通过内存规整、kcompactd后台进程和用户手动触发进行整理。大内存页(hugepages)被引入来减少4KB页表的内存开销,提高TLB效率,但需要硬件支持。此外,文章还提到了多级页表的使用和内存释放策略。
摘要由CSDN通过智能技术生成
内存管理存在的问题及解决方案
内核物理内存管理方式 有4种
	根据配置选一种
内核虚拟内存管理方式 有54种用于异常/内核线程/用户进程内核态,1种用于进程用户态内存

以上的管理方式,不是完美的,会造成很多问题:

问题 : 内存碎片/内存不足/无法申请到连续的物理页/4KB页表导致的内存开销增加与tlb的命中率的降低
方案 : 内存规整/内存释放/CMA/大内存页(hugepages)

注意 : 大内存页 和 传统的 4KB 内存页 是 并存的 。 一部分内存用大内存页管理,另一部分内存还是用4KB内存页管理
  • 内存碎片
内部碎片化和外部碎片化

三种方式可以碎片化整理
1.内存分配时(slowpath)直接进行碎片整理
2.kcompactd后台进程进行碎片整理
3.用户手动触发
	echo 1 > /sys/devices/system/node/node0/compact 
	echo 1 > /proc/sys/vm/compact_memory
  • 4KB页表导致的内存开销增加与tlb的命中率的降低
大内存页(一般是大于1G?) 需要 硬件的支持 : 
	也就是说 soc 要支持 1GB或大于1GB 的 内存页
	应该是 armv8 开始支持的,因为armv7 最多支持4GB
		armv8(实现有48bit)可以支持256TB 内存
		armv7(32bit) 可以支持 4GB 内存, 因为地址总线的限制,访问不到 第 (4G + 1)B
			虽然linux 可以在使用内存的时候才映射,可以将 4G以上的物理空间映射到4G以内的虚拟地址,但是物理上不能访问 4G 以上的物理空间
		
hugepages
	对用户空间不透明
THP (Transparent Huge Pages)
	对用户空间透明
  • 页表级数
硬件上有个级数
系统上有个级数

为什么需要多级

多级的时候时候linux的处理过程
一级的时候,要不要填充完毕?
	只需要填充完毕第一级即可,即需要填充完毕
多级的时候,要不要填充完毕?
	只需要填充完毕第一级即可,即不需要填充第二级别以及后面的级别
  • 内存释放
释放到硬盘(swap)
清空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值