Linux分区页框分配器的水位怎么理解


本篇内容主要讲解“Linux分区页框分配器的水位怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux分区页框分配器的水位怎么理解”吧!先来看下:可以看到在进行伙伴算法分配前有个关于水位的判断,今天我们就看下水位的概念。简单的说在使用分区页面分配器中会将可以用的free pages与zone里的水位(watermark)进行比较。nr_free_buffer_pages 是获取ZONE_DMA和ZONE_NORMAL区中高于high水位的总页数nr_free_buffer_pages = managed_pages – high_pagesmin_free_kbytes 是总的min大小,min_free_kbytes = 4 * sqrt(lowmem_kbytes)setup_per_zone_wmarks 根据总的min值,再加上各个zone在总内存中的占比,然后通过do_div就计算出他们各自的min值,进而计算出各个zone的水位大小。min,low,high的关系如下:low = min *125%;high = min * 150%min:low:high = 4:5:6setup_per_zone_lowmem_reserve 当从Normal失败后,会尝试从DMA申请分配,通过lowmem_reserve[DMA],限制来自Normal的分配请求。其值可以通过/proc/sys/vm/lowmem_reserve_ratio来修改。从这张图可以看出:为了避免direct reclaim,我们需要空余的内存大小一直保持在min值以上。但安卓这种大量用户操作网络接收的系统中,难免会遇到数据量突然增大,需要临时申请大量的内存,此时有可能kswapd回收的内存速度小于内存分配的速度,即发生direct reclaim,从而阻塞应用严重影响性能。我们知道在内存分配时,只有low和min之间的区域才是kswapd活动的区域。而linux中默认的low与min之间的值又比较小,所以就很容易造成direct reclaim的情况。「extra_free_kbytes」:源于此,安卓在linux水位的基础上增加了extra_free_kbytes的变量,这个extra时额外加在low和min之间的,它在min不变的情况下,让low值有所增大。源码如下:想要知道extra_free_kbytes的引入是否取得效果,可以通过/proc/vmstat中的pageoutrun和allocstall来看,两者分别代表了kswapd和dire 香港云主机ct reclaim启动的次数。「watermark_scale_factor」:内核总是在进步的,在linux内核4.6版本中,又诞生了一种新的调节水位的方式,即watermark_scale_factor系数,其默认值是10,对应内存占比10/10000=0.1%,可通过/proc/sys/vm/watermark_scale_factor设置,最大值是1000。举个例子:当其被设为1000时,意味着min与low之间的差值,low与high之间的差值都将是内存大小的10%(1000/10000)。前面讲的extra_free_kbytes的方式只增大了min和low之间的差值,而watermark_scale_factor则同时增大了min和low,low和high之间的差值。到此,相信大家对“Linux分区页框分配器的水位怎么理解”有了更深的了解,不妨来实际操作一番吧!这里是开发云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: Python中怎么利用正则抓取数据

Python中怎么利用正则抓取数据,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、正则表达式基础(1)一般字符(2)预定义字符集(3)数量词(4)边界匹配备注:最常用的一种匹配方式(.*?)…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 09/23 16:26
下一篇 09/23 16:26

相关推荐