44、Linux内核内存分配:深入解析与优化策略

Linux内核内存分配:深入解析与优化策略

1. 内存分配中的浪费问题

在使用 kmalloc() 进行内存分配时,会出现内存浪费的情况。例如,当请求1,638,500字节(略超过1.5 MB)时,实际获得2,097,152字节(恰好2 MB),浪费率达27%。随着请求接近分配“边界”或阈值,浪费率会逐渐降低,如降至13%,再降至2%。但当跨越阈值,请求略超过2 MB(2,252,900字节)时,会获得4 MB,浪费率高达86%。

这是因为当请求的内存量超过slab层所能提供的最大尺寸(通常为8 KB)时,slab层会调用页面分配器,而页面分配器存在常见的浪费问题,会分配远超所需的内存。

为避免这种情况,需要反复检查使用slab API进行内存分配的代码,并使用 ksize() 进行测试,以确定实际分配的内存量。

如果需要超过1页的内存,可以考虑使用 alloc_pages_exact()/free_pages_exact() API,这有助于减少浪费。

2. 绘制内存分配浪费图

可以使用 gnuplot 工具根据之前收集的数据绘制图表。具体步骤如下:
1. 对内核模块进行最小修改,使其仅输出要绘制图表的数据,即所需(或请求)的内存分配量(x轴)和运行时的浪费百分比(y轴)。修改后的内核模块代码可在相关GitHub仓库中找到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值