linux vm balance 翻译

没有_GFP_WAIT和GFP_IO标志的内存分配需要内存平衡。

这里有两个原因需要进行 non __GFP_WAIT的分配:1.调用者不能睡眠(特别是在中断上下文中)。2.或者处于某些原因不想费时间在页面分配或是swap io上。

__GFP_IO 标志是为了防止文件系统的死锁。

如果缺乏无睡眠的内存分配请求,进行内存平衡看起来是有害的。页面回收可以在需要(zone free memory is 0的时候)的时候进行,而不是主动的进行。

That being said, the kernel should try to fulfill requests for direct mapped pages from the direct mapped pool,

instead of falling back onthe dma pool, so as to keep the dma pool filled for dma requests (atomicor not).同样方式也适合高端内存和直接映射页面。如果有很多空闲的dma页面,直接从dma 内存池中分配就可以很好的满足一般的分配请求,而不需要花费时间去进行zone 的内存平衡。

在2.2,内存平衡和页面回收只有在空闲页面率低于内存总量的1/64的时候才会被触发。因为dma和普通内存的比例,很有可能在dma内存区完全空了也不会进行内存平衡。2.2通常跑在多内存的机器上,即时存在上面的问题,看起来工作的也不错。在2.3,因为有了高端内存,问题更严重了。

在2.3,平衡zone可以采取两种方式中的一种:取决于zone的大小(可能是lower class zone的大小),我们可以在初始化的时候决定需要的空闲页,以次为目标进行内存平衡。好的方面是我们不需要检查lower class zones 的大小,不好的方面是我们忽略了lower class zones的使用率,所以需要经常进行平衡。Also,with a slight change in the allocation routine, it is possible to reduce the memclass() macro to be a simple equality.

另外一个解决方法是:当一个zone的空闲率和该zone的lower class zones 都 低于总内存的 1/64的时候才进行平衡。这解决了2.2的问题,同时给保持了和2.2同样的处理行为。当然,平衡算法在各种不同的结构体系上是一样的。如果我们想做的更好,将来可以给不同的zones赋予不同的权值。

注意到一点,如果普通zone远远大于dma zone,当进行普通zone的平衡的时候dma zone就几乎去不了作用了。第一个解决方法可以处理的更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值